这个东西感觉比链表要难实现多了…
大概实现了下
大概思路就是在一个数组里将空间分配为数值空间和备用空间,从备用空间中malloc空间来放数值
http://data.biancheng.net/view/163.html
这里的讲解更详细
/*静态链表是针对于没有指针的语言来描述单链表的*/
/*采用 数值空间 和 备用空间 来实现*/
#include<stdio.h>
#include<windows.h>
#include<conio.h>
#define MaxSize 22 //最大空间[记得两个空间放备用空间和数值空间的头]
typedef int Type;
struct _StaticList //单个静态链表空间的结构体
{
Type data;
int next;
} list[MaxSize];
int tail = 1;//指向最后一个节点的下标
//list[0]为备用链表表头,备用链表的最后一个空间的next为 -1,list[1]为数据链表表头,数据空间的最后一个空间的next为 0
int ListInit()//list初始化
{
for(int i = 2; i<MaxSize-1; i++)
{
list[i].next = i+1;/*每个空间都指向下一个空间*/
}
list[MaxSize-1].next = -1;/*列表制空:最后一个空间的下一个指向 -1*/
list[0].next = 2;//指向第一个备用空间的下标
list[1].next = 0;//指向 指向第一个数据空间的下标
}
int ListMalloc()//申请空间
{
int key = list[0].next;/*获取空闲的空间下标*/
if(list[0].next != -1)
{
list[0].next = list[key].next;/*如果还有空闲的就让list[0]指向那个下一个空闲的下标*/
}
return key;/*返回空闲空间的下标*/
}
int ListAdd(Type data)/*顺序插入*/
{
int key = ListMalloc();/*申请一个空间*/
if(key == -1)//只要下标不是-1就代表有空间
{
return 0;
}
list[key].data = data;
list[key