静态链表。实现。
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个小时的时间,而且还不够完善,没有足够的测试,还有一些功能没有实现。待续吧。
相关文章推荐
- 数据结构(12)--二叉树的静态链表存储和遍历的实现
- 静态链表的原理及实现
- 紧凑的多重数组的静态双向链表实现
- 静态双向链表的多数组实现
- 静态链表 C实现
- 静态链表——用顺序存储实现链式存储功能
- 单链表的顺序实现例程[静态分配存储空间]
- 线性表综合实验之静态链表的实现
- 静态链表的实现 部分完善
- 静态链表及C语言实现
- 静态链表 C实现
- 数据结构之静态链表的游标表示及其实现(附完整代码)
- javascript实现数据结构与算法系列:线性表的静态单链表存储结构
- 静态链表单向实现
- 静态链表 c语言实现
- 数据结构c语言实现之静态单链表
- 十一、静态单链表的实现
- 相对静态的链表实现
- 《大话数据结构》读书笔记之线性表基本操作(静态单链表实现)
- 静态链表的实现