数据结构-静态链表


备用链表:可认为没有存值的数组,组成的链表
数组第一个元素的,即下标为0的元素的cur,存放备用链表的第一个结点的下标
备用链表最后一个元素的cur,存放第一个有数值的元素的下标 
数组的最后一个元素分量的游标是0 
数组第一个元素和最后一个元素不存数据




//
静态链表 #include<stdio.h> #define MAXSIZE 1000 #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 typedef int Status; typedef int ElemType; typedef struct { ElemType data; int cur; }Component,StaticLinkList[MAXSIZE]; //将一维数组space中各分量链成一备用链表 Status InitList(StaticLinkList space) { int i; for(i=0;i<MAXSIZE-1;i++) space[i].cur = i+1; //初始化链表,cur指向下一个 space[MAXSIZE-1].cur=0; return OK; } int Malloc_SLL(StaticLinkList space) { int i=space[0].cur;//第一个元素cur的值 ,cur存储的是备用链表的第一个 if(space[0].cur){ space[0].cur = space[i].cur; } return i; } //在L中的第i个元素之前插入新的数据元素e Status ListInsert(StaticLinkList L,int i,ElemType e) { int j,k,l; k=MAXSIZE-1;//首先是最后一个元素的下标 if(i<1||i>ListLength(L)+1){ return ERROR; } j=Malloc_SSL(L); //获得空闲分量的下标 if(j){ L[j].data=e; for(int l=1;l<=i-1;l++){//找到第i个元素之前的位置 k=L[k].cur;//k会是i前一个元素的cur } L[j].cur=L[k].cur;//L[j].cur是下一个空闲的分量 L[k].cur=j; return OK; } return ERROR; } //删除在L中的第i个元素 e Status ListDelete(StatusLikList L,int i){ int j,k; if(i<1||i>ListLength(L)){ return ERROR; } k=MAXSIZE-1; for(j=1;j<=i-1;j++){ k=L[k].cur; } j=L[k].cur; L[k].cur=L[j].cur; Free_SSL(L,j); return OK; } //静态链表已经存在,操作结果返回L在中数据元素的个数 int ListLength(StaticLinkList L){ int j=0; int i=L[MAXSIZE-1].cur; while(i){ i=L[i].cur; j++; } return j; } //将下标为k的空闲结点回收到备用链表 void Free_SSL(StaticLinkList space,int k){ space[k].cur = space[0].cur; space[0].cur=k; } int main(){ StaticLinkList space; InitList (space); for(int i=0;i<MAXSIZE;i++){ printf("%d\n",space[i].cur); } return 0; }

 

posted @ 2021-01-18 17:14  wyqgzq  阅读(78)  评论(0)    收藏  举报