具體實現代碼:
#include<stdio.h>
#include<malloc.h>
typedef int ListItem;
typedef struct node *link;//定義節點類型
typedef struct node{
ListItem element;//節點存儲的元素
link next;//直接下一個元素的指針
} Node;
typedef struct Ilist *List;
typedef struct Ilist//定義表結構
{
link first;
} Llist;
link NewNode(){//新建一個節點類型
link p;
if((p=malloc(sizeof(Node)))==0) printf("exhausted memory\n");
else return p;
}
List ListInit(){//初始化一個表
List L=malloc(sizeof *L);//分配內存
L->first=0;
return L;
}
int LIstEmpty(List L){//判斷表是否爲空,
return L->first==0;
}
int ListLength(List L){//返回數組的長度
int len=0;
link p;
p=L->first;
while(p){
len++;
p=p->next;
}
return len;
}
ListItem ListRetrieve(int k,List L){//list中第K位置的元素
int i;
link p;
if(k<1) printf("out of bounds\n");
p=L->first;
i=1;
while(i<k&&p){
p=p->next;
i++;
}
return p->element;
}
int ListLocate(ListItem x,List L){//元素x在list中的位置
int i;
link p;
p=L->first;
while(p && p->element != x){
p=p->next;
i++;
}
return p ? i : 0;
}
void ListInsert(int k,ListItem x,List L){//在list的第K處插入元素x
link p,y;
int i;
if(k<0) printf("out of bounds\n");
p=L->first;
for(i=1;i<k&&p;i++)
{p=p->next;}
y=NewNode();
y->element=x;
if(k){
y->next=p->next;
p->next=y;
}
else{
y->next=L->first;
L->first=y;
}
}
ListItem ListDelete(int k,List L){//刪除list重第K個元素
ListItem x;
link p,q;
int i;
if(k<1||!L->first) printf("out of bounds\n");
p=L->first;
if(k==1) L->first=p->next;
else{
q=L->first;
for(i=1;i<k-1&&q;i++) q=q->next;
p=q->next;
q->next=p->next;
x=p->element;
free(p);
return x;
}
}
void printList(List L){//打印list中的所有的元素
link p;
for(p=L->first;p;p=p->next)
printf("%d\n",p->element );
}
void main(){
List L=ListInit();
ListInsert(0,0,L);
ListInsert(0,2,L);
ListInsert(1,1,L);
printList(L);
printf("list is LIstEmpty? -> %d\n",LIstEmpty(L) );
printf("list length is-> %d\n",ListLength(L));
printf("list %d item is ->%d\n",2,ListRetrieve(2,L) );
printf("list item %d in ->%d\n",2,ListLocate(2,L) );
ListDelete(2,L);
printList(L);
}