赞
踩
typedef struct SNode
{
int data;//数据
int next;//后继指针(下标)
}SNode,SLinkList[MAXSIZE];
0:有效数据链的头节点;
1:空闲数据链的头节点;
- //初始化
- return p;
- }
- }
-
- return -1;
- }
-
- int GetPrio(SNode* ps, int key)
- {
- for (int p = 0; ps[p].next != 0; p = ps[p].next)
- {
- //if (ps[ps[p].next].data == key)//ok
- int q = ps[p].next;//q为p的后继
- if(ps[q].data==key)
- {
- return p;
- }
- }
- return -1;
- }
-
-
- //删除第一个val的值
- bool DelVal(SNode* ps, int val)
- {
- //获取val的前驱
- int p = GetPrio(ps, val);
- if (p < 0)
- return false;
-
- //将节点从有效数据链表中剔除
- int q = ps[p].next;
- ps[p].next = ps[q].next;
-
- //将节点添加到空闲链表中
- ps[q].next = ps[1].next;
- ps[1].next = q;
-
- return true;
- }
-
-
-
- //输出
- void Show(SNode* ps)
- {
- assert(ps != NULL);
- if (ps == NULL)
- return;
- for (int p = ps[0].next; p != 0; p = ps[p].next)
- {
- printf("%d ", ps[p].data);
- }
- printf("\n");
- }
-
- //清空数据
- void Clear(SNode* ps)
- {
- assert(ps != NULL);
- if (ps == NULL)
- return;
- InitList(ps);
- }
-
- //销毁整个内存
- void Destroy(SNode* ps)
- {
- Clear(ps);
- }
1.静态链表,利用顺序表模拟链表
2.静态链表包含两条链表,一条为有效数据链表,另一条为空闲节点链表
3.有效数据链表为带头结点的循环链表,且头节点在0号下标
4.空闲数据链表为带头结点的循环链表,且头节点在1号下标
5.静态链表的优点:和顺序表对比,插入删除不需要移动数据,O(1)
6.静态链表的优点:和链表对比,不需要频繁的创建和删除节点
7.静态链表的缺点:和顺序表对比,需要增加一个next 8.静态链表可以动态增长,满后扩容,将扩容的内存添加到空闲链表;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。