《数据结构》复习
- 格式:doc
- 大小:77.50 KB
- 文档页数:16
数据结构复习题及答案5篇第一篇:数据结构复习题及答案、数据结构复习题及答案中南大学现代远程教育课程考试(专科)复习题及参考答案数据结构一、判断题:1.数组是一种复杂的数据结构,数组元素之间的关系既不是线性的也不是树形的。
()2.链式存储在插人和删除时需要保持物理存储空间的顺序分配,不需要保持数据元素之间的逻辑顺序。
()3.在只有度为0和度为k的结点的k叉树中,设度为0的结点有n0个,度为k的结点有nk个,则有n0=nk+1。
()4.折半搜索只适用于有序表,包括有序的顺序表和有序的链表。
()5.如果两个串含有相同的字符,则这两个串相等。
()6.数组可以看成线性结构的一种推广,因此可以对它进行插入、删除等运算。
()7.在用循环单链表表示的链式队列中,可以不设队头指针,仅在链尾设置队尾指针。
()8.通常递归的算法简单、易懂、容易编写,而且执行的效率也高。
()9.一个广义表的表尾总是一个广义表。
()10.当从一个小根堆(最小堆)中删除一个元素时,需要把堆尾元素填补到堆顶位置,然后再按条件把它逐层向下调整,直到调整到合适位置为止。
()11.对于一棵具有n个结点,其高度为h的二叉树,进行任一种次序遍历的时间复杂度为O(h)。
()12.存储图的邻接矩阵中,邻接矩阵的大小不但与图的顶点个数有关,而且与图的边数也有关。
()13.直接选择排序是一种稳定的排序方法。
()14.闭散列法通常比开散列法时间效率更高。
()15.有n个结点的不同的二叉树有n!棵。
()16.直接选择排序是一种不稳定的排序方法。
()17.在2048个互不相同的关键码中选择最小的5个关键码,用堆排序比用锦标赛排序更快。
()18.当3阶B_树中有255个关键码时,其最大高度(包括失败结点层)不超过8。
()19.一棵3阶B_树是平衡的3路搜索树,反之,一棵平衡的3路搜索树是3阶非B_树。
()20.在用散列表存储关键码集合时,可以用双散列法寻找下一个空桶。
数据结构复习资料复习提纲知识要点归纳数据结构复习资料:复习提纲知识要点归纳一、数据结构概述1. 数据结构的定义和作用2. 常见的数据结构类型3. 数据结构与算法的关系二、线性结构1. 数组的概念及其特点2. 链表的概念及其分类3. 栈的定义和基本操作4. 队列的定义和基本操作三、树结构1. 树的基本概念及定义2. 二叉树的性质和遍历方式3. 平衡二叉树的概念及应用4. 堆的定义和基本操作四、图结构1. 图的基本概念及表示方法2. 图的遍历算法:深度优先搜索和广度优先搜索3. 最短路径算法及其应用4. 最小生成树算法及其应用五、查找与排序1. 查找算法的分类及其特点2. 顺序查找和二分查找算法3. 哈希查找算法及其应用4. 常见的排序算法:冒泡排序、插入排序、选择排序、归并排序、快速排序六、高级数据结构1. 图的高级算法:拓扑排序和关键路径2. 并查集的定义和操作3. 线段树的概念及其应用4. Trie树的概念及其应用七、应用案例1. 使用数据结构解决实际问题的案例介绍2. 如何选择适合的数据结构和算法八、复杂度分析1. 时间复杂度和空间复杂度的定义2. 如何进行复杂度分析3. 常见算法的复杂度比较九、常见问题及解决方法1. 数据结构相关的常见问题解答2. 如何优化算法的性能十、总结与展望1. 数据结构学习的重要性和难点2. 对未来数据结构的发展趋势的展望以上是数据结构复习资料的复习提纲知识要点归纳。
希望能够帮助你进行复习和回顾,加深对数据结构的理解和掌握。
在学习过程中,要注重理论与实践相结合,多进行编程练习和实际应用,提高数据结构的实际运用能力。
祝你复习顺利,取得好成绩!。
《数据结构》复习题一.选择题:1.数据结构是研究数据的( ) 以及它们之间的相互关系A.理想结构,物理结构B.理想结构,抽象结构C.物理结构,逻辑结构D.抽象结构,逻辑结构2. 组成数据的基本单位是()A.数据项B.数据类型C. 数据元素D. 数据变量3. 如果某数据结构的数据元素的集合为S={A,B,C,D,E,F,G},元素之间的关系为R={<A,D>,<A,G>,<D,B>,<D,C>,<G,E>,<G,F>},则该数据结构是一种()A.线性结构B. 树结构C. 图结构D. 链表结构4. 线性表的链接实现有利于( ) 运算A.插入B.读表元C.查找D.定位5. 设一数列的输入顺序为1,2,3,4,5,6通过栈操作不可能排成的输出序列为()A. 3,2,5,6,4,1B. 1,5,4,6,2,3C. 2,4,3,5,1,6D. 4,5,3,6,2,16. 设字符串S1=‘ABCDEFG’,S2=‘PQRST’则运算S=Concat(Sub(S1,2,Length(S2)),Sub(S1,Length(S2),2))后结果为()A.‘BCQR’B.‘BCDEF’C.‘BCDEFG’D.‘BCDEFEF’7. 设单链表中指针P指向结点A,若要删除A之后的结点(若存在),则修改指针的操作为()A. p→next= p→next→nextB. p= p→nextC. p= p→next→nextD. p→next = p8. 线性表采用链式存储时,其地址()A. 必须是连续的B.部分地址必须是连续的C. 一定是不连续的D.连续与否均可以9. 在内部排序时,排序不稳定的有()A.插入排序B. 冒泡排序C. 快速排序D.归并排序10. 设有1000个元素,用折半法查找时,最小比较次数为()A.0B. 1C.10D. 50011. 将一个元素进入队列的时间复杂度是()n)A. O (1)B. O (n)C. O (n2)D. O (log212. 在一个具有n个结点的单链表中查找其值等x的结点,在查找成功的情况下,需要比较()个元素结点A. n/2B. nC. (n+1)/2D. (n-1)/213. 从一个长度为n的顺序表中删除第i个元素(1≤i≤n),需向前移动()个元素A. n-iB. n-i+1C. n-i-1D. i14. 总共3层的完全二叉树,其结点数至少有()A.3B. 4C.7D.815. 队列操作的原则是()A. 先进先出B.后进先出C. 只能进行插入D. 只能进行删除16. 若线性表最常用的操作是存取第i个元素及其前驱元素的值,则采用()存储方式最节省时间A.单链表B. 双向链表C. 音循环链表D. 顺序表17. 栈和队列都是()A. 顺序存储的线性结构B. 限制存取点的线性结构C. 链接存储的线性结构D. 限制存取点的非线性结构18. 与线性表的链接存储相符的特性是()A.插入和删除操作灵活B. 需要连续存储空间C. 便于随机访问D. 存储密度大19.若进队序列为1,2,3,则出队序列是()A.3,2,1B. 1,3,2C. 1,2,3D. 3,2,120. 在单向循环链表中,若头指针为h,那么p所指结点为尾结点的条件是()A. p= NULLB. p→next= NULLC. p=hD. p→next= h3. 在双向循环链表中,在指针P所指的结点之后插入指针f所指的结点,其操作为。
(完整版)数据结构复习题(附答案)⼀、算法设计题(每题15分,共60分)答题要求:①⽤⾃然语⾔说明所采⽤算法的思想;②给出每个算法所需的数据结构定义,并做必要说明;③写出对应的算法程序,并做必要的注释。
1、有⼀个带头结点的单链表,每个结点包括两个域,⼀个是整型域info,另⼀个是指向下⼀个结点的指针域next。
假设单链表已建⽴,设计算法删除单链表中所有重复出现的结点,使得info域相等的结点只保留⼀个。
3、约瑟夫环问题(Josephus问题)是指编号为1、2、…,n的n(n>0)个⼈按顺时针⽅向围坐成⼀圈,现从第s个⼈开始按顺时针⽅向报数,数到第m个⼈出列,然后从出列的下⼀个⼈重新开始报数,数到第m的⼈⼜出列,…,如此重复直到所有的⼈全部出列为⽌。
现要求采⽤循环链表结构设计⼀个算法,模拟此过程。
4、编程实现单链表的就地逆置。
23.在数组 A[1..n]中有n个数据,试建⽴⼀个带有头结点的循环链表,头指针为h,要求链中数据从⼩到⼤排列,重复的数据在链中只保存⼀个.5、设计⼀个尽可能的⾼效算法输出单链表的倒数第K个元素。
3、假设以I和O分别表⽰⼊栈和出栈操作。
栈的初态和终态均为空,⼊栈和出栈的操作序列可表⽰为仅由I和O组成的序列,称可以操作的序列为合法序列,否则称为⾮法序列。
(15分)(1)下⾯所⽰的序列中哪些是合法的?A. IOIIOIOOB. IOOIOIIOC. IIIOIOIOD. IIIOOIOO(2)通过对(1)的分析,写出⼀个算法,判定所给的操作序列是否合法。
若合法,返回true,否则返回false(假定被判定的操作序列已存⼊⼀维数组中)。
5、设从键盘输⼊⼀整数的序列:a1, a2, a3,…,an,试编写算法实现:⽤栈结构存储输⼊的整数,当ai≠-1时,将ai进栈;当ai=-1时,输出栈顶整数并出栈。
算法应对异常情况(⼊栈满等)给出相应的信息。
设有⼀个背包可以放⼊的物品重量为S,现有n件物品,重量分别为W1,W2,...,W n。
第一章一、单项选择题1. 数据结构是指()。
A.数据元素的组织形式B.数据类型C.数据存储结构D.数据定义2. 数据在计算机存储器内表示时,物理地址与逻辑地址不相同的,称之为()。
A.存储结构B.逻辑结构C.链式存储结构D.顺序存储结构3. 树形结构是数据元素之间存在一种()。
A.一对一关系B.多对多关系C.多对一关系D.一对多关系4. 设语句x++的时间是单位时间,则以下语句的时间复杂度为()。
for(i=1; i<=n; i++)for(j=i; j<=n; j++)x++;A.O(1)B.O( )C.O(n)D.O( )5. 算法分析的目的是(1),算法分析的两个主要方面是(2)。
A.找出数据结构的合理性B.研究算法中的输入和输出关系C.分析算法的效率以求改进D.分析算法的易懂性和文档性(2) A.空间复杂度和时间复杂度 B.正确性和简明性C.可读性和文档性D.数据复杂性和程序复杂性6. 计算机算法指的是(1),它具备输入,输出和(2)等五个特性。
(1) A.计算方法 B.排序方法 C.解决问题的有限运算序列 D.调度方法(2) A.可行性,可移植性和可扩充性 B.可行性,确定性和有穷性C.确定性,有穷性和稳定性D.易读性,稳定性和安全性7. 数据在计算机内有链式和顺序两种存储方式,在存储空间使用的灵活性上,链式存储比顺序存储要()。
A.低 B.高 C.相同 D.不好说8. 数据结构作为一门独立的课程出现是在()年。
A.1946B.1953C.1964D.19689. 数据结构只是研究数据的逻辑结构和物理结构,这种观点()。
A.正确B.错误C.前半句对,后半句错D.前半句错,后半句对10. 计算机内部数据处理的基本单位是()。
A.数据B.数据元素C.数据项D.数据库二、填空题1. 数据结构按逻辑结构可分为两大类,分别是______________和_________________。
《数据结构》课程复习资料一、填空题:1.设需要对5个不同的记录关键字进行排序,则至少需要比较________次,至多需要比较__________次。
2.设二叉排序树的高度为h,则在该树中查找关键字key最多需要比较_________次。
3.设在长度为20的有序表中进行二分查找,则比较一次查找成功的结点数有_________个,比较两次查找成功有结点数有_________个。
4.数据结构从逻辑上划分为三种基本类型:___________、__________和___________。
5.在一个具有n个顶点的无向完全图中,包含有________条边,在一个具有n个顶点的有向完全图中,包含有________条边。
6.向一棵B_树插入元素的过程中,若最终引起树根结点的分裂,则新树比原树的高度___________。
7.在堆排序的过程中,对任一分支结点进行筛运算的时间复杂度为________,整个堆排序过程的时间复杂度为________。
8.在快速排序、堆排序、归并排序中,_________排序是稳定的。
9.在有n个叶子结点的哈夫曼树中,总结点数是_______。
10.一棵树T采用二叉链表存储,如果树T中某结点为叶子结点,则在二叉链表BT中所对应的结点一定_______。
11.3.已知数组A[10][10]为对称矩阵,其中每个元素占5个单元。
现将其下三角部分按行优先次序存储在起始地址为1000的连续的内存单元中,则元素A[5,6]对应的地址是_______。
12.在有n个结点的无向图中,其边数最多为_______。
13.取出广义表A=(x,(a,b,c,d))中原子x的函数是_______。
14.对矩阵采用压缩存储是为了___ ____。
15.带头结点的双循环链表L为空表的条件是_______。
16.设线性表中元素的类型是实型,其首地址为1024,则线性表中第6个元素的存储位置是。
17.对于顺序存储的栈,因为栈的空间是有限的,在进行运算时,可能发生栈的上溢,在进行运算时,可能发生栈的下溢。
第一章概论自测题答案一、填空题1. 数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和运算等的学科。
2. 数据结构被形式地定义为(D, R),其中D是数据元素的有限集合,R是D上的关系有限集合。
3. 数据结构包括数据的逻辑结构、数据的存储结构和数据的运算这三个方面的内容。
4. 数据结构按逻辑结构可分为两大类,它们分别是线性结构和非线性结构。
5. 线性结构中元素之间存在一对一关系,树形结构中元素之间存在一对多关系,图形结构中元素之间存在多对多关系。
6.在线性结构中,第一个结点没有前驱结点,其余每个结点有且只有 1个前驱结点;最后一个结点没有后续结点,其余每个结点有且只有1个后续结点。
7. 在树形结构中,树根结点没有前驱结点,其余每个结点有且只有1个前驱结点;叶子结点没有后续结点,其余每个结点的后续结点数可以任意多个。
8. 在图形结构中,每个结点的前驱结点数和后续结点数可以任意多个。
9.数据的存储结构可用四种基本的存储方法表示,它们分别是顺序、链式、索引和散列。
10. 数据的运算最常用的有5种,它们分别是插入、删除、修改、查找、排序。
11. 一个算法的效率可分为时间效率和空间效率。
二、单项选择题(B)1. 非线性结构是数据元素之间存在一种:A)一对多关系 B)多对多关系C)多对一关系 D)一对一关系( C )2. 数据结构中,与所使用的计算机无关的是数据的结构;A) 存储 B) 物理C) 逻辑 D) 物理和存储(C)3. 算法分析的目的是:A) 找出数据结构的合理性B) 研究算法中的输入和输出的关系C) 分析算法的效率以求改进D) 分析算法的易懂性和文档性(A)4. 算法分析的两个主要方面是:A) 空间复杂性和时间复杂性B) 正确性和简明性C) 可读性和文档性D) 数据复杂性和程序复杂性(C )5. 计算机算法指的是:A) 计算方法B) 排序方法C) 解决问题的有限运算序列D) 调度方法(B)6. 计算机算法必须具备输入、输出和等5个特性。
数据结构复习题及答案数据结构习题一、名词解释1.数据、数据元素、数据项、数据结构、数据的逻辑结构、数据物理结构、顺序存储、链式存储、算法、时间复杂度、空间复杂度。
2.线性表、顺序表、单链表、双向链表、循环链表、双向循环链表、三个概念的区别:头指针、头结点、首元结点(第1个元素结点)。
3.栈(顺序栈、链栈)、队列(顺序队、链队)、循环队列、递归、稀疏矩阵、三元组。
4.树、叶子结点、结点的度、树的度、树的高(深)度、二叉树、遍历、满二叉树、完全二叉树、哈夫曼树、WPL、哈夫曼编码。
5.图(有向、无向)、网、边、弧、度、入度、出度、完全图(有向、无向)、(强)连通图(分量)、(最小)生成树、邻接矩阵、邻接表、DFS、BFS。
6.查找表、关键字、静态查找、动态查找、ASL、顺序查找、折半查找、分块查找、二叉排序树。
7、排序、内(外)排序、稳定性、插入(直接、希尔),交换(起泡、快速),选择(直接、堆),2路归并。
一、填空题1.数据结构是研究数据的_逻辑结构__和___物理结构__,并在这种结构上定义相关的运算,设计实现这些运算的算法,分析算法的效率。
算法的效率包括时间和空间两个方面,分别称为___时间复杂度____和__空间复杂度___。
2.数据的基本单元是__数据元素__,数据的最小单元是__数据项_。
3.算法是对特定问题求解___步骤___的一种描述,是指令的有限序列。
4.一个算法的时间复杂度为(3n3+2n—7),其数量级表示为O(n3)_。
5.一个算法具有5个特性:确定性、可行性、有穷性、输入和输出。
6.算法机能的阐发和怀抱,能够从算法的工夫庞大度和空间庞大度来评判算法的好坏。
7.数据的逻辑布局包孕调集布局、线性布局、树形布局和图型布局四品种型。
8.数据布局在计较机中的表示称为数据的物理布局,它能够采用__按次存储___或__链式存储_两种存储方法。
9.线性表有两种存储布局,划分为按次存储和链式存储。
考试说明考试内容:一、绪论数据结构的基本概念和分类、数据结构的逻辑结构、存储结构、算法、数据结构的选择和评价二、线性表线性表的类型定义、线性表的顺序表示和实现、线性表的链式表示和实现三、栈和队列栈和队列的结构特性、两种存储结构上实现栈和队列的基本操作、栈和队列在程序设计中的应用六、树和二叉树树、二叉树的定义、性质和存储结构、二叉树的遍历和线索化、二叉树和森林转换、最优树和哈夫曼编码。
七、图图的定义和术语、图的存储结构、图的遍历、最小生成树、拓扑排序、最短路径问题。
九、内部排序插入排序、交换排序、选择排序、归并排序和基数排序的基本思想、算法特点、排序过程、时间复杂度分析及其应用。
试题类型及分值:选择题30分15题应用题40分5题算法设计题30分3题1.计算机算法指的是(1),它必须具备(2)这三个特性。
(1) A.计算方法 B. 排序方法 C. 解决问题的步骤序列 D. 调度方法(2) A.可执行性、可移植性、可扩充性 B. 可执行性、确定性、有穷性C. 确定性、有穷性、稳定性D. 易读性、稳定性、安全性答案:CB2. 下面说法错误的是()(1)算法原地工作的含义是指不需要任何额外的辅助空间(2)在相同的规模n下,复杂度O(n)的算法在时间上总是优于复杂度O(2n)的算法(3)所谓时间复杂度是指最坏情况下,估算算法执行时间的一个上界(4)同一个算法,实现语言的级别越高,执行效率就越低A.(1) B.(1),(2) C.(1),(4) D.(3)答案 C3.从逻辑上可以把数据结构分为()两大类。
A.动态结构、静态结构 B.顺序结构、链式结构C.线性结构、非线性结构 D.初等结构、构造型结构答案 C4.以下与数据的存储结构无关的术语是()。
A.循环队列 B. 链表 C. 哈希表 D. 栈答案 D5.连续存储设计时,存储单元的地址()。
A.一定连续 B.一定不连续 C.不一定连续 D.部分连续,部分不连续答案 A6.下面关于线性表的叙述中,错误的是哪一个?()A.线性表采用顺序存储,必须占用一片连续的存储单元。
期末考试重点复习资料二、考试重点内容第一章绪论1、时间复杂度和空间复杂度的计算。
要求能够计算出程序的执行次数。
2、各种概念:数据结构、数据项、数据元素第二章线性表1、单链表的各种操作,包括单链表的建立、插入、删除结点的操作语句序列2、单链表(带头结点、不带头结点、循环单链表)的逆置运算。
3、双链表的插入和删除操作语句序列。
4、单链表的直接插入排序运算。
5、静态单链表的插入和删除操作。
6、二个有序单链表的合并、一个单链表拆分为多个单链表第三章栈和队列1、栈的输入序列和输出序列、递归函数的输出结果2、循环队列的入队、出队操作以及有效元素个数的计算第四章串1、KMP算法中的next和nextval值的计算第五章数组和广义表1、二维数组任意元素地址的计算2、稀疏矩阵的转置算法3、广义表的两个操作函数:取表头和表尾第六章树和二叉树1、二叉树的性质(特别是完全二叉树的性质,例如求完全二叉树的深度等)2、二叉树的遍历(特别是中序和先序遍历,要求能够使用堆栈完成非递归遍历编程和递归算法编程,在遍历基础上的各种操作,例如求二叉树的叶子数、二叉树结点数等操作,包括有编程算法和编程填空题)3、线索二叉树(特别是中序线索化二叉树和中序线索化二叉树的中序遍历,包括编程算法和编程填空题,希望大家着重研究)4、哈夫曼编码(主要是应用题,包括哈夫曼的编码与解码,也包括哈夫曼树的特点)5、树与森林在转化成二叉树时,左右子树的结点数有何特点)6、树的层次遍历(使用队列完成、借助树的层次遍历可以判断二叉树是否为完全二叉树)、判断二叉树是否为排序二叉树等,可能有编程题或编程填空题)补充:二叉树的物理存储结构(链式和顺序存储)*第七章图1、图的两种物理存储方式(邻接矩阵与邻接表存储表示)2、图的生成树与最小生成树(生成树特点)、图的遍历3、求最小生成树的两种算法(重点是PRIM 算法,特别会写出用PRIM算法求最小生成树的过程)4、使用迪杰斯特拉算法求单源最短路径,写出求解过程5、拓扑排序6、求关键路径,要求写出事件和活动的最早和最晚开始时间,深刻理解关键路径的含义。
《数据结构》复习第一章绪论一、基本概念:数据、数据元素、数据项数据结构、逻辑结构、物理结构线性结构、非线性结构顺序存储结构、链式存储结构、散列存储结构、索引存储结构数据类型、抽象数据类型。
算法、语句的频度、算法的时间复杂度、算法的渐进复杂度空间复杂度二、数据结构概念:数据结构包括数据的逻辑结构、数据的存储结构和数据的运算。
数据的运算定义在数据的逻辑结构上,是通过算法来描述的。
数据运算的实现依赖于数据的存储结构。
数据结构分类方法:按数据元素间的逻辑关系分类:集合、线性、树状、图状或网状按元素间的逻辑关系和施加的运算分类(抽象数据类型):线性表、栈、队列、串、数据、广义表树、二叉树、图查找表文件三、算法的时间复杂度算法的时间复杂度T(n):算法的时间消耗算法的时间消耗:所有语句的执行次数(频度)之和算法的渐进时间复杂度(简称时间复杂度):当n->∞时,T(n)的数量级。
即为T(n)中阶最高的那一项,是算法中频度最大的语句频度。
空间复杂度:除数据集合所需的空间外,为实现运算所需的辅助空间的数量(级)。
第二章线性表一、线性表的逻辑特征数据元素在线性表中的相对位置是线性的,可以用一个连续的整数编码来标识,即数据元素在线性表中的位置只依赖于它们自己的序号,与数据元素的具体内容无关。
二、对线性表的基本操作1、初始化操作2、求线性表的长度3、取表中第i个元素:若1≤i≤LENGTH(L),则函数值为给定线性表中第i个元素,否则为元素NULL。
4、定位函数:返回元素x的位序。
5、INSERT(L,i,b):前插函数。
在第i 个元素前插入数据元素b。
6、DELETE(L,i):删除第i个数据元素。
7、删除指针p指定的结点。
三、线性表的顺序存储结构(向量结构)用一组连续的存储单元依次存储线性表的元素。
特点:1、逻辑上相邻的数据元素a i和a i+1的存储位置也相邻。
即以数据元素在计算机内“物理位置相邻”来表示线性表中数据元素之间的逻辑关系。
loc(a i)=loc(a1)+(i-1)*Lloc(a1)是第一个数据元素的存储位置,通常称为线性表的起始地址或基地址。
2、只要确定了存储线性表的起始地址,就直接确定了线性表中任一数据元素的存储位置,并且通过该公式实现对线性表元素的随机存取(访问)。
线性表顺序存储结构的C描述线性表顺序存储结构的操作1、定位操作:定位平均比较次数为(∑i)/n=(n+1)/2,算法的时间复杂度为O(n)。
不成功,则要比较n+1。
2、I NSERT(v,i,b):前插操作,在第i个数据元素之前插入一个元素b。
所需移动元素次数的期望值(平均次数)为: Eis=∑p i(n-i+1)=(n(n+1)/2)/(n+1)=n/2 (i=1,2,…,n+1)即:算法的时间复杂度为O(n).3、删除运算:在长度为n的线性表中删除第i个元素。
删除第i个元素移动次数为n-i平均移动次数为Ede=(∑(n-i))/n=(n-1)/2 (i=1,2,...,n) 删除运算的时间复杂度为O(n)缺点:插入删除操作可能要移动大量元素。
四、线性表的链式存储结构特点:用一组任意的存储单元存放线性表的数据元素(存储单元可以不连续)。
数据元素间的逻辑关系表示:存储一个指示其直接后继的信息。
用独立结点来存储数据元素的信息和指示数据元素间的逻辑关系。
实现的C语言描述单链表的特点1、头指针:指示线性链表中第一个结点。
2、最后一个结点无后继,其指针域设为“空”(NIL),表示链表到此结束。
3、结点指针域:把内存中可能不连续的数据元素顺序组成一个线性表。
4、要访问任一元素,必须从头指针出发寻找,是顺序访问结构。
5、增设一个头结点,作为线性表的第一个结点,可以简化插入、删除算法。
线性链表的运算1、在相邻元素a和b之间插入一个值为x的数据元素的基本操作步骤:生成一个数据域值为x的结点s;使x结点的指针域指向结点b: s->next=p->next;修改a结点的指针域指向结点x:p->next=s;2、在第i个元素前插入一个元素x的步骤:生成一个数据域值为x的结点s;查找第i-1个接点p使x结点的指针域指向结点p的后继接点: s->next=p->next;使p结点的指针域指向结点s:p->next=s;3、删除第i个结点。
实现:修改前驱结点(第i-1结点)的指针域使其指向第i+1个结点。
插入和删除运算的关键:寻找前驱结点。
在两种运算中,WHILE循环平均比较次数:(∑i)/(n+1)=(n+1)/2 (I=1,2,n+1)循环体的执行次数: (∑(i-1)/(n+1)=n/2时间复杂度为O(n)。
采用线性链表的优点:①有效利用存储资源,提高程序运行的可靠性。
有多少数据元素,才申请多少相应的存储空间。
不使用的单元可归还给系统。
存储密度②插入和删除,不需移动元素。
3、循环链表使最后一个结点的指针域又指向第一个结点或头结点。
这样的线性链表就叫循环链表。
特点:从任一结点出发,可以访问表中所有其它结点。
为了使得空表和非空表的运算统一,设置一个表头结点。
它的值域或为空.用指向表尾结点的指针来表示循环链表的优点4、双向循环链表双向链表:每个结点设置两个指针,一个指向直接前驱,一个指向直接后继。
双向循环链表:在双向链表中,若第一个结点(后头结点)的前向指针指向最后一个结点,最后一个结点的后向指针指向第一个结点(或头结点),则就是双向循环链表。
双向循环链表结点的插入:在P结点前插入一个结点S双向循环链表结点的删除第三章栈和队列一、栈(stack)1、栈的定义:限定仅在表的一端进行插入和删除操作的线性结构。
栈顶(top):允许进行插入和删除操作的一端。
2、栈的特点:后进先出(或先进后出):Last In First Out=LIFO3、栈的基本操作INISTACK(s):初始化栈。
设定一个空栈。
EMPTY(S):判栈空函数。
栈空时返回真,否则返回假。
PUSH(S,x):入栈操作函数。
在栈顶插入元素x。
POP(S,&e):出栈函数。
若栈不空,返回栈顶元素值,并从栈中删除该元素,否则返回空元素NULL。
GETTOP(S,&e):取栈顶元素函数。
若栈不空,返回栈顶元素值,否则返回空元素NULL。
4、栈的顺序存储表示及其实现用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素。
实现的C描述栈的初始化进栈操作出栈操作栈的“下溢”极其意义。
5、栈的链式存储结构链表头指针用Top表示。
栈空时:Top=NIL入栈:每当一个元素进栈时,申请一个新结点,插入到表头。
出栈:每当一个元素出栈时,从表头释放一个结点。
判断进栈、出栈序列的正确性二、队列(Queue)定义:队列是一种先进先出的线性表(结构)。
特点:插入运算在表的一端进行。
删除运算在表的另一端进行。
队头:允许删除的一端,用front表示。
队尾:允许插入的一端,用rear表示。
3、队列的基本操作INIQUEUE(Q):初始化队列,设置一个空队列。
EMPTY(Q):判队列空函数。
队列空,返回true,否则返回false。
ENQUEUE(Q):入队操作,在队列尾部插入一个元素。
DEQUEUE(Q):出队操作,若队不空,出队头元素,并返回该元素值,否则返回NULL。
4、队列的链式存储结构----链队列C语言描述头指针----指向删除的一端尾指针----指向插入的一端队空时:头、尾指针为NULL,或都指向头结点。
出队操作要判断尾指针的正确性5、队列的顺序存储结构假上溢。
假上溢的原因是:头指针和尾指针的值总是不断增加,已使用过的存储单元无法再使用。
解决假上溢的方法:循环队列解决队空队满都有头尾指针相等问题:1、一个标志字段区分队空队满2、少用一个元素空间,m个元素单元最多只存放m-1个元素,且:front=rear ----队空(rear+1)%m=front ----队满3、长度记数器要能够区分线性表、栈、队列的异同第四章串一、串及其操作1、串的逻辑结构定义:串(字符串):是由0个或多个字符组成的有限序列。
串的长度,空串,空格串、子串,主串、主串、字符在串中的位置、子串在串中的位置。
2、串的基本操作判断相等、求串长、联接、串复制、求子串、串的模式匹配二、串的存储结构1、静态存储分配:分配一组连续的存储单元存放串的字符序列。
C语言可描述2、链式存储结构----动态存储结构----块链存储结构存储密度=串值所占存储位/实际分配的存储位3、堆分配与存储映像第五章数组和广义表一、数组的逻辑结构特点数组元素个数①一个元素都受n个关系的约束,每个关系都是线性关系。
②每个数组元素属于同一数据类型。
③每个数组元素对应于一组下标,④每个下标有由一对界偶(c i,d i)限定其范围。
数组的两个定义1、一个 n维数组被定义为一个线性表,其元素是一个 n-1维数组。
2、一个 n维数组的数据元素受n个关系的约束,且每个关系都是线性的。
二、对数组的操作:给定一组下标,存取相应的数据元素。
给定一组下标,修改相应数据中的某一个或几个数据项的值。
三、数组的顺序存储结构二维数组的两种分配方式:行主分配:先分配第一行的元素,以后每一行的元素紧跟其上一行的后面进行分配。
列主分配:先分配第一列的元素,以后每一列的元素紧跟其前一列的后面进行分配。
计算数组元素地址的公式对于二维以上数组:行主分配为低下标优先。
列主分配为高下标优先:总是前面的下标从小变到大,后面的下标在增值。
计算数组元素地址的公式四、矩阵的压缩存储1、特殊矩阵:对称矩阵、对角矩阵的压缩存储及其与一维数组下标的对应关系。
2、稀疏矩阵:三元组表三元组顺序表。
五、广义表1、特点:a i可以单个元素,也可以是广义表。
2、表头、表尾的概念取列表表头操作取列表表尾操作第六章树和二叉树一、树(Tree)的定义1、递归定义----树的固有特性在任意一棵非空树中:⑴有一个特定的称为根(root)的结点。
⑵当n>1时,其余结点分为m(m>0)个互不相交的子集,每个集合本身又是一棵树,并且称为根的子树2、非递归定义----从树的结点间的直接关系看在任意一棵非空树中:⑴有且仅有一个没有前驱的结点----根。
⑵当n>1时,其余结点有且仅有一个直接前驱。
⑶所有结点都可以有0个或多个后继。
3、树的基本术语:树的结点:包含一个数据元素及若干指向子树的分支(关系的表示)。
结点的度、树叶、非叶结点、树的度、结点的孩子、双亲结点的层次、树的深度、有序树、森林二、二叉树(binery tree)1、二叉树的定义:由一个根结点加上两个互不相交的被称为该根的左右两个子树组成。
2、二叉树的特点:结点的度最大为2(但不一定有度为2的结点);子树有左右之分,不能颠倒。