自考数据结构重点总结最终修订 .docx
《自考数据结构重点总结最终修订 .docx》由会员分享,可在线阅读,更多相关《自考数据结构重点总结最终修订 .docx(40页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精品名师归纳总结资料收集于网络如有侵权请联系网站删除感谢资料word 精心总结归纳 - - - - - - - - - - - -可编辑资料 - - - 欢迎下载精品名师归纳总结自考 02331 数据结构重点总结 最终修订 第一章概论1. 瑞士运算机科学家沃思提出:算法+数据结构 =程序。算法是对数据运算的描述,而数据结构包括规律结构和储备结构。由此可见,程序设计的实质是针对实际问题挑选一种好的数据结构和设计一个好的算法,而好的算法在很大程度上取决于描述实际问题的数据结构。2. 数据 是信息的载体。数据元素 是数据的基本单位。一个数据元素可以由如干个数据项 组成, 数据项 是具有独立含义的最小
2、标识单位。数据对象 是具有相同性质的数据元素的集合。3. 数据结构 指的是数据元素之间的相互关系,即数据的组织形式。数据结构一般包括以下三方面内容:数据的规律结构、数据的储备结构、数据的运算数据的规律结构是从规律关系上描述数据,与数据元素的储备结构无关,是独立于运算机的。数据的规律结构分类:线性结构和非线性结构。线性表 是一个典型的线性结构。栈、队列、串等都是线性结构。数组、广义表、树和图等数据结构都是非线性结构。数据元素及其关系在运算机内的储备方式,称为数据的储备结构(物理结构)。数据的储备结构是规律结构用运算机语言的实现,它依靠于运算机语言。 数据的运算 。最常用的检索、插入、删除、更新、
3、排序等。4. 数据的四种基本储备方法:次序储备、链接储备、索引储备、散列储备( 1)次序储备:通常借助程序设计语言的数组 描述。( 2)链接储备:通常借助于程序语言的指针来描述。( 3)索引储备:索引表由如干索引项组成。关键字是能唯独标识一个元素的一个或多个数据项的组合。( 4)散列储备:该方法的基本思想是:依据元素的关键字直接运算出该元素的储备的址。5. 算法必需满意5 个准就: 输入 , 0 个或多个数据作为输入。输出 ,产生一个或多个输出。有穷性 ,算法执行有限步后终止。 确定性 ,每一条指令的含义都明确。可行性 ,算法是可行的。算法与程序的区分:程序必需依靠于运算机程序语言,而一个算法
4、可用自然语言、运算机程序语言、数学语言或商定的符号语言来描述。目前常用的描述算法语言有两类:类Pascal 和 类 C 。6. 评判算法的优劣:算法的 正确性 是第一要考虑的。此外,主要考虑如下三点: 执行算法所耗费的时间,即时间复杂性。 执行算法所耗费的储备空间,主要是帮助空间,即空间复杂性。 算法应易于懂得、易于编程,易于调试等,即可读性和可操作性。以上几点最主要的是时间复杂性,时间复杂度常用渐进时间复杂度表示。7. 算法求解问题的输入量 称为问题的规模, 用一个正整数n 表示。23kn8. 常见的时间复杂度按数量级递增排列依次为:常数阶 01 、对数阶 0log 2n 、线性阶 0n 、
5、线性对数阶0nlog 2n 、可编辑资料 - - - 欢迎下载精品名师归纳总结平方阶 0n 立方阶 0n 、 k 次方阶 0n 、指数阶02 和阶乘阶0n.。可编辑资料 - - - 欢迎下载精品名师归纳总结9. 一个算法的空间复杂度Sn 定义为该算法所耗费的储备空间,它是问题规模n 的函数 , 它包括储备算法本身所占的储备空间、算法的输入输出数据所占的储备空间和算法在运行过程中暂时占用的储备空间。其次章线性表1. 数据的运算是定义在规律结构上的,而运算的详细实现是在储备结构上进行的。2. 只要确定了线性表储备的起始位置,线性表中任意一个元素都可随机存取,所以次序表是一种随机存取结构。3. 常见
6、的线性表的基本运算:(1) 置空表 InitList( L) 构造一个空的线性表L。(2) 求表长 ListLength( L)求线性表L 中的结点个数,即求表长。(3) GetNode ( L, i ) 取线性表L 中的第 i 个元素。(4) LocateNode( L,x)在 L 中查找第一个值为x 的元素,并返回该元素在L 中的位置。如L 中没有元素的值为x ,就返回 0 值。(5) InsertList( L,i , x )在线性表L 的第 i 个元素之前插入一个值为x 的新元素,表L 的长度加1。 6DeleteList( L,i )删除线性表L 的第 i 个元素,删除后表L 的长度
7、减1。4. 次序储备方法:把线性表的数据元素按规律次序依次存放在一组的址连续的储备单元里的方法。次序表( SequentialList ):用次序储备方法储备的线性表称为次序表。次序表 是一种 随机存取结构 , 次序表的特点是规律上相邻的结点其物理位置亦相邻。次序表中结点ai的储备的址 : LOC ( ai ) = LOC(a1 )+( i-1 ) *c1i n,可编辑资料 - - - 欢迎下载精品名师归纳总结精品文档学习资料 名师精选 - - - - - - - - - -第 1 页,共 20 页 - - - - - - - - - -可编辑资料 - - - 欢迎下载精品名师归纳总结资料收集
8、于网络如有侵权请联系网站删除感谢资料word 精心总结归纳 - - - - - - - - - - - -可编辑资料 - - - 欢迎下载精品名师归纳总结5. 次序表上实现的基本运算:( 1)插入: 该算法的平均时间复杂度是On ,即在次序表上进行插入运算,平均要移动一半结点(n/2 )。在第 i 个位置插入一个结点的移动次数为n-i+1( 2)删除 :次序表上做删除运算,平均要移动表中约一半的结点(n-1 ) /2 ,平均时间复杂度也是On 。删除第 i 个结点移动次数为n-i6. 采纳链式储备结构可以防止频繁移动大量元素。一个单链表可由头指针唯独确定,因此单链表可以用头指针的名字来命名。生
9、成结点变量的标准函数p=ListNode*mallocsizeofListNode。/函数 malloc安排一个类型为ListNode的结点变量的空间, 并将其首的址放入指针变量p 中释放结点变量空间的标准函数freep。 / 释放 p 所指的结点变量空间结点重量的拜访方法二: p- data 和 p- next指针变量p 和结点变量 *p 的关系 :指针变量p 的值结点的址,结点变量 *p 的值结点内容7. 建立单链表 :( 1) 头插法建表: 算法: p=ListNode *mallocsizeofListNode; p-data=ch; /将读入的数据放入新结点的数据域中 / 生成新结点
10、p-next=head;head=p;( 2) 尾插法建表: 算法:p=ListNode *mallocsizeofListNode; / 生成新结点p-data=ch; /将读入的数据放入新结点的数据域中if head=NULLhead=p;/新结点插入空表 else rear-next=p;/ 将新结点插到*r 之后 rear=p; / 尾指针指向新表尾( 3) 尾插法建带头结点的单链表:头结点及作用:头结点是在链表的开头结点之前附加一个结点。它具有两个优点:由于开头结点的位置被存放在头结点的指针域中, 所以在链表的第一个位置上的操作就和在表的其它位置上操作一样 , 无须进行特殊处理;无论
11、链表是否为空,其头指针都是指向头结点的非空指针(空表中头结点的指针域空),因此空表和非空表的处理也就统一了。头结点数据域的阴影表示该部分不储备信息。在有的应用中可用于存放表长等附加信息。详细算法: r=head;/尾指针初值也指向头结点whilech=getchar.=ns=ListNode *mallocsizeofListNode;/生成新结点 s-data=ch;/将读入的数据放入新结点的数据域中 r-next=s;r=s;可编辑资料 - - - 欢迎下载精品名师归纳总结精品文档学习资料 名师精选 - - - - - - - - - -第 2 页,共 20 页 - - - - - - -
12、 - - -可编辑资料 - - - 欢迎下载精品名师归纳总结资料收集于网络如有侵权请联系网站删除感谢资料word 精心总结归纳 - - - - - - - - - - - -可编辑资料 - - - 欢迎下载精品名师归纳总结r-next=NULL;/终端结点的指针域置空,或空表的头结点指针域置空以上三个算法的时间复杂度均为On 。8. 单链表上的查找: (带头结点)( 1)按结点序号查找:序号为0 的是头结点。算法: p=head;j=0;/从头结点开头扫描whilep-next&jnext为 NULL 或 i=j为止p=p-next; j+;ifi=j return p;/找到了第i 个结点e
13、lse return NULL;/当 i0 时,找不到第i 个结点时间复杂度:在等概率假设下,平均时间复杂度为:为n/2=On( 2)按结点值查找:详细算法: ListNode *p=head-next;/从开头结点比较。表非空,p 初始值指向开头结点whilep&p-data.=key/直到 p 为 NULL或 p-data为 key 为止p=p-next;/扫描下一结点return p;/如 p=NULL,就查找失败,否就p 指向值为 key 的结点时间复杂度为:On9. 插入运算:插入运算是将值为x 的新结点插入到表的第i 个结点的位置上,即插入到ai-1 与 ai 之间。s=ListN
14、ode *mallocsizeofListNode;s-data=x; s-next=p-next; p-next=s;算法的时间主要耗费在查找结点上,故时间复杂度亦为On 。10. 删除运算r=p-next; / 使 r 指向被删除的结点ai p-next=r-next ;/将 ai 从链上摘下freer; / 释放结点ai 的空间给储备池算法的时间复杂度也是O( n).p 指向被删除的前一个结点。链表上实现的插入和删除运算,无须移动结点,仅需修改指针。11. 单循环链表 在单链表中,将终端结点的指针域NULL 改为指向表头结点或开头结点即可。判定空链表的条件是 head=head-next
15、;12. 仅设尾指针的单循环链表:用尾指针rear表示的单循环链表对开头结点a1 和终端结点an 查找时间都是O1 。而表的操作常常是在表的首尾位置上进行,因此,有用中多采纳尾指针表示单循环链表。判定空链表的条件为rear=rear-next;13. 循环链表: 循环链表的特点是无须增加储备量,仅对表的链接方式稍作转变,即可使得表处理更加便利敏捷。如在尾指针表示的单循环链表上实现,就只需修改指针,无须遍历,其执行时间是O1 。可编辑资料 - - - 欢迎下载精品名师归纳总结精品文档学习资料 名师精选 - - - - - - - - - -第 3 页,共 20 页 - - - - - - - -
16、 - -可编辑资料 - - - 欢迎下载精品名师归纳总结资料收集于网络如有侵权请联系网站删除感谢资料word 精心总结归纳 - - - - - - - - - - - -可编辑资料 - - - 欢迎下载精品名师归纳总结详细算法:LinkList ConnectLinkList A,LinkList B/假设 A, B为非空循环链表的尾指针 LinkList p=A-next;/储存 A 表的头结点位置A-next=B-next-next;/ B 表的开头结点链接到A 表尾 freeB-next;/释放 B 表的头结点B-next=p;/return B;/返回新循环链表的尾指针循环链表中没有N
17、ULL指针。涉及遍历操作时,其终止条件就不再是像非循环链表那样判别p 或 p- next 是否为空,而是判别它们是否等于某一指定指针,如头指针或尾指针等。在单链表中,从一已知结点动身,只能拜访到该结点及其后续结点,无法找到该结点之前的其它结点。而在单循环链表中,从任一结点动身都可拜访到表中全部结点,这一优点使某些运算在单循环链表上易于实现。14. 双向链表 :双(向)链表中有两条方向不同的链,即每个结点中除next域存放后继结点的址外,仍增加一个指向其直接前趋的指针域prior。双链表由头指针head 惟一确定的。带头结点的双链表的某些运算变得便利。将头结点和尾结点链接起来,为双(向)循环链表
18、。15. 双向链表的前插和删除本结点操作双链表的前插操作void DInsertBeforeDListNode *p,DataType x/在带头结点的双链表中,将值为x 的新结点插入*p之前,设pNULLDListNode *s=mallocsizeofDListNode;/s-data=x;/s-prior=p-prior;/s-next=p;/p-prior-next=s;/p-prior=s;/ 双链表上删除结点*p 自身的操作可编辑资料 - - - 欢迎下载精品名师归纳总结精品文档学习资料 名师精选 - - - - - - - - - -第 4 页,共 20 页 - - - - -
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 自考数据结构重点总结最终修订 自考 数据结构 重点 总结 最终 修订
限制150内