您的位置:首页 > 其它

静态链表。实现。

2011-10-13 13:15 239 查看
 对于某些高级程序设计语言,并没有指针,又想使用链表结构。用可以数组实现。称为,静态链表。
 
/*
node	data	cur
0				1----------s[0].cur指向可用的节点。
1		x		2----------链表头指针
2		x		3
3		x		4
4		x		5
5		x		6
6		x		7
7		x		8
8		x		9
9		x		0----------链表末尾
*/
#include <iostream>

using namespace std;

const int MAXSIZE=20;
typedef int DataType;
typedef struct
{
DataType data;
int cur;
}node,SLinkList[MAXSIZE];

void init_node(SLinkList S);
int find_previous_x(SLinkList S,int head,DataType x);
void insert_node(SLinkList S,int &head,DataType x,DataType y);//在x之前插入。
void delete_node(SLinkList S,int &head,DataType x);//删除为x的节点。
int malloc_node(SLinkList S);
void free_node(SLinkList S,int i);//实现释放i的内存。。

int main()
{
SLinkList S;
init_node(S);
int head=malloc_node(S);
int temp=head;
S[head].data=1;
for (int i=1;i<5;++i)
{
S[head].cur=malloc_node(S);
head=S[head].cur;
S[head].data=i+1;
}
S[head].cur=0;
head=temp;

//delete_node(S,head,4);
//delete_node(S,head,5);
delete_node(S,head,1);

//insert_node(S,head,4,8);

while(head)
{
cout<<S[head].data<<endl;
head=S[head].cur;
}

system("pause");
return 0;
}

void init_node(SLinkList S)
{
for (int i=0;i<MAXSIZE-1;++i)
{
S[i].cur=i+1;
}
S[MAXSIZE-1].cur=0;//尾节点指向0。
}

int find_previous_x(SLinkList S,int head,DataType x)
{
for (int i=head;i!=0;)
{
if (x==S[S[i].cur].data)//从head.cur开始寻找。
{
return i;
}
i=S[i].cur;//
}
}

void insert_node(SLinkList S,int &head,DataType x,DataType y)
{
int i=malloc_node(S);
S[i].data=y;
if (x==S[head].data)
{
S[i].cur=head;
head=i;
}
else
{
int index=find_previous_x(S,head,x);
S[i].cur=S[index].cur;
S[index].cur=i;
}

}

void delete_node(SLinkList S,int &head,DataType x)
{
int temp;
if (x==S[head].data)
{
temp=head;
head=S[head].cur;
}
else
{
int index=find_previous_x(S,head,x);
temp=S[index].cur;
S[index].cur=S[temp].cur;
}
free_node(S,temp);
}

int malloc_node(SLinkList S)
{
//只单纯实现malloc函数的功能。
int i=S[0].cur;
S[0].cur=S[i].cur;

return i;
}

void free_node(SLinkList S,int i)
{
//只用实现free的原来功能就行,只是删除节点,不管剩下的链表是否还连续。
S[i].cur=S[0].cur;
S[0].cur=i;
}
虽然就短短的100多行,确花了将近4个小时的时间,而且还不够完善,没有足够的测试,还有一些功能没有实现。待续吧。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息