#include<stdio.h>
#define MaxSize 10
typedef struct Node{
int data;
int cur;// 游标}SLList[MaxSize];// 初始化静态链表
int InitList(SLList L){for(int l =0; l < MaxSize -1; l++){L[l].cur = l +1;}L[MaxSize -1].cur =0;}// 插入元素
int InsertList(SLList L, int i, int e){if(FullList(L)){printf("静态链表为满!");return;}if(i<1|| i>LengthList(L)+1){printf("插入的位置有误!");return;}
int n =Malloc(L);// 获取空闲元素的下标
int temp = MaxSize -1;// 定义一个临时变量用于遍历for(int l =1; l < i; l++){// 从头开始遍历
temp =L[temp].cur;// 根据游标一个一个遍历}L[n].data = e;// 赋值L[n].cur =L[temp].cur;// 将n的上一个元素的游标给n的游标L[temp].cur = n;// 将n给它上一个元素的游标}// 删除元素
int DeleteList(SLList L, int i){if(EmptyList(L)){printf("静态链表为空!");return;}if(i <1|| i >LengthList(L)){printf("删除位置有误!");}
int temp = MaxSize -1;// 定义一个临时变量用于遍历for(int l =1; l < i; l++){// 从头开始遍历
temp =L[temp].cur;// 根据游标一个一个遍历}
int l =L[temp].cur;// 定义一个临时变量用于存temp的下一个元素L[temp].cur =L[l].cur;// 将temp的下下个元素的下标给temp的游标L[l].cur =L[0].cur;// 将下标0的游标给已删除的l的游标L[0].cur = l;// 重新构成空闲链表}// 寻找空闲下标
int Malloc(SLList L){
int index =L[0].cur;if(L[0].cur){L[0].cur =L[index].cur;}return index;}// 静态链表的长度
int LengthList(SLList L){
int temp =L[MaxSize -1].cur;// 获取静态链表的的首位置
int count =0;// 定义一个计数器while(temp){
temp =L[temp].cur;
count++;}return count;}// 判断是否为空
int EmptyList(SLList L){returnL[MaxSize -1].cur ==0;}// 判断是否为满
int FullList(SLList L){returnL[0].cur == MaxSize -2;}// 遍历输出
int TraverseList(SLList L){
int temp =L[MaxSize -1].cur;// 获取静态链表的的首位置while(temp){printf("%d ",L[temp].data);
temp =L[temp].cur;}putchar('\n');}
int main(){
SLList L;InitList(L);// 初始化
int select, i, e;while(1){printf("1、插入元素 2、删除元素 3、遍历输出 4、退出程序\n");printf("请输入你要进行的操作:");scanf("%d",&select);if(select ==1){printf("请输入你要插入的位置:");scanf("%d",&i);printf("请输入你要插入的元素:");scanf("%d",&e);InsertList(L, i, e);}elseif(select ==2){printf("请输入你要删除的位置:");scanf("%d",&i);DeleteList(L, i);}elseif(select ==3){TraverseList(L);}else{break;}}}
数据结构C语言版:线性表之静态链表个人的学习笔记,如有不合理之处欢迎指正,谢谢!自己写的代码(我本人觉得只有插入、删除有一丢丢复杂,所以只写了这两种操作的代码)#include<stdio.h>#define MaxSize 10typedef struct Node{ int data; int cur; // 游标}SLList[MaxSize]; // 初始化静态链表int InitList(SLList L) { for (int l = 0; l <