第一章 绪论

考试大纲
1)了解数据元素、数据结构、抽象数据类型、存储结构等概念;了解算法概念及算法设计的基本要求 ;
2)掌握算法分析方法、语句的频度和估算时间复杂度、空间复杂度分析方法。
考查要点

1.数据结构的研究内容
包括数据的逻辑结构、数据的存储结构和对数据元素施加的操作(即数据的运算)三方面。
2.算法概念及其评价
五大特性:有穷性、确定性、可行性、输入性、输出性;
算法评价:正确性、可读性、健壮性、高效性、低存储性;
要特别弄清诸如语句频度、时间复杂度、空间复杂度等的概念,评价一个算法好坏的两个主要标准——时间复杂度和空间复杂度。
3.算法和程序的区别
a. 程序不一定满足有穷性(如操作系统);
b. 程序中的指令必须是机器可执行的,算法中的指令则无此限制;
c. 算法代表了对问题的解,程序则是算法在计算机上的特定的实现(一个算法若用程序设计语言来描述,它才是一个程序);
d. 数据结构+算法=程序。
4.数据结构的相关概念
数据结构包括数据的逻辑结构和数据的存储结构。
数据元素是组成数据的基本单位。
数据项是数据不可分割的最小单位。
数据逻辑结构的两大类型(线性结构、非线性结构)、抽象数据类型(是指一个数学模型以及定义在该模型上的一组操作)。
数据的四种逻辑结构(集合、线性、树形、图形)
数据的四种存储结构(顺序、链式、索引、散列)
不管是顺序存储结构还是链式存储结构,都要存储数据元素本身和数据元素之间的关系
顺序存储结构、链式存储结构都可存各种逻辑结构
5.数据逻辑结构、存储结构的区别和联系
区别:数据的逻辑结构是一个数学模型;数据的存储结构是数据的逻辑结构在计算机内部的存储方式。
联系:一种逻辑结构可以用多种存储结构来存储;一种存储结构可以用来存多种逻辑结构。

课后习题

1. 数据结构包括数据的逻辑结构、数据的存储结构和 数据的运算 。
2. 数据的逻辑结构可以分为 线性 和 非线性 两大类型。
3. 在算法正确的前提下,评价一个算法好坏的两个主要标准是 时间复杂度 和 空间复杂度 。
4. 对于给定的n个元素,可以构造出的逻辑结构有线性、树形 、 图形 和 集合 四种。
5. 数据的存储结构不仅有顺序存储结构、链式存储结构,还有 索引存储结构 和 散列存储结构 。
6. 组成数据的基本单位是 数据元素 。
7. 数据结构的两个要素是 数据元素 和 数据元素之间的关系  。
8. 语句频度是 语句重复执行的次数 。
9. 算法是 对特定问题求解步骤的一种描述,是指令的有限序列 。
10. 数值计算问题是 操作对象之间的关系可以用数学方程加以描述的问题 ;非数值计算问题是 操作对象之间的关系不能用数学方程加以描述的问题 。
11. 程序是 算法在计算机上的特定的实现 。
12. 抽象数据类型是 指一个数学模型以及定义在该模型上的一组操作 。
13. 学习数据结构课程的目的是 非数值计算问题的程序设计 。
14. 算法可用 自然语言、流程图、N-S图、计算机语言、伪码语言等 描述。
15. 存储密度是  一个结点中数据元素所占的存储单元和整个结点所占的存储单元之比 。
二.简答题
1. 试说明算法与程序有哪些区别?
答:至少有四点区别:
(1)程序不一定满足有穷性(如操作系统);
(2)程序中的指令必须是机器可执行的,算法中的指令则无此限制;
(3)算法代表了对问题的解,程序则是算法在计算机上的特定的实现(一个算法若用程序设计语言来描述,它才是一个程序);
(4)数据结构+算法=程序。
2. 举一个数据结构的例子,叙述其逻辑结构、存储结构和运算(操作)三方面的内容。
答:例如有一张学生成绩表,记录了一个班的学生各门课的成绩。按学生的姓名为一行记成的表,这个表就是一个数据结构。每个记录(有姓名、学号、成绩等项)就是一个结点,对于整个表来说,只有一个开始结点(它的前面无记录)和一个终端结点(它的后面无记录),其它的结点则各有一个也只有一个直接前趋和直接后继(它的前面和后面均有且只有一个记录)。这几个关系就确定了这个表的逻辑结构——线性结构。
那么我们怎样把这个表中的数据存储到计算机里呢? 用高级语言如何表示各结点之间的关系呢? 是用一片连续的内存单元来存放这些记录(如用数组存储,亦即顺序存储)还是随机存放各结点数据再用指针进行链接(链式存储)呢? 这就是存储结构的问题,我们都是从高级语言的层次来讨论这个问题的。
最后,我们有了这个表(数据结构),肯定要用它,那么就是要对这张表中的记录进行查询、修改、删除等操作,对这个表可以进行哪些操作以及如何实现这些操作就是数据的运算(操作)问题了。
3. 什么叫算法效率?如何度量算法效率?
答:算法效率包括时间效率和空间效率。时间效率指算法运行得有多快;空间效率关心算法需要的额外空间。算法效率通常用时间复杂度和空间复杂度来度量。
4. 数据的逻辑结构与存储结构的区别和联系是什么?
答:区别:数据的逻辑结构是一个数学模型;数据的存储结构是数据的逻辑结构在计算机内部的存储方式。
联系:一种逻辑结构可以用多种存储结构来存储;一种存储结构可以用来存多种逻辑结构。
5. 算法有什么特性?评价一个算法有几个标准?
答:一个算法应该具有以下五个特性:
(1)有穷性。 一个算法必须总是在执行有穷步之后结束,且每一步都在有穷时间内完成 (有限步完成)。
(2)确定性。算法中每一条指令必须有确切的含义。不存在二义性。且算法只有一个入口和一个出口(无二义性)。
(3)可行性。一个算法是可行的。即算法描述的操作都是可以通过已经实现的基本运算执行有限次来实现的(每一步都可通过执行有限次基本操作实现)。
(4)输入性。一个算法有零个或多个输入,这些输入取自于某个特定的对象集合(有零个或多个输入)。
(5)输出性。一个算法有一个或多个输出,这些输出是同输入有着某些特定关系的量(有一个或多个输出)。
评价一个算法有以下几个标准:
(1) 正确性。算法应满足具体问题的需求。
(2) 可读性。 算法应该好读。以有利于阅读者对程序的理解。
(3) 健壮性。算法应具有容错处理。当输入非法数据时,算法应对其作出反应,而不是产生莫名其妙的输出结果。
(4) 高效性。指算法执行的时间和执行过程中所需要的最大存储空间要少。一般,这两者与问题的规模有关。

思维导图

第二章 线性表

考试大纲
1)理解线性表的定义和基本操作;线性表的抽象数据类型定义;
2)掌握线性表的顺序存储结构及应用方法;
3)掌握线性表的链式存储结构(单链表,双链表,循环链表)。
具体要求:
要求掌握线性表的顺序存储方式下的元素插入、元素删除及线性表遍历算法;要求掌握线性表的链式存储方式下,元素的插入、元素的删除及线性表遍历算法(带头结点及不带头结点的单链表)
考查要点

