静态链表定义
#include <stdio.h>
#include <string.h>
#define maxSize 50
typedef struct
{
int index;
int data;
}StaticLink[maxSize];
初始化链表
void InitStaticLink(StaticLink L)
{
L[0].index=-1;
for (int i=1; i<maxSize; i++) {
L[i].index=-2;
}
L[0].index=5;
L[1].data=8;
L[1].index=7;
L[3].data=2;
L[3].index=-1;
L[5].data=3;
L[5].index=1;
L[7].data=4;
L[7].index=3;
}
打印链表
void PrintStaticLink(StaticLink L)
{
int index=0;
char path[20]="0";
char value_path[20]="0";
while(L[index].index!=-1)
{
index=L[index].index;
char dest[10],value_dest[10];
sprintf(dest,"%s%d","->",index);
sprintf(value_dest,"%s%d","->",L[index].data);
strcat(path,dest);
strcat(value_path,value_dest);
}
printf("index:%s\n",path);
printf("value:%s\n",value_path);
}
根据序号获取对应的值
int GetSLElem(StaticLink L,int i)
{
int j=0;
int index=0;
while(L[index].index!=-1&&j<i-1)
{
index=L[index].index;
j++;
}
return L[index].data;
}
在对应序号节点后增加节点
void InsertSLNextNode(StaticLink L,int i,int e)
{
if(L==NULL)return;
if(i<=0||i>maxSize)return;
int index=0;
for (int j=1; j<maxSize; j++) {
if(L[j].index==-2)
{
index=j;
break;
}
}
L[index].data=e;
L[index].index=L[i].index;
L[i].index=index;
}
在对应序号节点后删除节点
int DeleteSLNextNode(StaticLink L,int i)
{
if(L==NULL)return -2;
if(i<=0||i>maxSize)return -2;
int j=0;
int preindex=0;
while(L[preindex].index!=i)
{
preindex=L[preindex].index;
j++;
}
L[preindex].index=L[i].index;
int data=L[i].data;
L[i].index=-2;
return data;
}
测试
int main(int argc, const char * argv[]) {
StaticLink L;
InitStaticLink(L);
PrintStaticLink(L);
int target=GetSLElem(L,3);
printf("GetSLElem(L,3)=%d\n",target);
InsertSLNextNode(L,1,6);
printf("InsertSLNextNode(L,1,6)\n");
PrintStaticLink(L);
int deleted_data=DeleteSLNextNode(L,7);
printf("DeleteSLNextNode(L,7)=%d\n",deleted_data);
PrintStaticLink(L);
return 0;
}
输出结果
index:0->5->1->7->3
value:0->3->8->4->2
GetSLElem(L,3)=8
InsertSLNextNode(L,1,6)
index:0->5->1->2->7->3
value:0->3->8->6->4->2
DeleteSLNextNode(L,7)=4
index:0->5->1->2->3
value:0->3->8->6->2
Program ended with exit code: 0