这个也算是较为简单的一种数据结构思想了,是古人们没有指针时候用的,虽然很古老,但是很实用,不如哈夫曼树的时候用这个就明显比指针好用的多,不废话,直接上代码。
里面有很多注释的内容是我用来测试代码的,不用管,但也可以将其放出来更好的理解代码。
#include
using namespace std;
#define MAXSIZE 1000
#define OK 1
#define Status int
#define Elemtype char
#define ERROR -1
static int length=0;
typedef struct
{
Elemtype data;//数据
int cur;//游标
}Compenent,StaticLinkList[MAXSIZE];//结构体类型数组
Status InList(StaticLinkList L)
{
for(int i=1;i<MAXSIZE-1;i++)
{
L[i].cur=i+1;
}
L[0].cur=0;
L[MAXSIZE-1].cur=0;
return OK;
}//静态链表的初始化=-=
Status StudyList(StaticLinkList L)
{
int j=1;
int i=1;
while(i)
{
length+=1;
cin>>L[j].data;
j++;
cout<<“如果你想要停止输入,请输入0,想继续输入数据请输入1。”<<endl;
int k;
cin>>k;
i=k;
}
L[j-1].cur=0;
L[0].cur=j;//第零个用来存储第一个没存数据的下标
L[MAXSIZE-1].cur=1; //最后一个用来存储第一个存取数据的下标
return OK;
}
int Malloc_SLL(StaticLinkList L)
{
int i=L[0].cur;
if(L[0].cur)
{
L[0].cur=L[i].cur;
}
return i;
}//返回第一个未赋值的下标
Status ListInsert(StaticLinkList L,Elemtype e,int m)//将该数据插到第m个位置
{
int j,k,l;
k=MAXSIZE-1;
if(m<1||m>length+1)
return ERROR;//判断m是否符合输入规定
if(m==length+1)
{
L[length].cur=L[0].cur;
j=Malloc_SLL(L);
L[j].cur=0;
}//判断是否在末尾加一个。最后一个值的游标必须为0
j=Malloc_SLL(L);
if(j)
{
L[j].data=e;
// cout<<"="<<endl;
// cout<<L[j].data<<endl;
// cout<<j<<endl;
// cout<<""<<endl;
for(l=1;l<m;l++)
{
k=L[k].cur;
}
L[j].cur=L[k].cur;
L[k].cur=j;
length++;
if(m==L[MAXSIZE-1].cur)
{
L[MAXSIZE-1].cur=j;
}
return OK;
}
return ERROR;
}
Status Free_SLL(StaticLinkList L,int j)
{
L[j].cur=L[0].cur;
L[0].cur=j;
}
Status ListDelete(StaticLinkList L,int i)//删除第i个元素
{
int j,k;
if(i<1||i>length)
{
return ERROR;
}
k=MAXSIZE-1;
// cout<<i<<endl;
// cout<<length<<endl;
int m=1;
if(i==length)
{
for(m=1;m<=i-1;m++)
{
k=L[k].cur;
}
j=L[k].cur;
L[k].cur=0;
Free_SLL(L,j);
length--;
return OK;
}
if(i==L[MAXSIZE-1].cur)
{
L[MAXSIZE-1].cur=L[i].cur;
Free_SLL(L,i);
length--;
return OK;
}
for(j=1;j<i;j++)
{
k=L[k].cur;
}
j=L[k].cur;
L[k].cur=L[j].cur;
Free_SLL(L,j);
length--;
return OK;
}
Status out(StaticLinkList L)
{
int k;
k=L[MAXSIZE-1].cur;
while(k)
{
cout<<L[k].data;
k=L[k].cur;
}
cout<<endl;
return OK;
}
int main()
{
StaticLinkList L;
InList(L);
cout<<"----------初始化------------"<<endl;
StudyList(L);
out(L);
cout<<"-----------赋值---------------"<<endl;
char test='f';
ListInsert(L,test,1);
out(L);
cout<<"-----------插入---------------"<<endl;
ListDelete(L,1);
out(L);
cout<<"-----------删除---------------"<<endl;
return 0;
}