2021-5-19 数据结构 线性表补充
静态列表
为没有指针的高级语言设计的一种实现单链表能力的方法
包括:1.数据域data 2.游标(int型)cur
游标表示本身对象指向的下一个对象在数组中的下标,当下一个对象为空时,cur=0。
数组第一个元素的游标指向备用链表(无数据存入的数组空间)第一个元素。
数组最后一个元素的游标指向第一个存储了数据的下标。
游标指向 | 4 | 2 | 3 | 0 | 1 | ||||
数据 | 第一 | 甲 | 乙 | 丁 | 最后 | ||||
数组下标 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | ......... | 999 |
插入操作(重点观察游标的变化)
插入一个"丙"数据位于"乙""丁"之间
游标指向 | 5 | 2 | 4 | 0 | 3 | 1 | |||
数据 | 第一 | 甲 | 乙 | 丁 | 丙 | 最后 | |||
数组下标 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | ......... | 999 |
删除操作(重点观察游标的变化)
删除甲数据
游标指向 | 1 | 4 | 0 | 3 | 2 | ||||
数据 | 第一 | 乙 | 丁 | 丙 | 最后 | ||||
数组下标 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | ......... | 999 |
循环列表
单列表中终端节点的指针由NULL变为指向头结点
与单列表的主要差异:判断循环的条件不同,由p->next=NULL变为p->next=head
可以增加一个尾指针rear,使得读取尾端结点的复杂程度由0(n)变为0(1)
借助尾指针实现两个循环列表的相加
假设现有循环列表A和B,则实现A和B相加的代码为
p=rearA->next; \\使得p暂时保存着A的头指针
rearA->next=rearB->next-next; \\A的尾指针rearA指向B的头结点而不是A的头指针
\\具体情况具体对待
rearB->next=p; \\p的尾指针指向A的头指针
delete p; \\释放p
双向列表
在单列表的每个指针域中增加一个指向前一个数据地址的指针。