静态链表 C语言描述
静态链表
1.下标为0的游标存放最后存放数据节点的游标,即是第一个没有存放元素(备用链表)的下标
2.最后一个的节点存放第一个由数值得下标
3.第一个和最后一个都不存放数据 即是备用链表的第一个的下标
4.最后一个存储数据的节点的游标为0
静态链表主要是根据游标来遍历,以前没有指针用的思想
假如我要删除一个元素
图不多描述,自己画画就明白,然后代码部分。都有注释,
1 #include <stdio.h> 2 #define ElemType int 3 #define Status int 4 #define MAXSIZE 1000 5 typedef struct{ 6 ElemType data;//数据 7 int cur; //游标 8 }Component,StaticLinkList[MAXSIZE]; 9 10 11 //初始化静态链表 12 Status InitList (StaticLinkList space) //初始化静态链表等于初始化数组 13 { 14 int i; 15 for (i=0;i<MAXSIZE-1;i++) 16 space [i].cur=i+1; //给所有节点的游标赋值 17 18 space[MAXSIZE-1].cur =0; //最后节点的游标为第一个元素 19 return 0; 20 } 21 22 23 //获取备用链表的第一个元素下标 (插入操作) 24 int Malloc_SLL(StaticLinkList space) 25 { 26 int i=space[0].cur; //用i存储静态链 表第一个节点的游标 27 if(space[0].cur) //如果首个的游标不为零,则最后一个节点的游标赋值给首节点 28 space[0].cur=space[i].cur; //把下一个作为备用链表的第一个元素 29 30 return i; //要插入的下标 31 } 32 33 34 35 36 //获得链表的长度 37 int ListLength(StaticLinkList L) 38 { 39 int j=0; //用来计算 40 int i=L[MAXSIZE-1].cur; //最后一个元素的游标,即首个存数据的节点的下标 41 42 while (i) //下标不为0执行循环 43 { 44 i =L[i].cur; //遍历知道最后一个存数据的节点的下标为0 45 j++; 46 } 47 return j; 48 } 49 50 51 52 53 54 55 //在静态链表L中第i个元素之前插入新的数据元素e 56 Status ListInsert(StaticLinkList L,int i,ElemType e) 57 { 58 int j,k,l; 59 60 k=MAXSIZE -1; 61 if (i<1 || i>ListLength(L)+1) 62 return -1; 63 64 j=Malloc_SLL(L); //获取备用链表的第一个元素下标 65 if (j) //如果静态链表不为空 66 { 67 L[j].data=e; //把值插入备用链表的第一个元素 68 for (l=1;l<=i-1;l++) //获取它之前元素的游标 69 k=L[k].cur; 70 71 72 L[j].cur=L[k].cur; //把获取的游标赋值给新插入的游标 73 L[k].cur=j; //把新插入的节点的下标赋值给第i-1个节点的游标 74 return 0; 75 76 } 77 return -1; 78 } 79 80 81 82 83 84 //将下标为K的空闲节点回收到备用表中 85 void Free_SLL(StaticLinkList space,int k) 86 { 87 space[k].cur=space[0].cur; 88 space[0].cur=k; 89 } 90 91 92 93 94 95 //删除在L中的第i个元素数据 96 Status ListDelete(StaticLinkList L,int i) 97 { 98 int j,k; 99 if (i<1 ||i>ListLength(L)) //超出长度,退出程序 100 return -1; 101 102 k=MAXSIZE -1; //首个存数据的游标 103 for(j=1;j<=i-1;j++) //获取要删除元素的前一个游标 104 k=L[k].cur; 105 106 j=L[k].cur; 107 L[k].cur=L[j].cur; 108 109 Free_SLL(L,j); 110 return 0; 111 } 112
插入原理:主要找到要插入的位置的前一个节点游标,将其游标改为插入元素的下标,插入元素的游标记录下一个的下标。
虽然静态链表被指针取代了,但是这思想要懂,以后开发的时候可以用到。
博客园的文章都是大学时写的,质量不太好。
我的新文章都会发布再新的 blog :https://blog.biyongyao.com
请大家关注哟!!