<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
/**********************************************
链表的操作
BY YQG.06.3.6
***********************************************/
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
#ifndef FALSE
#define FALSE 0
#endif
#ifndef TRUE
#define TRUE 1
#endif
#define LENGTH sizeof(struct node)
typedef struct node
{
int elem;
struct node*next;
}list;
int InitList(list **p);
void DispList(list**p);
int empty_or_not(list**p);
int insertlist(list**p,int i,char lelem);
/*int locatelist(list*&p,int i,char&lelem);
int lengthlist(list*&p);
int deletelist(list*&p,int i,char&lelem);
void DestroyList(list**p);*/
void main()
{
list*linklist;
int tem=0;
char str;
if(!InitList(&linklist))
printf("error");
DispList(&linklist);
printf("\nInput the insert location(<%d):",tem);
scanf("%d",&tem);
printf("\nInput the data:");
scanf("%d",&str);
insertlist(&linklist,tem,str);
DispList(&linklist);
getch();
}
int InitList(list**head)
{
int n=0;
list*q,*p;
if((q=(list*)malloc(LENGTH))==NULL || ((*head)=(list*)malloc(LENGTH))==NULL)
return FALSE;
q->next=NULL;
(*head)->next=NULL;
p=(*head);
printf("\nInput the list int number(End with 0):");
scanf("%d%*c",&(q->elem));/*创建第一个结点*/
p->next=q;
while(q->elem!=0)
{
p->next=q;/*尾插法*/
p=q;
if((q=(list*)malloc(LENGTH))==NULL)
printf("ERROR");
scanf("%d%*c",&(q->elem));
q->next=NULL;
}
return TRUE;
}
void DispList(list**head)
{
list*lp=(*head);
if(empty_or_not(&lp))
{
printf("it is empty!");
return;
}
while(lp->next!=NULL)
{
printf("%d ",lp->next->elem);
lp=lp->next;
}
}
int empty_or_not(list**p)
{
return ((*p)->next==NULL);
}
int insertlist(list**p,int i,char lelem)
{
int j=0;
list*lp=(*p);
list*q=(list*)malloc(LENGTH);
if(i==0)
{
q->elem=lelem;
q->next=(*p)->next;
(*p)->next=q;
return TRUE;
}
while(lp->next!=NULL && jnext;
j++;
}
if((lp->next==NULL) && (j!= i-1))/*超过连链表的长度*/
{
free(q);
printf("error!");
return FALSE;
}
q->elem=lelem;
q->next=lp->next;
lp->next=q;
return TRUE;
}
分享到:
相关推荐
总的来说,这个“链表类”实现了对不同类型数据的链表操作,包括插入数据和排序插入。通过合理的接口设计和类型兼容性,我们可以灵活地处理数字、对象或其他复杂数据结构,使得链表成为一种强大且灵活的数据结构工具...
### 操作单链表的函数:学习链表操作 #### 一、理解单链表结构 单链表是一种常见的线性数据结构,其中每个元素(通常称为节点)包含两个部分:存储实际数据的数据字段和指向下一个节点的指针。这种结构使得链表...
在这个“链表操作演示程序Java版”中,我们看到开发者利用Java语言和JavaFX库创建了一个可视化工具,用于展示链表的各种操作。JavaFX是一个用于构建桌面、移动和嵌入式平台的富客户端应用程序的开源框架。 1. **...
在这个源码示例中,我们看到的是一个基于VC++实现的链表操作的动态演示,它巧妙地运用了Timer事件来呈现链表操作的过程。 1. **链表的基本概念**: - 链表由一系列节点组成,每个节点包含两部分:数据元素和指向下...
在本文中,我们将深入探讨如何使用链表来...通过学习和理解这段代码,你可以更深入地了解链表操作的细节,包括如何使用C语言处理指针和数据结构。实践这些操作可以帮助提升编程技能,并为解决更复杂的问题打下基础。
链表操作是C语言数据结构学习中非常重要的部分,理解了链表的创建、遍历和删除等操作,对于深入学习更高级的数据结构有很大的帮助。在实际编程中,根据不同的需求,链表可能还会有更复杂的变化,比如双向链表、循环...
链表操作程序(完整)C语言.txt链表操作程序(完整)C语言.txt
这个主题"链表操作及多项式"深入探讨了如何利用链表来实现多项式运算。 链表操作主要包括创建、插入、删除、遍历和打印等。创建链表通常涉及初始化一个头节点,然后根据需要添加节点。插入节点可以在链表的开头...
- **链表的合并与排序**:在排序链表或合并两个已排序链表时,链表操作尤为重要,如归并排序、插入排序等。 - **链表的反向**:将链表的顺序反转,这涉及到对节点的重新连接。 链表是数据结构中的基础,理解和...
"易语言链表操作类源码"是专门为易语言设计的,用于理解和操作链表的数据结构。 链表不同于数组,它不连续存储数据,而是通过节点间的引用关系来组织数据。每个节点包含两部分:数据域和指针域。数据域存储实际的...
类模板封装链表操作通常包括以下几个关键部分: 1. **节点类(Node Class)**:定义一个节点类,用于存储数据和指针。例如: ```cpp template struct Node { T data; Node* prev; Node* next; }; ``` 2. ...
本项目以"数据结构课程设计链表操作"为主题,通过C/C++语言实现了链表的各种基本操作,包括添加元素、删除元素、逆序排列以及排序等。以下将详细阐述这些操作的原理和实现方法。 首先,链表是一种线性数据结构,与...
C语言是实现链表操作的常用工具,它提供了丰富的指针操作功能,使得我们能方便地创建、插入、删除和遍历链表节点。"C11.C"文件很可能包含了实现这些操作的代码,例如: 1. **链表的创建**:首先,需要定义链表节点...
本项目名为“C语言链表操作演示程序”,是利用C语言和ege库编写的,目的是通过可视化的方式帮助学生理解和掌握链表的基本操作。Ege库是一个用于图形用户界面(GUI)开发的C++库,它可以用来创建动态的、交互式的演示...
创建链表是链表操作的基础。在文件"1.cpp"中,`creatlist`函数用于创建链表。用户输入数据,函数通过不断分配新的节点并连接到链表中,直到用户输入0表示结束。最后,链表的头指针`l`被更新为新创建的链表头部。 ...
本压缩包包含四个文件,9_6.cpp、9_7.cpp、9_6.h和9_5.h,它们很可能是实现链表操作的源代码和头文件。 9_6.h 和 9_5.h 可能定义了链表节点的结构体和链表操作的相关函数。在C++中,链表通常通过指针来表示,每个...
在这个“C语言链表操作完整工程”中,我们将深入探讨如何在C语言中实现链表的各种操作。 首先,链表由一系列节点组成,每个节点包含两部分:数据域(用于存储数据)和指针域(用于指向下一个节点)。创建链表首先要...
这个链表操作的源程序包含了链表数据结构的基本操作,是学习和理解链表操作的一个良好示例。通过这个程序,我们可以了解如何在C语言中实现链表的创建、修改、查询和删除等操作,这对于理解和编写更复杂的算法或数据...
6. **反转链表**:这是一个常见的链表操作,通过迭代或递归方式改变相邻节点的指针方向来实现。 7. **合并两个有序链表**:将两个已排序的链表合并成一个,保持排序顺序。 8. **判断链表环**:检测链表中是否存在...