1.线性表的定义
从数据对象、元素间的关系、基本操作三方面进行阐述。
2.线性表的两种存储结构及其优缺点
线性表的顺序存储是指在内存中用地址连续的一块存储空间对线性表中的各元素按其逻辑顺序依次存放,用这种存储形式存储的线性表称为顺序表。线性表的链式存储结构是用一组任意的存储单元存储线性表的各个数据元素。为了表示线性表中元素的先后关系,每个元素除了需要存储自身的信息外还需保存直接前趋元素或直接后继元素的存储位置。所以,链式存储结构的线性表其元素之间的逻辑关系是通过结点的指针域来表示的。
顺序存储有三个优点:(1)方法简单,用数组,容易实现。(2)不用为表示结点的逻辑关系而增加额外开销。(3)具有按元素序号随机访问的特点。两个缺点:(1)进行插入、删除时,平均移动表中一半的元素,
效率较低。(2)需预先分配足够大的存储空间。空间估计过大,会导致空间闲置(造成浪费);预先分配过小,又会造成溢出。链表的优缺点恰好与顺序表相反。
与线性表两种存储结构有关的知识有:线性表中逻辑上相邻的两个元素其存放位置不一定相邻;线性表的链式存储表示不一定优于顺序存储表示;链式存储方式以指针表示结点间的逻辑关系;一个需经常作插入、删除运算的线性表应采用链式存储结构;线性表元素个数稳定、很少进行插入和删除操作应采用顺序存储结构;若线性表最常用的操作是存取第 i 个元素及其前驱元素的值,则采用顺序存储方式最节省运算时间;在顺序存储结构、链式存储结构上删除元素的平均时间复杂度。
3.线性表的建立、插入、删除、输出
顺序表的类型定义、插入、删除,单链表的建立(头插建立、尾插建立)、插入(后插的基本操作)、删除、输出历来都是重点。如删除顺序表中某元素多少元素需移动、在顺序表中插入一个元素有多少元素需移动等。
再如在一个单链表的p所指的结点之后插入一个s所指的结点的操作、根据单链表结点类型定义写出带头结点单链表的升序插入、在带头结点单链表中查找元素并返回其地址、删除带头结点单链表中某元素、统计带头结点单链表中元素个数算法(函数)。
例1:设有一带头结点的数据域为整型数据的单链表h,给出单链表结点类型定义,并设计算法输出单链表中的所有元素。
typedef struct node{ int data;struct node *next;} slnode;
void output(slnode *h){ slnode *p;p=h->next;  while(p!=null){  printf(“%d”,p->data);p=p->next;                    }}
例2 设有一带头结点的数据域为整型数据的单链表H,给出单链表结点类型定义,并设计算法统计单链表中元素x的个数。typedef struct node{ int data;struct node *next;} slnode;
int tj(slnode *H){ slnode *p;int n=0;                       p=H->next;  while(p!=NULL){  if (p->data==x)  n++;p=p->next;                     }return n; }
4.单链表头结点的作用
简化运算。

课后习题

------------------------------------------
顺序表
------------------------------------------
一.填空题
1. 当线性表的元素总数基本稳定,且很少进行插入和删除操作,但要求以最快的速度存取
线性表中的元素时,应采用 顺序 存储结构。
2. 线性表L=(a1,a2,…,an)用数组表示,假定删除表中任一元素的概率相同,则删除一个
元素平均需要移动元素的个数是(n-1)/2 。
3. 顺序表中查找某个元素时,从前到后查找与从后到前查找的时间复杂度 相 同。
4. 在具有n个元素的顺序表中插入一个元素,合法的插入位置有 n+1 个。
5. 在一个长度为n 的顺序表中第i 个元素(1<=i<=n)之前插入一个元素时,需向后移动n-i+1 个元素。
6. 顺序存储结构的线性表中所有元素的地址 一定 连续。
7. 顺序存储结构的线性表其物理结构与逻辑结构是 一致 的。
8. 在具有n个元素的顺序存储结构的线性表任意一个位置中插入一个元素,在等概率条件下,平均需要移动  n/2 _个元素。
9. 在具有n个元素的顺序存储结构的线性表任意一个位置中删除一个元素,在等概率条件下,平均需要移动__(n-1)/2 __个元素。
10. 在具有n个元素的顺序存储结构的线性表中查找某个元素,平均需要比较(n+1)/2次。
11. 顺序存储结构的线性表中,插入或删除某个元素时,元素移动的次数与其位置 有 关(填有或无)。
12. 顺序存储结构的线性表中,访问第i个元素与其位置 无 关。(填有或无)。
13. 在具有n个元素的顺序存储结构的线性表中要访问第i个元素的时间复杂度是 O(1) 。
14. 在顺序表L中的i个位置插入某个元素x,正常插入时,i位置以及i位置以后的元素需要后移,首先后移的是 最后一 个元素。
15. 要删除顺序表L中的i位置的元素x,正常删除时,i位置以后的元素需要前移,首先前移的是 第i+1个元素(或i+1位置上的元素)。
16. 在具有n个元素的顺序存储结构的线性表中插入某个元素的时间复杂度是 O(n) 。
17. 若顺序表中的元素是从1位置开始存放的,要删除具有n个元素的顺序表中某个元素,合法的删除位置是 1到n 。
18. 在具有n个元素的顺序存储结构的线性表中删除某个元素的时间复杂度是 O(n) 。
5. 什么是顺序存储结构?顺序存储结构的优点和缺点各是什么?
答:顺序存储结构是把逻辑上相邻的元素存储在物理位置相邻的存储单元中。通常用数组实现。
顺序存储有三个优点:(1)方法简单,用数组,容易实现。(2)不用为表示结点的逻辑关系而增加额外开销。(3)具有按元素序号随机访问的特点。顺序存储有两个缺点:(1)进行插入、删除时,平均移动表中一半的元素,效率较低。(2)需预先分配足够大的存储空间。空间估计过大,会导致空间闲置(造成浪费);预先分配过小,又会造成溢出。------------------------------------------
链表
------------------------------------------
一.填空题
1. 单链表中增加头结点的目的是为了 简化操作 。
2. 用单链表方式存储线性表,每个结点需要两个域,一个是数据域,另一个是 指针域 。
3. 在一个单链表的p所指的结点之后插入一个s所指的结点,应执行的操作是:s->next=p->next 和 p->next =s 。
4. 某带头结点的单链表的头指针为head,判定该链表为空的条件是 head->next==NULL。
5. 在带有头结点的单链表HL中,要在首元素之前插入一个由指针p指向的结点,则应执行p->next=HL->next及  HL->next=p 操作。
6. 设指针变量p指向单链表中某结点A,则删除结点A的后继结点需要的操作为p->next=p->next->next (不考虑存储空间的释放)。
7. 链式存储结构的线性表其元素之间的逻辑关系是通过结点的 指针 域来表示的。
8. 单循环链表L中指针P所指结点为尾结点的条件是 P->next==L 。
9. 访问具有n个结点的单链表中任意一个结点的时间复杂度是 O(n) 。
10. 在单链表L中,指针P所指的结点有后继结点的条件是_ P->next!=NULL__。
11. 链式存储结构的线性表中所有元素的地址 不一定 连续。
12. 链式存储结构的线性表中,插入或删除某个元素所需的时间与其位置 无 关(填有或无)
13. 在单链表L中,指针P所指的结点为尾结点的条件是_ P->next==NULL__。
14. 头插法建立单链表时,元素的输入顺序与在链表中的逻辑顺序是 相反 的。
15. 尾接法建立单链表时,元素的输入顺序与在链表中的逻辑顺序是 相同 的。
16. 若要将一个单链表中的元素倒置,可以借助 头插法 建立单链表的思想将链表中的结点重新放置。
17. 线性表用链式存储结构存储比用顺序存储结构存储所占的存储空间 不一定 多(填一定或不一定)。
18. 线性表中逻辑上相邻的两个元素其存放位置 不一定 相邻。
3. 什么是链式存储结构?链式存储结构的优点和缺点各是什么?
答:链式存储结构是对逻辑上相邻的元素不要求其物理位置相邻,元素间的逻辑关系通过附加的指针字段来表示。通常用指针来实现。链式存储有两个优点:(1)进行插入、删除时,不需移动表中的元素,只需修改指针,效率较高。(2)不需预先分配存储空间,当需要存储空间时,临时开辟空间,不会造成空间浪费。链式存储有三个缺点:(1)方法比顺序存储复杂,不易实现。(2)为表示结点的逻辑关系需要增加额外空间。(3)不具有按元素序号随机访问的特点。
4. 单链表中头指针、头结点和第一个结点(开始结点)三者的区别是什么?
答:头指针是头结点(或第一个结点)的地址。单链表如果不带头结点的话,头指针是第一个结点的地址;单链表如果带头结点的话,头指针是头结点的地址。头结点是第一个结点前面的一个结点,它的数据域无定义,指针域中存放的是第一个数据结点的地址,空表时为空。第一个结点就是第一个存放数据的结点。

思维导图

第三章 栈和队列

