#include<stdio.h>#include<stdlib.h>#ifndef_List_H//list.h头文件structNode;typedefstructNode*PtrToNode;typedef PtrToNode List;//作为链表参数传入函数typedef PtrToNode Position;//作为位置参数传入函数typedefint ElementType;//ElementType为任意数据类型以下用int代替
List MakeEmpty(List L);//清空链表并返回或者是创建一个新链表intIsEmpty(List L);//判断一个链表是否是空表 intIsLast(Position P,List L);//测试当前的位置是否是链表的末尾
Position Find(ElementType X,List L);//Find函数 voidDelete(ElementType X,List L);//删除X
Position FindPrevious(ElementType X,List L);//返回X的前驱结点
Position FindNext(ElementType X,List L);//返回X的后继结点voidInsert(ElementType X,List L,Position P);//插入函数 voidDeleteList(List L);//删除链表voidChange(ElementType X,ElementType Y,List L);//用X替换Y
Position Header(List L);//返回表头
Position First(List L);//返回第一个元素
Position Advance(Position P);//返回前一个元素
ElementType Retrieve(Position P);//返回当前位置的值voidPrintList(List L);//输出链表#endifstructNode{
ElementType Element;
Position Next;};
List MakeEmpty(List L){
L =(structNode*)malloc(sizeof(Node));
L->Element =0;
L->Next =NULL;return L;}intIsEmpty(List L){return L->Next==NULL;}intIsLast(Position P,List L){return P->Next==NULL;}
Position Find(ElementType X,List L){
Position P;
P=L->Next;while(P!=NULL&&P->Element!=X){
P=P->Next;}return P;}
Position FindPrevious(ElementType X,List L){
Position P;
P=L;while(P->Next!=NULL&&P->Next->Element!=X){
P=P->Next;}return P;}
Position FindNext(ElementType X,List L){
Position P;
P = L;while(P!=NULL&& P->Element != X)
P = P->Next;return P->Next;}voidDelete(ElementType X,List L){
Position P,TmpCell;
P=FindPrevious(X,L);if(!IsLast(P,L)){
TmpCell=P->Next;
P->Next=TmpCell->Next;free(TmpCell);}}voidInsert(ElementType X,List L,Position P){
Position TmpCell;
TmpCell=(structNode*)malloc(sizeof(structNode));if(TmpCell==NULL)printf("out of space!");
TmpCell->Element=X;
TmpCell->Next=P->Next;
P->Next=TmpCell;}voidDeleteList(List L){
Position P,Tmp;
P=L->Next;
L->Next=NULL;while(P!=NULL){
Tmp=P->Next;free(P);
P=Tmp;}}voidChange(ElementType X,ElementType Y,List L){
Position P;
P=Find(Y,L);
P->Element=X;}voidPrintList(List L){
Position P;
P=L->Next;while(P!=NULL){printf("%d ",P->Element);
P=P->Next;}}
Position Header(List L){return L;}
Position First(List L){if(L->Next!=NULL)return L->Next;}
Position Advance(Position P){if(P!=NULL)return P->Next;}
ElementType Retrieve(Position P){if(P!=NULL)return P->Element;}intmain()//测试{
List list=NULL;
Position p;int i;
list =MakeEmpty(list);printf("已生成空链表list\n");if(IsEmpty(list))printf("经检验list是个空链表\n");
p = list;for(i=0;i<5;i++){Insert(i*i,list,p);
p =Advance(p);printf("已插入的值为%d新节点\n",Retrieve(p));}
p =FindNext(9,list);printf("数据项为9的节点后继的数据项值为%d\n",Retrieve(p));
p =FindPrevious(9,list);printf("数据项为9的节点前驱的数据项值为%d\n",Retrieve(p));Delete(9,list);
p = list;for(i=0;i<4;i++){
p =Advance(p);printf("删除数据项为9的节点剩下的节点值为%d\n",Retrieve(p));}DeleteList(list);printf("已删除链表list的所以数据节点\n");if(IsEmpty(list))printf("经检验list是个空链表\n");system("pause");return0;}