#include<iostream>
using namespace std;
const int max=10;
typedef struct SListNode
{
int data;
int count;
}StaticList[max];
using namespace std;
const int max=10;
typedef struct SListNode
{
int data;
int count;
}StaticList[max];
//初始化链表函数
void InitSList(StaticList & space )
{
for(int i=0;i<max-1;i++)
space[i].count=i+1;
space[max-1].count= 0;//构成循环
}
void InitSList(StaticList & space )
{
for(int i=0;i<max-1;i++)
space[i].count=i+1;
space[max-1].count= 0;//构成循环
}
//回收节点到空闲链表
void Free_SLNode(StaticList & space,int t)
{
space[t].count= space[0].count;
space[0].count= t;
} //插入
//分配节点(只需要返回被分配节点在数组中的下标即可)
int Malloc_SL(StaticList & space )
{
int i = space[0].count;
if(i)
{
space[0].count= space[i].count;//把i节点从空闲链表中删除
}
return i;
}
bool insert(StaticList & space,int h,int m,int t)//在第t个元素之前插入一个下标值为m的新节点
{
if(t<=0)
{
return false;
}
int i = h;
int n = 0;//计数器
while(i)
{
if(n == t-1 && space[i].count)//找到插入节点
{
space[m].count= space[i].count;
space[i].count= m;
return true;
}
i = space[i].count;
n++;
}
return false;
}
//删除第n个节点
bool dele(StaticList & space,int h, int n)
{
if(n<0) return false;
int i=h;
int m =0;
while(i)
{
if(m == n-1)
{ int t = space[i].count;
space[i].count = space[t].count;
Free_SLNode(space,t);//回收被删除的节点
return true;
}
i = space[i].count;
m++;
}
return false;
}
//在表尾增加一个新节点
bool add(StaticList & space,int h,int m)//m代表新增加节点的下标值,h表示数据链表的头结点
{
int i = h;
while(space[i].count)
{
i = space[i].count;
}
space[i].count=m;
space[m].count=0;
return true;
}
int main()
{
//定义一个静态链表
StaticList MyList;
InitSList(MyList);
//分配一个新节点做为数据节点 空闲节点的默认头节点为0
int h = Malloc_SL(MyList);
MyList[h].count = 0;
//添加新节点
int t = Malloc_SL(MyList);
MyList[t].data = 1;
add(MyList,h,t);
t = Malloc_SL(MyList);
MyList[t].data = 2;
add(MyList,h,t);
t = Malloc_SL(MyList);
MyList[t].data = 3;
add(MyList,h,t);
//遍历并输出该链表上的所有数据
cout<<"遍历并输出该链表上的所有数据:"<<endl;
int i = MyList[h].count;
while (i)
{
cout<<MyList[i].data<<" ";
i = MyList[i].count;
}
cout<<endl;
//在第2个元素之前插入一个新节点
cout<<"在第2个元素之前插入一个值为5的新节点:"<<endl;
t = Malloc_SL(MyList);
MyList[t].data = 5;
insert(MyList,h,t,2);
i = MyList[h].count;
while (i)
{
cout<<MyList[i].data<<" ";
i = MyList[i].count;
}
cout<<endl;
cout<<"删除第2节点:"<<endl;
dele(MyList,h,2);
i = MyList[h].count;
while (i)
{
cout<<MyList[i].data<<" ";
i = MyList[i].count;
}
cout<<endl;
}
dele(MyList,h,2);
i = MyList[h].count;
while (i)
{
cout<<MyList[i].data<<" ";
i = MyList[i].count;
}
cout<<endl;
}