考试大纲
1)理解栈的定义和基本操作及栈的抽象数据类型定义;
2)掌握顺序栈及链式栈的操作方法;
3)掌握栈在递归算法、 算术表达式求值及其它应用。
4)理解队列的定义和基本操作及队列的抽象数据类型;
5)掌握顺序队列的操作方法,了解链式队列的操作方法;
具体要求:
要求掌握栈的顺序存储和链式存储两种方式下入栈、出栈的算法;循环队列的顺序存储方式下,入队和出队算法。
考查要点

1.栈和队列的概念、特点
如:栈和队列是特殊的线性表
栈和队列的存储方式,既可以是顺序方式,又可以是链式方式。
同一栈内各元素的类型必须一致
栈是限定仅能在表尾一端进行插入、删除操作的线性表;
队列是限定仅能在表头进行删除、表尾进行插入的线性表;
栈的特点是后进先出;
队列的特点是先进先出。
若将1,2,3按先后次序入栈,出栈顺序不可能为3,1,2
在作进栈运算时应先判别栈是否已满,在作退栈运算时应先判别栈是否已空,当栈中元
素为n个,作进栈运算时发生上溢,则说明该栈的最大容量为n。
2.顺序栈、链栈、循环队列、链队列
如循环队列解决什么问题?假溢出
循环队列队空、队满判断:
在少用一个存储单元的前提下
front == rear时队空;
(rear + 1) % maxsize == front 时队满。
例:循环队列用数组A[0..m-1]存放其元素值,已知其头尾指针分别为front和rear,则当前元素个数为 (rear-front+m) % m;
为了解决普通顺序存储结构队列的“假溢出”现象,节约内存单元,通过在队列操作中加入
数学中的求余运算,可以将其构造成循环队列;
在循环队列中,为了能够区分队满和队空,往往少用一个元素空间。在这种情况下,队满的
条件是尾指针+1等于头指针。
3.什么情况下要用栈?什么情况下要用队列?
后进先出;先进先出。
如括号匹配、图的深度遍历等用栈实现。
二叉树的层次遍历、图的广度遍历等用队列实现。
例:解决计算机与打印机之间速度不匹配问题,须设置一个数据缓冲区,应是一个队列结构。
4.栈容量大小判断如设栈S和队列Q的初始状态均为空,元素e1,e2,e3,e4,e5,e6依次通过栈S,一个元素出栈后即进入队列Q,若6个元素出队序列为 e2,e4,e3,e6,e5,e1, 则栈S的容量至少为多少?(至少为3)。
5.对同一问题的求解程序,递归程序无论时间还是空间都不如非递归程序。
例:对同一问题的求解程序,递归程序比非递归程序要花费更多的时间;
任何一个递归过程都可以转换成非递归过程;

思维导图


课后习题

一.填空题
1. 为了解决普通顺序存储结构队列的“假溢出”现象,节约内存单元,通过在队列操作中
加入数学中的 求余 运算,可以将其构造成循环队列。
2. 解决计算机与打印机之间速度不匹配问题,须设置一个数据缓冲区,应是一个 队列 结构。
3. 循环队列是为了解决 假溢出 问题而将一个顺序表想像成一个首尾相接的顺序表。
4. 在循环队列中,如果其头指针为front,队列中元素个数为len,则该队列为空队的条件
是 len==0 。
5. 队列的插入操作在 队尾 进行。
6. 队列的删除操作在 队头 进行。
7. 一个栈的输入序列是:1,2,3 则不可能的栈输出序列是 3,1,2 。
8. 队列是限制插入只能在表的一端,而删除在表的另一端进行的线性表,其特点是 先进先出(或后进后出) 。
9. 队列的特点是 先进先出(或后进后出) 。
10. 队列 称作先进先出表。
11. 栈和队列是两种 操作受限制的 线性表。
12. 在作进栈运算时要判别栈是否 已满 。
13. 在作退栈运算时要先判别栈是否 已空   。
14. 在循环队列中,为了能够区分队满和队空,往往少用一个元素空间。在这种情况下,队
满的条件是 (rear + 1) % MAXSIZE == front ( 假定循环队列的最大容量为MAXSIZE,队首是front,队尾是rear)。
15. 栈的特点是 先进后出(或后进先出) 。二.简答题- 循环队列的优点是什么?如何判别循环队列的"空"或"满"?
答:循环队列的优点是:它可以克服顺序队列的"假上溢"现象,能够使存储队列的向量空间得到充分的利用。          判别循环队列的"空"或"满"通常有两种方法:
(1)另设一个变量num记录当前队列中的元素个数,当num==0时队空, num==maxsize时队满。
(2)少用一个存储单元(即少存一个元素), 队空条件为front == rear,队满条件为(rear + 1) % maxsize == front 。- 栈的特点是什么?队列的特点是什么?
答:栈的特点是先进后出,队列的特点是先进先出。- 什么是递归?递归有什么优点?
答:一个直接调用自己或通过一系列调用间接调用自己的过程称为递归。递归程序结构清晰,可读性强,而且容易用数学归纳法来证明程序的正确性。- 什么是栈顶?什么是栈底?
答:允许插入和删除的一端是栈顶。不允许插入和删除的一端是栈底。- 出栈和读栈顶元素有无区别?若有,其区别是什么?
答:出栈和读栈顶元素有区别。在栈s存在且非空的情况下,出栈是将栈s的顶部元素从栈中删除,栈中少了一个元素,栈发生变化;读栈顶元素是读栈顶元素,栈不变化。 - 链栈和单链表有什么相同点和不同点?
答:链栈实际就是不带头结点的单链表。其结构完全一样,不同的是链栈只允许头插、头删,而单链表可在其它位置插入和删除。- 链队列和单链表有什么相同点和不同点?
答:相同点:结点类型相同。不同点:链队列只允许头删、尾插,而单链表可在其它位置插入和删除。- 什么是顺序表?什么是顺序栈?两者之间有什么联系和区别?
答:线性表的顺序存储是指在内存中用地址连续的一块存储空间对线性表中的各元素按其逻辑顺序依次存放,用这种存储形式存储的线性表称为顺序表。利用顺序存储方式实现的栈称为顺序栈。顺序栈是顺序表的特殊情况,顺序栈只允许在栈顶插入和删除,而顺序表可在其它位置插入和删除。- 设栈S和队列Q的初始状态均为空,元素e1,e2,e3,e4,e5,e6依次通过栈S,一个元素出栈后即进入队列Q,若6个元素出队序列为 e2,e4,e3,e6,e5,e1, 则栈S的容量至少为多少?写出其分析过程。
答:至少为3(分析过程略)。

补充
1、利用栈实现表达式的转换(中缀转后缀,中缀赚前缀)

  • 中缀转后缀
利用栈将中缀表达式转化成后缀表达式
目的:将中缀表达式(即标准形式的表达式)转换为后缀式。例子:a+b*c+(d*e+f)*g转换成abc*+de*f+g*+转换原则1. 遇到操作数, 直接输出2. 操作符的优先级为 () 最大, * / 次之, +- 最小. 遇到操作符后, 假如操作符堆栈为空, 则直接压入操作符, 否则判断当前操作符与栈顶操作符的优先关系, 假如栈顶操作符的优先级大于 等于当前操作符的优先级, 那么弹出栈顶操作符, 持续弹出, 直到栈顶操作符优先级小于当前操作符优先级或栈为空. 最后将当前操作符入栈3. 如果遇到右括号, 那么将栈顶操作符弹出, 持续弹出直到遇到左括号, 左括号弹出但不输出4. 表达式读入完毕, 若栈不为空, 则持续弹出栈顶操作符, 直到栈为空
  • 中缀转前缀
建立一个栈来保存运算符,和一个字符容器存字符及运算符的输出。
从后向前扫描中缀表达式:
1、如果遇到的是普通字符那么存入容器中
2、如果遇到的是‘)’,存入容器中
3、如果遇到的是运算符(大于等于栈顶的优先级就入栈,否则弹栈)如果当前栈为空或者当前运算符的优先级大于等于栈顶元素的优先级,那么入栈。如果栈顶元素是‘)’,还是入栈。如果当前运算符的优先级小于栈顶元素的优先级,那么弹栈存入容器中,一直到栈顶元素为‘)’或者当前运算符的优先级大于或者等于栈顶元素的优先级。将当前运算符入栈。
4、如果遇到‘(’,那么弹栈存入容器一直遇到到‘)’,将‘)’弹出
5、返向输出容器中的字符

