运用c++语言打出数据结构中的静态链表代码,仅供参考

这个也算是较为简单的一种数据结构思想了,是古人们没有指针时候用的,虽然很古老,但是很实用,不如哈夫曼树的时候用这个就明显比指针好用的多,不废话,直接上代码。
里面有很多注释的内容是我用来测试代码的,不用管,但也可以将其放出来更好的理解代码。

#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;

}

上一篇:数据结构-顺序栈(进栈 出栈)


下一篇:数据结构之顺序队列实现