标签:
一、为何需要静态链表:
#define MaxSize 50 typedef struct{ int data; int next;//游标或者指针域 }List;
void init_sl(List list[]) { int i; for(i=0;i<MaxSize;i++) { list[i].next=i+1;//因为都没有赋值,所以直接指向下一个 } list[MaxSize-1].next=0; }
int ListLength(List list[]) { int j=0; int i=list[MaxSize-1].next; while(i)//当i<=0时停止 { i=list[i].next; j++; } return j; }
int malloc_sl(List list[]) { int i=list[0].next;//取头结点后的第一个空闲结点 if(i) { list[0].next=list[i].next;//调整空闲链表头结点的指针域 } return i;//返回申请到空闲结点数组下标 }
bool ListInsert(List list[],int i,int e) { int j,k,l; k=MaxSize-1; if(i<1||i>ListLength(list)+1) //判断位置是否非法 return false; j=malloc_sl(list);//申请一个空闲结点 if(j) { list[j].data=e; for(j=1;j<=i-1;j++) { k=list[k].next;//找到第i个元素之前的元素 } list[j].next=list[k].next;//把第i个元素之前next赋值给新申请的next(也就想当于让j指向i) list[k].next=j;//在让i的前一个元素的next指向j return true; } return false; }
void Free_SSL(List list[],int k) { list[k].next=list[0].next; list[0].next=k; }
bool ListDelet(List list[],int i) { int j,k; if(i<1||i>ListLength(list)+1) return false; else { k=MaxSize-1; for(j=1;j<i;j++) { k=list[k].next; }//找到i的前一个元素 j=list[k].next;//让j保存第一个元素的下标 list[k].next=list[j].next; return true; } }
标签:
原文地址:http://www.cnblogs.com/Aaquila/p/5544252.html