2、链栈进栈出栈代码实现

第四章 串

考试大纲
1)了解字符串的定义和基本操作及字符串的存储结构;
2)了解字符串的基本操作;
3)了解字符串模式匹配应用。
了解基本概念即可,不做重点处理,基本不会考,10年内没有考过

第五章 数组与矩阵广义表

考试大纲
1)理解数组的定义和基本操作;
2)掌握数组的顺序存储结构及应用;
3)掌握特殊矩阵和稀疏矩阵的压缩存储。
具体要求:掌握三角矩阵的压缩存储方法和稀疏矩阵三元组法的压缩存储方法。
考察要点

  元素值  行下标  列下标
0    5      4      4    //第一行,元素值表示该矩阵中稀疏元素的个数,行下标值该矩阵的行数,列下标指该矩阵的列数。
1    1      0      3
2    3      1      2
3    2      1      3
4    1      2      0
5    2      3      1


课后习题

一.填空题
1. 将10阶的下三角矩阵A按列优先顺序压缩存储在一维数组C中,则C数组的大小应为55 。
2. 已知二维数组A[10][20]采用行优先方式存储,每个元素占2个存储单元,并且A[0][0]的
存储地址是1000, 则A[2][8]的存储地址是 1096 。
3. 对5×5的下三角矩阵进行压缩存储时,如果每个元素要占3个字节,共需的存储单元数为  45 个。
4. 设数组B[0..3,1..5],数组中的任一元素B[i,j]均占两个单元,从首地址SA开始,把
数组B按行序为主序进行存放,则元素B[3,4]的地址为 SA+36 。
5. 已知具有n个元素的一维数组采用顺序存储结构,每个元素占k个存储单元,第一个元素的地址为LOC(a1),那么,LOC(ai)=  LOC(a1)+(i-1)*k  。
6. 字符串(简称串)是一种特殊的线性表,它的 数据元素 仅由一个字符组成。
7. 字符串和线性表一样,它通常采用的存储方式也是 顺序存储 和 链式存储 。
8. 二维数组的顺序存储可以采用以行为主序存储,也可采用 以列为主序 存储。
9. 值相同元素或者零元素分布有一定规律的矩阵称为 特殊矩阵 。
10. 对称矩阵是满足 aij= aji(0 i,j n-1) 条件的矩阵。
11. 有较多值相同元素或较多零元素,且值相同元素或者零元素分布没有一定规律的矩阵称
为 稀疏矩阵 。
12. 稀疏矩阵的压缩存储除了要保存非零元素的值外,还要保存非零元素在矩阵中的 行和列 。
13. 矩阵压缩存储是指为多个值相同的元素分配一个存储空间,对 值为0的元素 不分配存储空间。
14. 稀疏矩阵的压缩存储通常采用 三元组表 和 十字链表 存储。
15. n阶对称矩阵元素可以只存储下三角部分,共需 n(n+1)/2 个单元的空间。
二.简答题
1. 简述下列术语:空串与空白串,主串和子串,串值和串名。
答:空串与空白串:串中所包含的字符个数称为该串的长度。长度为零的串称为空串,它不包含任何字符。仅由一个或多个空格组成的串称为空白串。空串和空白串不同,例如“ ”和“”分别表示长度为1的空白串和长度为0的空串。
主串与子串:串中任意连续的字符组成的子序列称为该串的子串。包含子串的串相应的称为主串。
串值和串名:串是零个或多个字符组成的有限序列。一般记作S=“a1a2a3…an”,其中ai(1≦i≦n) 是一个任意字符,可以是字母、数字或其它字符,S 是串名,引号引起来的字符序列为串值。
2. 按以行序为主序的存储顺序,列出四维数组a[2][3][2][4]中所有元素在内存中的存储顺
序。
答:a[0][0][0][0]、a[0][0][0][1]、a[0][0][0][2]、a[0][0][0][3]、
a[0][0][1][0]、a[0][0][1][1]、a[0][0][1][2]、a[0][0][1][3]、
a[0][1][0][0]、a[0][1][0][1]、a[0][1][0][2]、a[0][1][0][3]、
a[0][1][1][0]、a[0][1][1][1]、a[0][1][1][2]、a[0][1][1][3]、
a[0][2][0][0]、a[0][2][0][1]、a[0][2][0][2]、a[0][2][0][3]、
a[0][2][1][0]、a[0][2][1][1]、a[0][2][1][2]、a[0][2][1][3]、
a[1][0][0][0]、a[1][0][0][1]、a[1][0][0][2]、a[1][0][0][3]、
a[1][0][1][0]、a[1][0][1][1]、a[1][0][1][2]、a[1][0][1][3]、
a[1][1][0][0]、a[1][1][0][1]、a[1][1][0][2]、a[1][1][0][3]、
a[1][1][1][0]、a[1][1][1][1]、a[1][1][1][2]、a[1][1][1][3]、
a[1][2][0][0]、a[1][2][0][1]、a[1][2][0][2]、a[1][2][0][3]、
a[1][2][1][0]、a[1][2][1][1]、a[1][2][1][2]、a[1][2][1][3]、
3. 给定整型数组b[3][5],已知每个元素占2个字节,b[0][0]的存储地址为1200,试求在行
序为主序的存储方式下:(1) b[2][4]的存储地址。(2) 该数组占用的字节个数。
答:(1)loc(b[2][4])= loc(b[0][0])+(2*5+2)*2=1200+24=1224
应该是:loc(b[2][4])= loc(b[0][0])+(2*5+4)*2=1200+28=1228(2)3*5*2=30
4. 已知数组A[8][10],问按列存储数组元素时A[4][6]的起始地址与数组A按行存储时的哪
一个元素的起始地址相同?稀疏矩阵的压缩存储有哪两种方法?
答:(1)假定每个元素占L个存储单元,按列存储时loc(A[4][6])= loc(A[0][0])+(8*6+4)*L,
设其与数组A按行存储时的A[i][j]的起始地址相同,则
loc(A[0][0])+(8*6+4)*L = loc(A[0][0])+(10*i+j)*L
即8*6+4=10*i+j
所以i=5,j=2
也就说,数组A[8][10]按列存储数组元素时A[4][6]的起始地址与数组A按行存储时A[5][2]的起始地址相同。(2)稀疏矩阵的压缩存储有三元组表和十字链表两种存储方法。
5. 什么是稀疏矩阵的三元组表存储?试写出以下矩阵A的三元组顺序表。答:存储稀疏矩阵非零元素的值、所在行和列,以及稀疏矩阵非零元素的个数、行数、列数的顺序存储叫稀疏矩阵的三元组表存储。
矩阵A的三元组顺序表为:
A=( (4,6,5), (1,3,1), (1,5,2), (2,1,3), (3,4,4), (4,2,5) )
(用A[0]存储稀疏矩阵行数、列数、非零元个数)
6. 设A是一个具有m 行n列的元素的二维数组,每个元素占用s 个存储单元, Loc(aij )为元素aij 的存储地址,Loc(a00 ) 是a00存储位置, 也是二维数组A的基址。若以行序为主序的方式存储二维数组,则元素aij 的存储位置是什么?若以列序为主序的方式存储二维数组,则元素aij 的存储位置又是什么?
答:若以行序为主序的方式存储二维数组,则元素aij 的存储位置为:Loc(aij ) = Loc(a00 ) +(ni+j ) s
若以列序为主序的方式存储二维数组,则元素aij 的存储位置为:Loc(aij ) = Loc(a00) +(mj+i ) s
7. 什么是字符串?它和线性表有什么联系和区别?
答:字符串(简称串)是一种特殊的线性表,它的数据元素仅由一个字符组成。
字符串的逻辑结构、存储结构和线性表一样,除第一个元素外,其它每一个元素有一
个且仅有一个直接前驱,除最后一个元素外,其它每一个元素有一个且仅有一个直接后继,它通常采用的存储方式也是顺序存储和链式存储。字符串和线性表的区别仅在于,线性表中的数据元素可以是任意数据,而字符串中的数据元素只能是一个字符。
8. 什么是三角矩阵?如何将三角矩阵存储到一个一维数组中?
答:以主对角线划分,三角矩阵有上三角和下三角两种。上三角矩阵如图所示,它的下三角(不包括主对角线)中的元素均为常数。下三角矩阵正好相反,它的主对角线上方均为常数,如图所示。在大多数情况下,三角矩阵常数为零。a00   a01  …    a0n-1           a00      c      …   cc     a11  …    a1n-1           a10     a11     …   c…………………..                     ………………..c     …    c   an-1n-1          an-10     an-11   …   an-1n-1       (a)上三角矩阵                    (b)下三角矩阵
三角矩阵中的重复元素c可共享一个存储空间,其余的元素正好有n(n+1)/2个,因此,三角矩阵可压缩存储到一维数组sa[0..n(n+1)/2]中,其中c存放在数组的最后一个分量中。
上三角矩阵中,主对角线之上的第p行(0≦p<n)恰有n-p个元素,按行优先顺序存放上三角矩阵中的元素aij时,aij之前的i行一共有个元素,在第i行上,aij前恰好有j-i个元素:aii,aii+1,…,aij-1。因此,sa[k]和aij的对应关系是:当i≦j   k= i(2n-i+1)/2+j-i  当i>j    k=n(n+1)/2
下三角矩阵的存储和对称矩阵类似,sa[k]和aij对应关系是:当i≧j    k=i(i+1)/2+j   当i<j     k=n(n+1)/2

