数据结构与算法分析——第三章 表、栈和队列1

3.1 抽象数据类型
抽象数据类型(ADT):一些操作的集合
理解:数学的抽象;模块化设计;没有实际的数据,只是一种结构,一种对于数据储存的思想。
3.2 表ADT
定义:空表、后继、前驱
操作:PrintList、MakeEmpty、Find、FindKth、Insert、Delete(Find是返回关键字首次出现的位置,FindKth是返回某个位置上的元素)
3.2.1 表的简单数组实现
数组是动态指定的,但是还是需要对表的大小的最大值进行估计。通常要估计得大一些,从而会浪费大量的空间。
PrintList:线性时间
Find:线性时间
FindKth:常数时间
插入/删除:线性时间
3.2.2 链表
链表由一系列不必在内存中相连的结构组成。每一个结构均含有表元素和指向包含该元素后继元的结构的指针(Next指针)。最后一个单元的Next指针指向NULL。
P -> FieldName
PrintList:线性时间
Find:线性时间
FindKth(L,i):花费O(i)时间以显性方式穿越链表而完成。
删除:修改一个指针
插入:一次malloc调用,两次指针调整
3.2.3 程序设计细节
可能出现的问题:1)并不存在从所给定义出发在表的前面插入元素的真正显性的方法。2)从表的前面实行删除改变了表的起始端,编程中的疏忽会造成表的丢失。3)删除算法要求我们记住被删除元素前面的表元。
解决:留出一个标志结点(表头)。
3.2.4 常见的错误
1)memory access violation或segmentation violation
有指针变量包含了伪地址。
原因:(1)初始化变量失败(2)指针是NULL,指向是非法的。
2)声明指向一个结构的指针并不创建该结构,而只是给出足够的空间容纳结构可能会使用的地址。创建尚未声明过的记录的唯一方法是使用malloc库函数。
如果想使用一个指针变量沿着一个表行进,则没必要使用malloc。
删除时free函数释放空间,需要一个临时变量

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值