邓俊辉《数据结构》-列表学习笔记

2021.12.9

向量&列表的关系

向量结构中各数据项的物理存放位置与逻辑次序完全对应,可通过秩直接访问对应的元素,即”循秩访问“。好像可以通过一个人的家庭住址找到那个人。

本章的列表跟向量虽然相似,都是构成一个线性的逻辑次序,但和向量不同,列表的物理地址可以是任意的。

静态储存

数据结构支持的操作,无非静态和动态两类。第二章基于向量的例如size()、get()就是静态操作,所需的是常数时间,而insert()、remove()等动态操作就需要线性时间。

这是为什么?是因为向量的物理地址是连续排列的,即”静态储存

静态储存:可以使静态操作效率提升,但是局部动态操作的时候,就需要大动干戈,引起大范围的移动调整。

动态储存

动态储存-要求各元素按照一定的次序排列,但对物理地址没有要求。那么动态储存如何确定各元素的地址? —> 通过指针或者引用,来确定地址。

链表 linked list 

一种典型的动态存储结构。

列表 list

列表节点-ADT接口

其中:pred()-当前节点前驱节点位置 succ()-当前节点后继节点位置

insertAsPred(e)-插入前驱节点,存入引用对象e,并返回新节点位置

insertAsSucc(e)-后继...

列表对象-ADT接口

size() 节点总数

first() last() -返回首尾节点位置

insertAsFirst(e)/insertAsLast(e)-e当作节点插入首末

insertBefore(p,e)/insertAfter(p,e)-将e当作节点p的直接前驱、直接后继插入

哨兵节点&首末节点

1.头节点header和尾节点trailer始终存在,对外不可见;

2.外部可见数据的首末节点:first/last node

//初始化
void List<T> ::init(){
  header=new ListNode<T>; //创建头哨兵节点
  trailer=new ListNode<T>; //创建末哨兵节点
//其中:
  header -> succ = trailer;
  header -> pred = NULL;
  trailer -> pred = header;
  trailer -> succ = NULL;
}

有序列表 sorted list

回忆《向量》内容

向量中,有 原方法->优化->再优化,当时我们引入了一个last ,想复习的时候请查看:邓俊辉《数据结构》-向量学习笔记_flashinggg的博客-CSDN博客 

向量无序 ->O(n²)  有序 -> O(n)

列表无序 ->O(n²) 有序->O(n)  得益于列表已经有了顺序。

选择排序 selectionsort

与起泡排序相似,但起泡排序效率太低了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

九九345

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值