思维导图

第六章 树与二叉树

考试大纲

1)理解树的基本概念和基本操作,树的抽象数据类型。
2)理解二叉树的概念和性质,特殊二叉树及二叉树的存储结构;
3)掌握遍历二叉树:前序遍历,中序遍历,后序遍历,层次遍历。
4)掌握线索二叉树的概念和存储结构,二叉树的线索化的方法,线索二叉树的遍历方法。
5)理解树的存储结构;
6)掌握树与二叉树之间的转换,森林与二叉树之间的转换,森林的遍历方法。
7)掌握树的路径长度和带权路径长度的计算方法;
8)理解赫夫曼树(Huffman)的概念,并掌握哈夫曼算法, 哈夫曼编码树的构造方法。
具体要求:
掌握上述2)-8)基本概念相关的所有数据演示过程及相关计算,例如给定节点权值构造赫夫曼树、计算带权路径长度并给出赫夫曼树编码,给定二叉树构造出某种线索二叉树等等;
掌握二叉树的二叉链表存储方式下的先序、中序、后序遍历的算法、二叉树的叶子结点计数算法、节点计数的算法等。

考察要点

1.树和二叉树的区别当只有一个子树时,二叉树有序,树无序。
例 度不大于二的树不是二叉树。
2. 几种特殊形态的二叉树
满二叉树、完全二叉树、排序二叉树、的概念及区别。
例:完全二叉树不是最优的二叉树
注意:还有哈夫曼树、二叉判定树、二叉排序树、平衡二叉树等等。

4.二叉树存储结构
顺序存储结构、二叉链存储结构、三叉链存储结构。
5.二叉树建立及其四种遍历方法
先、中、后序递归遍历及层次遍历,不仅要掌握遍历过程、会根据二叉树写出某种遍历结果,而且要会根据两种遍历结果(先序、中序或者中序、后序)画出二叉树。注意,给出先序和后序不能唯一地确定一棵二叉树。也即任意给出二叉树两种遍历结果不一定能把二叉树恢复出来。
例:已知一棵二叉树的先序遍历为cedba,中序遍历为debac,请画出该二叉树,并写出后序遍历结果6. 线索二叉树(中序、先序、后序)概念7.二叉树遍历的应用如写出二叉树结点个数、叶子结点个数、度为2的结点个数统计,二叉树深度计算,查找二叉树中结点(返回地址)算法(函数)等。例:设二叉树的数据类型为结构体类型datatype,给出二叉链表存储二叉树的结点类型定义,并写出统计二叉树t中结点总数的算法。
typedef struct node{ datatype data;struct node *lchild, *rchild;} bitree;
第一种方法(使用全局变量):
int n=0;
void tj(bitree *t)
{ if(t!=NULL){ n++;                   tj (t->lchild);        tj (t->rchild);        }
}
第二种方法(不用全局变量):
int tj (bitree *t){   if(t==NULL)   return 0;   else  return (1+ tj (t->lchild)+ tj (t->rchild));  }
8.哈夫曼树(最优二叉树)概念、总结点数(具有n个叶子结点的哈夫曼树有2n-1个结点)、构造、哈夫曼编码、WPL值计算
例:设给定一个权值集合W=(1,3,5,8,10,11),要求根据给定的权值集合构造一棵哈夫曼树并计算哈夫曼树的带权路径长度WPL
假设用于通讯的电文由6个字母{A,B,C,D,E,F}组成,各字母在电文中出现的频率分别为7,19,5,6,32,3,试为这6个字母设计哈夫曼树并写出对应的哈夫曼编码。约定频率小的在左边,大的在右边。
9.树的存储结构、遍历(无中序)及树转化为二叉树
树的存储结构:双亲表示法、双亲孩子表示法、孩子-兄弟表示法; 树转化为二叉树后,相应的二叉树根结点无右子树;当以二叉链表作树的存储结构时,树的先根遍历可借用二叉树的先根遍历的算法实现,树的后根遍历可借用二叉树的中序遍历的算法实现等。
例:树是图的一种特殊情况;
对树而言,不合适的遍历是中序;
把任一棵树转化为二叉树,该二叉树的右子树必空;
森林F中有三棵树,节点数目分别为m1、m2、m3,与F对应的二叉树结构的根节点的右子树的节点数为m2+m3;
用孩子兄弟法存储树时,树的先序遍历结果与其对应的二叉树的先序遍历结果相同,树的后
序遍历结果与其对应的二叉树的中序遍历结果相同。

思维导图

课后习题【二叉树部分】






课后习题【树】






第八章 图

考试大纲

1)理解图的基本概念和基本操作,图的抽象数据类型、有向图、无向图等概念。
2)掌握图的存储结构:数组表示法(邻接矩阵);邻接表,逆邻接表,十字链表;
3)掌握图的遍历:深度优先搜索法, 宽度优先搜索法, 求图的连通分量。
4)理解生成树、最小生成树的概念,并掌握克鲁斯卡尔(Kruskal)算法,普里姆(Prim)算法构造最小生成树的方法。
5)掌握从一个顶点到其余各顶点的最短路径。
具体要求:
掌握上面2)-5)相关的各算法的数据演示方法;
掌握在邻接矩阵存储方式下和邻接表方式下,图的深度优先搜索算法和图的广度优先搜索算法。

考察要点

