对于一般的动态链表来说,要动态分配,还要借助指针
对于静态链表来说,不用借助指针,建立两个数组,一个数组存储数据,一个数组存储各个元素之间的位置关系
从某方面来说,静态链表是顺序表和链表的结合体,即具有二者的有点,如,插入和删除时不需要移动元素,便于查找(某种情况下),但同时也具备了二者的缺点,首先就是失去了动态性,浪费空间,修改次数多了以后查找也不再方便
#include <stdio.h>
#include <stdlib.h>
#define MAX 100//最大容量
typedef struct com
{
int data;//数据域,用来存储数据
int cur;//指针域,因为指针域就是二者的位置关系,所以可以通过数字存储
int size;//记录当前的长度便于操作
}com,sta[MAX];//定义一个结构体数组变量
void InitList(sta l)//初始化,没有你想不到的,结构体变量数组也可作为函数参数
{
int i;
for(i=0;i<MAX-1;i++)
{
l[i].cur=i+1;//对数组的位置进行赋值,确定他们之间的位置关系
l[MAX-1].cur=0;//目前静态链表为空,最后一个的cur为0
}
}
void CreateList(sta l)//静态链表数据的输入
{
int i,j,x;
printf("请输入要创建的元素个数\n");
scanf("%d",&j);
l[MAX-1].cur=j;
for(i=0;i<j;i++)
{
scanf("%d",&x);
l[i].data=x;
}
}
void PrintList(sta l)//静态链表的打印输出
{
int i,j;
i=0;
j=0;
for(i=0;i<l[MAX-1].cur;i++)
{
printf("%d\n",l[j].data);
j=l[j].cur;
}
}
void InsertListTail(sta l)//在静态表的尾部插入数据
{
int i,j,x;
j=l[MAX-1].cur;
printf("请输入要插入的数据\n");
scanf("%d",&x);
l[j].data=x;
l[MAX-1].cur++;
}
void InsertList(sta l)//静态链表的插入,贼溜
{
int i,j,x,k;
k=l[MAX-1].cur;
// printf("%d\n",k);
printf("请输入要插入的位置和元素\n");
scanf("%d %d",&j,&x);
l[k].data=x;
l[j-1].cur=k;
l[k].cur=j;
l[MAX-1].cur++;
}
void DeleteList(sta l)//静态链表的删除
{
int i,j,x;
printf("请输入要删除的位置\n");
scanf("%d",&j);
l[j-1].cur=l[j].cur;
l[MAX-1].cur--;
}
int main()
{
sta a;
InitList(a);
CreateList(a);
InsertList(a);
InsertListTail(a);
DeleteList(a);
PrintList(a);
return 0;
}
简单来说就是通过下标访问链表,通过下标删除和插入链表