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函数释放空间,需要一个临时变量
数据结构与算法分析——第三章 表、栈和队列1
最新推荐文章于 2022-10-08 16:39:20 发布