1.  图的概念
图和树的区别,四种图——有向图、无向图、有向网、无向网的区别;在一个具有n个顶点的无向完全图中,所含的边数为n*(n-1)/2,有n个顶点的强连通图最多有n(n-1)条边(有向边、弧),最少有n条边等。
2.图的邻接矩阵、邻接链表存储结构
如n个顶点e条边的无向图的邻接表的存储中,表头结点的个数是n,边结点的个数是2e;无向图的邻接矩阵具有对称性;带权有向图G用邻接矩阵A存储,则顶点i的入度等于A中第i列非∞且非0的元素个数,顶点i的出度等于A中第i行非∞且非0的元素个数;从有向图中删除一条边<i,j>,其邻接矩阵第i行第j列要改为0;从无向图中删除一条边(i,j),其邻接矩阵的第i行第j列和第j行第i列都要改为0;已知一个有向图的邻接矩阵,要想删除所有以第i个顶点为起始点的弧,应该将邻接矩阵的第i行置零;设有向图G中有n个顶点和e条边,则其对应的邻接表中有e个边结点等。
3.图的遍历
深度和广度遍历,分别用栈和队列实现。
例:图的广度优先搜索利用队列实现;
图的深度优先搜索遍历算法要用栈来实现;
画出图邻接矩阵存储结构,并根据邻接矩阵写出从顶点A开始分别进行深度优先搜索遍历和广度优先搜索遍历的结果;
画出图的邻接链表存储结构,并写出根据该邻接链表从顶点A开始进行深度优先搜索和广度优先搜索遍历的结果。
4.最小生成树的概念及Prim和Kruskal两种方法生成最小生成树过程
最小生树不是边最少的生成树,而是所有n-1 条边的权值之和最小的生成树。若这个连通图有n个顶点,则它的生成树有n-1条边;如果含n个顶点的图形形成一个环,则它有n棵生成树;普里姆(Prim)算法适合于边稠密网;克鲁斯卡尔(Kruskal)算法适合于边稀少的网。图的最小生成树的形状可能不唯一。
不仅要会根据网图由Prim或Kruskal方法生成最小生成树,而且要会根据(V,E)(顶点集合V={1,2,3,…}和边集合E={(1 2) 8,(2 3) 5,…}由Prim或Kruskal方法从某顶点开始构造生成最小生成树。Prim算法的时间复杂度为O(n2)。
5.求最短路径的Dijksta和Floyd方法
迪杰斯特拉(Dijkstra)算法求最短路径的的基本思想是按路径长度(这里的路径长度指路径上边或者弧的权值之和)递增的次序产生最短路径,其时间复杂度为O(n2)。Floyd方法时间复杂度为O(n3)。要弄清求最短路径的过程。

思维导图

课后习题【图基础】









课后习题【图应用】









补充

  • 考试基本考图的基本概念,应用部分考图的存储(邻接表和邻接矩阵)、图的深度和广度遍历以及对应的生成树、克鲁斯卡尔和普利姆算法构造最小生成树的过程、迪杰斯特拉求最短路径、拓扑排序序列。

第九章 排序

考试大纲

1)理解排序的稳定性、比较关键字次数、移动记录次数等排序概念。
2)交换排序:冒泡排序,快速排序。
3)插入排序:直接插入排序,希尔排序。
4)选择排序:直接选择排序,堆排序。
5)归并排序。
6)掌握各种排序算法的特征评价,了解其应用。
具体要求:
掌握2)-5)各种排序方法的数据演示过程和特点、时间复杂度及空间复杂度;
掌握冒泡排序、直接插入排序、直接选择排序、快速排序的算法。

考察要点

1、重点掌握各种排序方法(直插、折半插入、希尔、冒泡、快速、简选、堆排、二路归并, 基数排序了解)的排序过程及其特点(时间复杂度、稳定性、空间复杂度),尤其要弄清直插、冒泡、快速和堆排序。
2、如要知道排序按记录的次关键码进行,一般应选择稳定的排序方法;堆排序属于选择排序;在待排序的元素序列基本有序的前提下,效率最高的排序方法是直接插入排序和冒泡排序;直接插入排序、折半插入排序的效率与初始数据有关;快速、堆、冒泡、希尔排序算法中,空间复杂度最大的是快速排序;既稳定又省时间的排序算法是归并排序;冒泡排序在某一趟排序过程中若不存在交换就不需要下一趟排序了(就应退出循环)。会写直接插入排序、冒泡排序(升序或者降序,不特别指明为升序)等基本算法。给出一组数据,会写出初始堆(大顶堆或小顶堆,不特别指明为小顶堆)等。
例:稳定的排序方法是指在排序中,关键字值相等的不同记录间的前后相对位置保持不变;
直接选择排序是一种不稳定的排序方法。
3、设有1000个无序的数据元素,希望用最快的速度找到前10个最大元素,最好选用堆排序;
4、在已知待排序文件已基本有序的前提下,效率最高的排序方法是直接插入排序;
5、若排序按记录的次关键码进行,一般应选择稳定的排序方法;
6、希尔排序法、快速排序法、堆排序法和二路归并排序法四种排序法中,要求辅助空间最多的是二路归并;
7、若需要在O(nlogn)的时间内完成对一组数的排序,且要求排序是稳定的,则可选择的排序方法是归并排序。
8、对n个元素采取冒泡排序,最少的比较次数是n-1;
9、用堆排序实现升序排列时,建立的初始堆必须是大顶堆;
10、对于一组给定的关键字{49,38,27,15,94,53},写出以第一个关键字作为基准元素运用快速排序方法进行升序排序时第一次划分的结果,如果要实现排序,共需进行几次划分;

思维导图

课后习题

