大话数据结构 第三章 线性表(二) 静态链表、循环链表和双向链表
其他
2020-02-15 19:25:46
阅读次数: 0
大话数据结构 第三章 线性表(二) 静态链表、循环链表和双向链表
静态链表(未使用指针)
定义
- 静态链表:用数组描述的链表
- 由两个数据域组成:data和cur。data用来存放数据元素,cur用来存放该元素的后继在数组中的下标,即游标。
- 备用链表:未被使用的数组元素
- 数组第一个和最后一个元素作为特殊元素处理,不存数据
- 第一个元素(下标为0的元素):cur存放备用链表的第一个结点的下标
- 最后一个元素:cur存放第一个有数值的元素的下标
插入操作
- 需要自己实现结点的申请和释放函数
- 主要思想是把要插入元素的游标调整至对应位置,而与数据的实际相对地址(下标)无关
删除操作
- 将删除的位置成为第一个优先空位,把它存入第一个元素的cur中
优缺点
优点
- 在插入和删除操作时,只需要修改游标,不需要移动元素。
缺点
- 没有解决连续存储分配带来的表长难以确定的问题
- 失去了顺序存储结构随机存取的特性
循环链表
定义
- 循环链表:将单链表中终端结点的指针端由空指针改为指向头结点,就使整个单链表形成一个环,这种头尾相接的单链表被称为循环链表
循环链表的合并
- 存在两个循环链表,尾指针分别为rear A、rear B
- 需要丢弃rear B 的头结点,具体操作为
- (rearA->next) 指向 (rearB->next->next)
- (rearB->next) 指向 (rearA->next)
双向链表
定义
- 双向链表是在单链表的每个结点中,再设置一个指向其前驱结点的指针域。结点有两个指针域,一个指向直接后继next,一个指向直接前驱prior。
插入操作
- 假设元素e的结点为s,要插入到结点p和结点p->中:
- 把p赋值给s的前驱: s->prior = p;
- 把p->next复制给s的后继:s->next = p->next;
- 把s赋值给p->next的前驱:p->next ->prior = s;
- 把s赋值给p的后继:p->next = s;
删除操作
- 假设在p->next和p->prior之间删除结点p:
- 把p->next赋值给p->prior的后继:p->prior->next = p->next;
- 把p->prior赋值给p->next的前驱:p->next->prior = p->prior;
发布了59 篇原创文章 ·
获赞 3 ·
访问量 1806
转载自blog.csdn.net/Felix_hyfy/article/details/98884453