单链表的基本操作
首先预定义链表结构和结点
代码语言:javascript复制typedef struct Node{
ElemType data;
struct Node *next;
}Node;
typedef struct Node *LinkList; /*定义LinkList*/
接下来贴几个基本操作
代码语言:javascript复制/*初始条件:顺序线性表L 不存在*/
/*操作结果:建立一个头结点*/
Node *LinkListInit(){
Node *p;
p = (Node *)malloc(sizeof(Node)); /*建立一个大小与Node结点大小相同的结点*/
if(!p){
printf("分配空间失败!");
}
p->next = NULL;
return p;
}
/*初始条件:顺序链表L 已存在*/
/*操作结果:在链表L 中填入元素*/
Node *LinkListCreat(){
Node *q, *p, *L;
p = (Node *)malloc(sizeof(Node));
L = (Node *)malloc(sizeof(Node)); //建立一个头结点
//开始建立新的链表的后续项目
q = (Node *)malloc(sizeof(Node));
printf("请输入该链表的元素(0表示结束):");
scanf("%d", &q->data);
int m = q->data;
while(m != 0){ // 判断输入是否为0
p->next = q;
p = q;
q = (Node *)malloc(sizeof(Node));
printf("请输入该链表的元素(0表示结束):");
scanf("%d", &m);
q->data = m;
}
}
/*初始条件:顺序线性表L 已存在,1 <= i <= ListLength(L)*/
/*操作结果:用e 返回L 中第i 个数据元素的值*/
Status GetElem(LinkList L, int i, ElemType *e){
int j;
LinkList p; /*声明一指针p*/
p = L->next; /*让p 指向链表L的第一个结点*/
j = 1; /*j 为计数器*/
while(p && j < i){ /*p 不为空 且计数器j还没有等于i 时,循环继续*/
p = p->next; /*让p 指向下一个结点*/
j ;
}
if(!p || j > i){ /*当第i 个结点不存在时*/
return ERROR;
}
* e = p->data; /*取第i 个结点的数据*/
return Ok;
}