一.填空题
1. 稳定的排序方法是指在排序中,关键字值相等的不同记录间的前后相对位置 不变 。
2. 希尔排序法、快速排序法、堆排序法和二路归并排序法四种排序法中,要求辅助空间最多的是 二路归并排序 。
3. 分别采用堆、快速、插入、归并排序法对初始状态为递增序列的表按递增顺序排序,最费时的是 快速 算法。
4. 在直接插入、冒泡、快速排序和简单选择排序方法中,平均时间复杂度最低的排序方法是 快速排序 。
5. 快速排序的平均时间复杂度为 O(nlog2n) 。
6. 具有12个记录的序列,采用冒泡排序最少的比较次数是 11 。
7. 设有1000个无序元素,希望用较快速度挑选出其中前10个最大元素,在快速排序,堆排序,基数排序,直接插入,归并排序这些方法中,采用 堆排序 方法最好。
8. 外排序的基本方法是 归并 。
9. 快速排序的最坏情况,其待排序的初始排列是 已经按其排序码从小到大排好序 。
10. 分别采用堆、快速、插入、归并排序法对初始状态为递增序列的表按递增顺序排序,最费时的是 快速 算法。
11. 对n个元素按某关键字用堆排序方法由小到大排序,应使用 大 顶堆。
12. 内排序指待排序列 在内存中 所进行的排序。
13. 外排序指排序过程中需访问 外存 的排序。
14. 在直接插入、冒泡、快速排序和简单选择排序方法中,具有稳定性的排序方法有 直接插入、冒泡 。
15. 在冒泡、快速、直接插入三种排序方法中,排序的趟数与数据表的初始排列顺序无关的是 直接插入 排序方法。
16. 当数据表初态基本有序的情况下,在冒泡、快速和简单选择排序方法中应选择 冒泡 排序方法,从而使得排序的趟数最少。
二.简答题
1. 对于一组给定的关键字{49,38,27,15,94,53},写出以第一个关键字作为基准元素
运用快速排序方法进行升序排序时第一次划分的结果,如果要实现排序,共需进行几次划分
答:第一次划分的结果为:[15  38  27]  49  [94  53]
要实现排序,共需进行4次划分。
2. 什么是排序算法的稳定性?举出一个稳定的排序算法和不稳定的排序算法的例子。
答:排序算法的稳定性是指待排序范围中多个关键字值相同的记录,使用某种排序算法进行排序后其相对次序与排序前相比没有改变。冒泡排序算法只进行元素间的顺序移动,所以是一个稳定的排序方法,而快速排序就是一种不稳定的排序方法(可用3,2,2'序列来验证)。 3. 对于一组给定的关键字{49,38,27,15,94,53,81},写出用冒泡排序法进行升序排列的各趟结果。
答:
初始状态  49  38  27  15  94  53  81
第一趟   38  27  15  49  53  81  94
第二趟   27  15  38  49  53  81  94
第三趟   15  27  38  49  53  81  94
第四趟   15  27  38  49  53  81  944. 设一组初始记录关键字序列为(19,21,16,5,18,23),要求给出以19为基准的一趟快速排序结果以及第2趟直接选择排序后的结果。
答:(1)[18  5  16]  19  [21  23](2)5,16, 21, 19,18,235. 对于一组给定的关键字序列{58,12,33,20,65,77},分别写出用冒泡排序法和快速排序法进行升序排列的各趟结果。
答:
冒泡排序各趟结果:
初始状态  58  12  33  20  65  77
第一趟   12  33  20  58  65  77
第二趟   12  20  33  58  65  77
第三趟   12  20  33  58  65  77
结果   12  20  33  58  65  77快速排序各趟结果:
初始状态    58  12  33  20  65  77
第一趟     [20  12  33]  58  [65  77]
分别快速排序 [12]  20  [33]  58    65  [77]
结果        12  20   33  58  65   776. 对于给定的一组数据:3、6、1、2、4、5,请分别写出直接插入排序和快速排序的各趟
运行结果
答:
直接插入排序各趟结果:初态     [3]  6  1  2  4  5
第一趟     [3  6]  1  2  4  5
第二趟     [1  3  6]  2  4  5
第三趟     [1  2  3  6]  4  5
第四趟     [1  2  3  4  6]  5
第五趟     [1  2  3  4  5  6]  快速排序各趟结果:
初始状态    3   6   1   2   4  5
第一趟     [2  1]   3   [6  4  5]
分别快速排序 [1]  2   3   [5  4]  6
对[5 4]快速排序 1   2   3   [4]  5  6
结果         1   2   3   4   5  67. 对于一组给定的关键字序列{58,12,33,20,65,77},分别写出用冒泡排序法和简单选择排
序法进行升序排列的各趟结果。
答:
冒泡排序各趟结果:
初始状态  58  12  33  20  65  77
第一趟   12  33  20  58  65  77
第二趟   12  20  33  58  65  77
第三趟   12  20  33  58  65  77简单选择排序各趟结果:
初始状态  58  12  33  20  65  77
第一趟   12  58  33  20  65  77
第二趟   12  20  33  58  65  77
第三趟   12  20  33  58  65  77
第四趟   12  20  33  58  65  77
第五趟   12  20  33  58  65  778. 对于一组给定的关键字{53,87,12,61,35,48},写出分别用直接插入法和简单选择法进行升序排列的各趟结果
答:
直接插入排序各趟结果:初态     [53]  87  12  61  35  48
第一趟     [53  87]  12  61  35  48
第二趟     [12  53  87]  61  35  48
第三趟     [12  53  61  87]  35  48
第四趟     [12  35  53  61  87]  48
第五趟     [12  35  48  53  61  87] 简单选择排序各趟结果:初态     53  87  12  61  35  48
第一趟     [12]  87  53  61  35  48
第二趟     [12  35]  53  61  87  48
第三趟     [12  35  48]  61  87  53
第四趟     [12  35  48  53]  87  61
第五趟     [12  35  48  53  61]  879. 对于一组给定的关键字{53,87,12,61,35,48},写出分别用冒泡排序法和直接插入排序法
进行升序排列的各趟结果
答:
冒泡排序各趟结果:初态     53  87  12  61  35  48
第一趟     53  12  61  35  48  87
第二趟     12  53  35  48  61  87
第三趟     12  35  48  53  61  87
第四趟     12  35  48  53  61  87直接插入排序各趟结果:
初态     [53]  87  12  61  35  48
第一趟   [53  87]  12  61  35  48
第二趟   [12  53  87]  61  35  48
第三趟   [12  53  61  87]  35  48
第四趟   [12  35  53  61  87]  48
第五趟   [12  35  48  53  61  87] 10. 对于一组给定的关键字{53,87,12,61,35,48},写出分别用冒泡排序法和直接插入排序法
进行降序排列的各趟结果。
答:
冒泡排序各趟结果:初态     53  87  12  61  35  48
第一趟     87  53  61  35  48  12
第二趟     87  61  53  48  35  12
第三趟     87  61  53  48  35  12直接插入排序各趟结果:
初态      [53]  87  12  61  35  48
第一趟    [87  53]  12  61  35  48
第二趟    [ 87  53  12]  61  35  48
第三趟    [ 87  61  53  12]  35  48
第四趟    [ 87  61  53  35  12]  48
第五趟    [ 87  61  53  48  35  12] 11. 对于一组给定的关键字序列{45,19,81,58,12,33,20,65,77,28},写出用简单选择排序法进行降序排列的各趟结果。
答:
初始状态     45  19  81  58  12  33  20  65  77  28
第一趟       81  19  45  58  12  33  20  65  77  28
第二趟       81  77  45  58  12  33  20  65  19  28
第三趟       81  77  65  58  12  33  20  45  19  28
第四趟       81  77  65  58  12  33  20  45  19  28
第五趟       81  77  65  58  45  33  20  12  19  28
第六趟       81  77  65  58  45  33  20  12  19  28
第七趟       81  77  65  58  45  33  28  12  19  20
第八趟       81  77  65  58  45  33  28  20  19  12
第九趟       81  77  65  58  45  33  28  20  19  1212. 对于一组给定的关键字序列{45,19,81,58,12,33,20,65,77,28},写出用直接插入排序法
进行降序排列的各趟结果。
答:
初始状态     [45]  19  81  58  12  33  20  65  77  28
第一趟       [45  19]  81  58  12  33  20  65  77  28
第二趟       [81  45  19]  58  12  33  20  65  77  28
第三趟       [81  58  45  19]  12  33  20  65  77  28
第四趟       [81  58  45  19  12]  33  20  65  77  28
第五趟       [81  58  45  33  19  12]  20  65  77  28
第六趟       [81  58  45  33  20  19  12]  65  77  28
第七趟       [81  65  58  45  33  20  19  12]  77  28
第八趟       [81  77  65  58  45  33  20  19  12]  28
第九趟       [81  77  65  58  45  33  28  20  19  12] 13. 对于一组给定的关键字序列{45,19,81,58,12},分别写出用直接插入排序法和快速排序
法进行降序排列的各趟结果
答:
直接插入排序各趟结果:
初始状态  [45]  19  81  58  12
第一趟    [45  19]  81  58  12
第二趟    [81  45  19]  58  12
第三趟    [81  58  45  19]  12
第四趟    [81  58  45  19  12 ]快速排序各趟结果:
初始状态    45  19  81  58  12
第一趟     [58  81]  45  [19  12]
分别快速排序  [81]  58  45  19  [12]结果       81  58  45  19  12 14. 对于一组给定的关键字序列{45,19,81,58,12},分别写出用直接插入排序法和快速排序法进行降序排列的各趟结果
答:
直接插入排序各趟结果:
初始状态  [45]  19  81  58  12
第一趟    [45  19]  81  58  12
第二趟    [81  45  19]  58  12
第三趟    [81  58  45  19]  12
第四趟    [81  58  45  19  12 ]快速排序各趟结果:
初始状态    45  19  81  58  12
第一趟     [58  81]  45  [19  12]
分别快速排序  [81]  58  45  19  [12]结果       81  58  45  19  12 15. 对于一组给定的关键字序列{45,19,81,58,12},分别写出用直接插入排序法和快速排序法进行升序排列的各趟结果。
答:
直接插入排序各趟结果:
初始状态  [45]  19  81  58  12
第一趟    [19  45]  81  58  12
第二趟    [19  45  81]  58  12
第三趟    [19  45  58  81]  12
第四趟    [12  19  45  58  81]快速排序各趟结果:
初始状态    45  19  81  58  12
第一趟     [12  19]  45  [58  81]
分别快速排序  12  [19]  45  58  [81]结果       12  19  45  58  81

补充【重点记忆】

第十章 查找

考试大纲

1)理解查找的概念,关键字比较次数,平均查找长度。
2)掌握顺序表的查找:顺序查找,折半查找。
3)掌握树表的查找:二叉排序树,二叉排序树的的概念和基本操作,二叉排序树的建立,二叉排序树其它操作实现;掌握平衡二叉树的概念。
4)掌握哈希(Hash)表的查找:哈希表的概念,哈希函数构造方法,哈希表的建立和查找方法,开放地址法及链地址法冲突处理方法及平均查找长度的计算方法。
具体要求:
掌握上述2)-4)相关的数据演示过程及平均查找长度的计算方法;
掌握在顺序存储的线性表上实施顺序查找和有序顺序表上实施折半查找的算法;掌握在二叉排序树中查找指定关键字的递归算法和非递归算法;掌握hash查找算法。

考察要点

