#include "../include.h"
typedef struct LNode
...{
ElemType e;
struct LNode *next;
}LNode,*LinkList;
Status InitList(LinkList *l)
...{
*l = (LNode *)malloc(sizeof(LNode));
if(!*l)
...{
exit(OVERFLOW);
}
(*l)->next = NULL;
return OK;
}
Status DestoryList(LinkList *l)
...{
LNode *p = *l;
LNode *next = NULL;
while(p)
...{
next = p->next;
free(p);
p = next;
}
return OK;
}
Status ListInsert(LinkList l,ElemType e,int i)
...{
LNode *p = l;
int j = -1;
while(p && j < i - 1)
...{
p = p->next;
j++;
}
if(!p || j != i - 1)
...{
return INFEASIBLE;
}
LNode *q = (LNode *)malloc(sizeof(LNode));
if(!q)
...{
exit(OVERFLOW);
}
q->e = e;
q->next = p->next;
p->next = q;
return OK;
}
Status ListDelete(LinkList l,ElemType *e,int i)
...{
LNode *p = l;
int j = -1;
while(p && j < i - 1)
...{
p = p->next;
j++;
}
if(!p || j != i - 1)
...{
return INFEASIBLE;
}
LNode *q = p->next;
*e = q->e;
p->next = q->next;
free(q);
return OK;
}
int Locate(LinkList l,ElemType e)
...{
LNode *p = l->next;
int i = 0;
while(p)
...{
if(p->e == e)
...{
return i;
}
p = p->next;
i++;
}
return INFEASIBLE;
}
void Print(LinkList l)
...{
LNode *p = l->next;
while(p)
...{
printf("%d ",p->e);
p = p->next;
}
printf(" ");
}
int main()
...{
LinkList l;
printf("Init list...");
InitList(&l);
printf("initialed. ");
printf("Insert elements: 12 5 33 98 21 3 22 ");
ListInsert(l,12,0);
ListInsert(l,5,1);
ListInsert(l,33,2);
ListInsert(l,22,3);
ListInsert(l,3,3);
ListInsert(l,21,3);
ListInsert(l,98,3);
printf("Result: ");
Print(l);
printf("Locate elements: 21 33 12 ");
printf("Result: ");
printf("%d ",Locate(l,21));
printf("%d ",Locate(l,33));
printf("%d ",Locate(l,12));
printf("Delete elements: 3 33 12 ");
ElemType e;
ListDelete(l,&e,5);
ListDelete(l,&e,2);
ListDelete(l,&e,0);
printf("Result: ");
Print(l);
printf("Destory list...");
DestoryList(&l);
printf("destoried. ");
}
本文介绍了一个简单的单链表数据结构,并实现了其初始化、插入、删除、查找及销毁等基本操作。通过C语言示例代码展示了如何进行节点的创建、连接及释放内存等过程。
899

被折叠的 条评论
为什么被折叠?