1. 三种查找方法及其区别、比较
顺序查找          折半查找        分块查找
存储结构   顺序、链式           顺序          索引存储
有序性     有序、无序           有序          按块有序ASL        最大              最小             居中
时间复杂度    O(n)             O(log2n)         O(m+t)
如顺序查找平均比较次数等
2.使用折半查找前提、折半查找算法及其判定树有序、顺序存储。
例:折半查找只能在有序的顺序表上进行;
画出描述n=8(具有8个元素)的折半查找(即二分查找)过程判定树,并计算查找成功时的平均查找长度ASL(假定查找每个元素的概率相等);
对于一个具有100个元素的有序表,要用二分查找(即折半查找)查找某个元素,最多需要比较7 次。
折半查找其判定树应用,如有1000个元素最多比较多少次(10次)。
3. 排序二叉树(又称二叉排序树)的概念及其构造(插入)、查找、输出、删除某节点(还要保证其性质)例:如果在一棵二叉树中,每个结点的值都大于它的左子树上所有结点的值,而小于它的右子树上所有结点的值,这样的一棵二叉树称为排序二叉树(或二叉排序树)
依次输入关键字{50,28,73,91,56,18,34,86},画出所生成的二叉排序树,并写出其中序遍历序列。4. 哈希表构造及哈希查找过程
掌握常用哈希函数——直接定址法和除留余数法,常用处理冲突方法——线性探测法、二次探测法和拉链法及ASL计算。
例:在哈希函数H(k) = k % m(“%” 表示求余)中,一般来讲,m应取质数(素数);
设一组初始记录关键字集合为(25,10,8,27,32,68),哈希表地址区间为0~7,哈希函数H(k)=k mod 7,用线性探测再散列作为解决冲突的方法设计哈希表,将其内容填入下表(表1),并计算查找成功时的平均查找长度ASL;
表1(哈希表)
地址  0   1   2   3   4   5   6
关键字
设哈希表长m=14,哈希函数H(key)=key mod 11。表中已有四个记录:addr(15)=4,addr(38)=5,addr(61)=6,addr(84)=7,其余地址为空。若采用二次探测再散列处理冲突,关键字为49的记录的地址是9。
5.静态查找与动态查找的区别
看有无插、删操作。
例:
静态查找表与动态查找表的根本区别在于施加在其上的操作不一样

思维导图

课后习题

一.填空题
1. 折半查找(即二分查找)只能在 有序的顺序表 上进行。
2. 设有序查找表中有13个元素。采用折半查找方法进行查找,查找成功时最少比较 1
次,最多比较 4 次。
3. 如果在一棵二叉树中,每个结点的值都大于它的左子树上所有结点的值,而小于它的右子
树上所有结点的值,这样的一棵二叉树称为 二叉排序树 。
4. 在顺序表(8,11,15,19,25,26,30,33,42,48,50)中,用二分(折半)法查找关键码值20,需做的关键码比较次数为 4 。
5. 己知有序表为(12,18,24,35,47,50,62,83,90,115,134)当用二分法查找18 时,需 4 次查找成功。
6. 已知一棵二叉排序树,通过 中序遍历 ,可得到结点的有序序列。
7. 设一哈希表表长M为100 ,用除留余数法构造哈希函数,即H(K)=K MOD P(P<=M),  为使函数具有较好性能,P应选 质数 。
8. 不包括对数据元素的插入和删除操作的查找称为 静态 查找。
9. 包括对数据元素的插入和删除操作的查找称为 动态 查找
10. 分块查找的前提是 块间有序 。
11. 根据元素的关键码确定元素存储位置的存储方式叫 散列 存储。
12. 在哈希查找中,元素关键字值与其在哈希表中存放位置的对应关系称为 哈希函数 。
13. 在哈希查找中,不同关键字值对应到同一哈希地址上的现象称为 冲突 。
14. 在有序表(41,62,75,77,82,95,100)上进行二分查找,查找关键字为82的数据元素需要
比较的次数是 3 次。
15. 在结点数确定的二叉排序树上进行查找的平均查找长度与二叉树的形态有关,最好的情况是二叉排序树为 平衡二叉树 树的时候。











------------------------------------------------------------------>END

西安理工大学计算机考研数据结构863整理总结相关推荐

  1. 西安理工大学计算机考研难吗,西安理工大学考研难吗?一般要什么水平才可以进入?...

    原标题:西安理工大学考研难吗?一般要什么水平才可以进入? 西安理工大学考研难吗?其实并不能一概而论.要看我们每个学生的实际情况.例如:本科院校是哪个层级的,专业考取是否为跨专业?专业是否是热门学科?学 ...

  2. 西安理工大学计算机考研专业课真题答案,2021西安理工大学考研历年真题

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 来源:http://fangcai.100xuexi.com/Ebook/DigitalLibrary/BookNew.aspx?BookName=%u8 ...

  3. 西安理工大学计算机考研大纲,2021西安理工大学考研大纲参考书目汇总

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 来源:http://fangcai.100xuexi.com/Ebook/DigitalLibrary/BookNew.aspx?BookName=%u8 ...

  4. 西安理工大学 计算机考研不分专硕学硕吗,2021年西安理工大学计算机科学与工程学院考研专业目录_研究生考试范围 - 学途吧...

    不限 (学硕)(0101)哲学 (学硕)(0201)理论经济学 (学硕)(0202)应用经济学 (专硕)(0251)金融硕士 (专硕)(0252)应用统计硕士 (专硕)(0253)税务硕士 (专硕)( ...

  5. 西安理工大学-计算机学院-(863)电子信息-19年真题及答案

    如需其他历年真题,请私聊我.

  6. 考研计算机874数据结构知识整理 Apare_xzc

    考研计算机874数据结构知识整理Apare_xzc for zcy勇哥 2020.11.17 一.题目类型 10道填空题 4道综合题 2道算法题(出自历年期末考试,主要考链表和二叉树) 二.综合题的考 ...

  7. 南京理工大学计算机专业考研,2020南京理工大学计算机考研初试科目、参考书目、复试详情汇总...

    原标题:2020南京理工大学计算机考研初试科目.参考书目.复试详情汇总 本文将由新祥旭徐老师全方位的对南京理工大学计算机专业考研进行解析,主要有以下几个板块:学院介绍,专业情况介绍,2019录取情况分 ...

  8. 2021武汉理工大学计算机考研复试经验分享(最新版)

    2021武汉理工大学计算机考研复试经验分享 简介    最近,刚刚结束了期末考试回家,也是陆陆续续接到群里面的很多好友询问一些关于复试的要求和准备方法.最近我也是将以前复试的资料和我当时做的一些准备工 ...

  9. 计算机算法基础_考情分析|2020年华南理工大学计算机考研考情分析

    这段时间会给大家各大院校20考研数据,2020华南理工大学计算机考研的初试数据如下: 计算机科学与工程学院 初试:一.408计算机学科专业基础综合 科目:数据结构.计算机组成原理.操作系统.计算机网络 ...

最新文章

  1. 硬铺路、软筑墙:三星移动在中国的新路径
  2. 我的C++笔记(数据的共享与保护)
  3. 关于mysql中int(1)中int后面的数字
  4. Karush-Kuhn-Tucker (KKT条件)
  5. 用Springboot实现文件下载功能
  6. AngularDart 现已全面采用 Dart 开发
  7. CursorLoader的进级实践
  8. mysql手工注入imformation_mysql 简单手工注入
  9. 混淆Android JAR包的方法
  10. 今天给同学写5个数据结构算法的题...感觉很有价值的几个题..感兴趣的坐下。。...
  11. 机器学习——第一回视频总结
  12. 没有什么能难倒程序员,教你如何下载付费歌曲
  13. Xcode5 symbolicatecrash文件路径
  14. PowerDesigner下载安装教程
  15. 功能测试VS性能测试
  16. 如何使用javascript制作一个网页端3D贪吃蛇游戏(附源码及链接)
  17. ubuntu1804安装mysql5.7教程
  18. iOS 设置模拟器支持定位功能
  19. 理光Ricoh MP C3002 一体机驱动
  20. mavlink协议详解_MAVLink学习之路05_ MAVLink应用编程接口分析

热门文章

  1. 采集微信公众号数据的思路
  2. Ztree Fa-Awesome 图标使用
  3. 20200107笔记
  4. R语言 by()用法
  5. 下载到的电子书格式是Mobi,这种格式能否在手机上打开?
  6. 【校招VIP】前端JS语言之语法相关
  7. 计算机三级上机场,自学通过计算机二级、三级、四级,保研天津大学,证书拿到手软!你被中航大男神圈粉了吗?...
  8. unixprocess+java+186_interproscan 的使用和遇到的问题
  9. 江湖有故人!欢迎来到程序员的江湖
  10. matlab求基音频率,语音中提取基音频率matlab程序.doc