数据结构C语言版章节练习题16章活动zaWord文档下载推荐.docx
《数据结构C语言版章节练习题16章活动zaWord文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数据结构C语言版章节练习题16章活动zaWord文档下载推荐.docx(18页珍藏版)》请在冰豆网上搜索。
.一个数组所占有的存储空间的大小即数组长度为,下标为的元素[]的存储地址为,或者为。
.从一维数组[]中顺序查找出一个最大值元素的进度复杂度为,输出一个二维数组[][]中所有元素值的进度复杂度为。
.在下面程序段中,语句的执行次数为,*语句的执行次数为,该程序段的进度复杂度为。
(<
){
(<
)*;
.一个算法的进度复杂度为()(),其数量级表示为。
第二章线性表
.在一个长度为的顺序存储线性表中,向第个元素(≤≤)之前插入一个新元素时,需要从后向前依次后移个元素。
、、、、
.在一个长度为的顺序存储线性表中,删除第个元素(≤≤)时,需要从前向后依次前移元素。
.在一个长度为的线性表中顺序查找值为的元素时,查找时的平均查找长度(即同元素的平均比较次数,假定查找每个元素的概率都相等)为。
、、、()、()
.在一个单链表中,若要向表头插入一个由指针指向的结点,则执行。
、;
>
、>
.在一个单链表中,若要在指针所指的结点的后面插入一个由指针所指的结点,则执行。
.在一个单链表中,若要删除由指针所指向结点的后继结点,则执行。
、>
>
.在线性表的单链式存储结构中,每个结点包含有两个域,一个叫域,另一个叫域。
.在下面数组中链式存储着一个线性表,表头指针为[],则该线性表为。
.对于一个长度为的顺序存储的线性表,在表头插入元素的进度复杂度为,在表尾插入元素的进度复杂度为。
.对于一个长度为的单链式存储的线性表,在表头插入元素的进度复杂度为,在表尾插入元素的进度复杂度为。
.在线性表的顺序存储中,若一个元素的下标为,则它的前驱元素的下标为,后继元素的下标为。
.在线性表的单链式存储中,若一个元素所在结点的地址为,则其后继结点的地址为,若假定为一个数组中的下标,则其后继结点的下标为。
.在循环单链表中,最后一个结点的指针指向结点。
.在双向链表中每个结点包含有两个指针域,一个指向其结点,另一个指向其结点。
.在循环双向链表中表头结点的左指针域指向结点,最后一个结点的右指针域指向结点。
.在以为表头指针的带表头结点的单链表和循环单链表中,链表为空的条件分别为和。
三、应用题
.在下面的每个程序段中,假定线性表的类型为,元素类型为,并假定每个程序段是连续执行的,试写出每个程序段执行后所得到的线性表。
()();
[]{};
(;
)([]);
();
()();
(,[]);
([]);
.对于类型的线性表,编写出下列每个算法。
()从线性表中删除具有最小值的元素并由函数返回,空出的位置由最后一个元素填补,若线性表为空则显示出错信息并退出运行。
()从线性表中删除第个元素并由函数返回。
()向线性表中第个元素位置插入一个元素。
()从线性表中删除具有给定值的所有元素。
.对于结点类型为的单链表,编写出下列每个算法。
()删除单链表中的第个结点。
()在有序单链表中插入一个元素的结点。
()从单链表中查找出所有元素的最大值,该值由函数返回,若单链表为空,则显示出错信息并停止运行。
()统计出单链表中结点的值等于给定值的结点数。
第三章栈和队列
.栈的插入与删除操作在进行。
、栈顶、栈底、任意位置、指定位置
.当利用大小为的一维数组顺序存储一个栈时,假定用表示栈空,则向这个栈插入一个元素时,需要执行语句修改指针。
.若让元素,,依次进栈,则出栈秩序不可能出现种情况。
、,,、,,、,,、,,
.在一个循环顺序队列中,队首指针指向队首元素的位置。
、前一个、后一个、当前、后面
.当利用大小为的一维数组顺序存储一个循环队列时,该队列的最大长度为。
.从一个循环顺序队列删除元素时,首先需要。
、前移一位队首指针、后移一位队首指针
、取出队首指针所指位置上的元素、取出队尾指针所指位置上的元素
.假定一个循环顺序队列的队首和队尾指针分别为和,则判断队空的条件是。
.假定一个链队的队首和队尾指针分别为和,则判断队空的条件是。
.队列的插入操作在进行,删除操作在进行。
.栈又称为表,队列又称为表。
.向一个顺序栈插入一个元素时,首先把待插入元素到这个位置上然后,使后移一个位置。
.从一个栈中删除元素时,首先前移一位,然后再取出。
.在一个循环顺序队列中,判断队空的条件为,判断队满的条件为。
.在一个顺序栈中,若栈顶指针等于,则为空栈。
若栈顶指针等于,则为满栈。
.在一个链栈中,若栈顶指针等于,则为。
在一个链队中,若队首指针与队尾指针的值相同,则表示该队列为。
.向一个链栈插入一个新结点时,首先把新结点的存储位置赋给,然后把栈顶指针指向。
.从一个链栈中删除一个结点时,需要把栈顶结点的值赋给。
.向一个顺序队列插入元素时,需要首先向插入新元素,然后再移动。
.当用长度为的一维数组顺序存储一个栈时,假定用表示栈空,则表示栈满的条件为。
.向一个栈顶指针为的链栈中插入一个新结点*果,应执行和操作。
.从一个栈顶指针为的非空链栈中删除结点并不需要返回栈顶结点的值和回收结点时,应执行操作。
.假定和分别为一个链队的队首和队尾指针,则该链队中只有一个结点的条件为。
执行下面函数调用后得到的输出结果是什么?
()
{
[]{};
(());
(())(“”());
第四章稀疏矩阵和广义表
.在稀疏矩阵的带行指针向量的链接存储中,每个行单链表中的结点都具有相同的。
、行号、列号、元素值、地址
.在一个稀疏矩阵中,每个非零元素所对应的三元组包括该元素的、和三项。
.在稀疏矩阵所对应的三元组线性表中,每个三元组元素按为主序、为辅序的秩序排列。
.在初始化一个稀疏矩阵的函数定义中,矩阵形参应说明为参数。
.在稀疏矩阵的顺序存储中,利用一个数组来存储非零元素,该数组的长度应对应三元组线性表的长度。
第五章树和二叉树
(一)
一、填空题
.对于一棵具有个结点的树,该树中所有结点的度数之和为。
.假定一棵三叉树的结点个数为,则它的最小深度为,最大深度为。
.在一棵三叉树中,度为的结点数有个,度为的结点数有个,度为的结点数为个,那么度为的结点数有个。
.一棵深度为的满二叉树中的结点数为个,一棵深度为的满三叉树中的结点数为个。
.假定一棵树的广义表表示为((()())),则树中所含的结点数为个,树的深度为,树的度为。
.假定一棵树的广义表表示为((()())),则度为、、、的结点数分别为、、和个。
.假定一棵树的广义表表示为((()())),则结点的双亲结点为,孩子结点为。
.在一棵二叉树中,假定双分支结点数为个,单分支结点数为个,则叶子结点数为个。
.对于一棵二叉树,若一个结点的编号为,则它的左孩子结点的编号为,右孩子结点的编号为,双亲结点的编号为。
.在一棵二叉树中,第层上的结点数最多为。
.假定一棵二叉树的结点数为,则它的最小深度为,最大深度为。
.一棵二叉树的广义表表示为(()(())),则结点的双亲结点为,左孩子结点为,右孩子结点为。
.一棵二叉树的广义表表示为(()(())),它含有双亲结点个,单分支结点个,叶子结点个。
.假定一棵二叉树顺序存储在一维数组中,则[]元素的左孩子元素为,右孩子元素为,双亲元素(>
)为。
.假定一棵二叉树顺序存储在一维数组中,但让编号为的结点存入[]元素中,让编号为的结点存入[]元素中,其余类推,则编号为结点的左孩子结点对应的存储位置为,若编号为结点的存储位置用表示,则其左孩子结点对应的存储位置为。
.若对一棵二叉树从开始进行结点编号,并按此编号把它顺序存储到一维数组中,即编号为的结点存储到[]中,其余类推,则[]元素的左孩子元素为,右孩子元素为,双亲元素(>
.对于一棵具有个结点的二叉树,对应二叉链表中指针总数为个,其中个用于指向孩子结点,个指针空闲着。
.一棵二叉树广义表表示为((())((()))),该树的结点数为个,深度为。
.假定一棵二叉树广义表表示为(()()),则对它进行的先序遍历结果为,中序遍历结果为,后序遍历结果为,按层遍历结果为。
.假定一棵普通树的广义表表示为(()(())),则先根遍历结果为,按层遍历结果为。
二、应用题
.已知一棵具有个结点的完全二叉树被顺序存储于一维数组的[][]元素中,试编写一个算法打印出编号为的结点的双亲和所有孩子。
.编写一算法,求出一棵二叉树中所有结点数和叶子结点数,假定分别用变参和统计所有结点数和叶子结点数,初值均为。
第六章二叉树的应用
(二)
.从二叉搜索树中查找一个元素时,其进度复杂度大致为。
、()、()、()、()
.向二叉搜索树中插入一个元素时,其进度复杂度大致为。
、()、()、()、()
.根据个元素建立一棵二叉搜索树时,其进度复杂度大致为。
.从堆中删除一个元素的进度复杂度为。
.向堆中插入一个元素的进度复杂度为。
.由权值分别为的叶子结点生成一棵哈夫曼树,它的带权路径长度为。
、、、、
.在一棵二叉搜索树中,每个分支结点的左子树上所有结点的值一定该结点的值,右子树上所有结点的值一定该结点的值。
.对一棵二叉搜索树进行中序遍历时,得到的结点序列是一个。
.从一棵二叉搜索树中查找一个元素时,若元素的值等于根结点的值,则表明,若元素的值小于根结点的值,则继续向查找,若元素的大于根结点的值,则继续向查找。
.在一个堆的顺序存储中,若一个元素的下标为,则它的左孩子元素的下标为,右孩子元素的下标为。
.在一个小根堆中,堆顶结点的值是所有结点中的,在一个大根堆中,堆顶结点的值是所有结点中的。
.当从一个小根堆中删除一个元素时,需要把元素填补到位置,然后再按条件把它逐层调整。
.已知一组元素为(),画出按元素排列顺序输入生成的一棵二叉搜索树。
.空堆开始依次向堆中插入线性表()中的每个元素,请以线性表的形式给出每插入一个元素后堆的状态。
.已知一个堆为(),若需要从堆中依次删除四个元素,请给出每删除一个元素后堆的状态。
.有七个带权结点,其权值分别为,试以它们为叶子结点构造一棵哈夫曼树,并计算出带权路径长度。
数据结构期末复习练习题答案
(仅供参考)
第一章绪论
......
.集合结构、线性结构、树型结构、图形结构.顺序、链式.、、
.数据定义、操作声明.引用形参(或指针形参).引用类型(或指针类型).实参、值
、、().()、*([])、
.参数类型、数量、秩序.、用户自定义.、、.()、(*)
.、()、().()
第二章线性表
.元素值、指针.().()、().()、()、
、[].表头.前驱、后继.表尾、表头
.>
、>
.()(,,,,,)
()(,,,,,)
()(,,,,,)
.,,,,,,)
.()(){
(()){空线性表
<
"
!
}
存放最小元素
[];
存放最小元素的下标
)查找最小元素
([]<
){[];
[][];
最后一个元素填补最小元素位置
线性表长度减
返回最小元素
)(,){
){判断的合法性
("
\”);
();
保存被删除元素
)元素向前移动
[][];
长度减
返回被删元素
()(,,){
\"
);
(){判断线性表满
("
)元素后移,产生插入位置
[];
元素插入
长度加
()(,){
([]){删除元素
寻找下一个元素的位置
.()(*,){
){判断的合法性或空链表
*,*;
指向当前结点,指向其前驱结点
()查找第个结点
()找到第个结点
指向的结点即为第个结点
{继续向后寻找
(){没有找到第个结点
()删除第个结点(即)
删除第个结点
释放被删除结点的空间
()(*,){
*;
申请一个新结点
(){分配失败
){空表或小于表头结点,
作为新表头结点插入
查找插入位置
*>
用指向当前结点(即待查结点)
用作为指向当前结点的前驱结点指针
);
找到插入位置
{;
}继续查找插入位置
插入新结点
()(*){
(){空表
(){寻找最大值
)>
()(*,){
(){
(>
);
第三章稀疏矩阵和广义表
..
.行号、列号、元素值.行号、列号.引用(或指针).等于.、.列号、行号.单、表.括号..元素值、子表指针.、
.()((),(),(),(),(),(),(),())
()
()((),(),(),(),(),(),(,),())
.():
长度:
深度:
():
第四章栈和队列
........
.队尾、队首.后进先出()、先进先出().栈顶指针、存储.栈顶元素、栈顶指针
.、().、
.栈空、空队、队列只有一个元素.新结点的指针域、栈顶指针.指针域、栈顶指针
.队尾指针、存储>
、.>
.()(<
).*
.()*(*())、
四、编程题
递归算法:
()终止递归条件
()();
非递归算法:
,;
代表当前项,和分别代表当前项前面的第项和第项
){
求当前项
产生第项
返回所求的第项
递归算法的进度复杂度为(),空间复杂度为()。
非递归算法的进度复杂度为(),空间复杂度为()。
第五章树和二叉树
、.、、、、、、、和.、、?
?
、、、空结点(即无右孩子结点).、、
.[*]、[*]、[].、.[*]、[*]、[]
、、、.、、、.、
.([],,){
编号为"
的结点不存在!
当前结点为"
[]<
下标为的结点是下标为结点的双亲
双亲:
树根没有双亲结点!
(*<
左孩子:
[*]<
右孩子:
(*){
无右孩子!
无孩子!
.(*,,){
统计所有结点数
统计叶子结点数
,);
.()
第六章二叉树的应用
.小于、大于等于
.按升序排列的有序序列
.找到、左子树、右子树
.、
.最小值、最大值
.堆尾、堆顶、向下
.
.初态:
空堆()
插入后:
()
(,)
(,,)
(,,,)
(,,,,)
(,,,,,)
(,,,,,,)
(,,,,,,,)
.初态堆:
删除第个元素后堆:
.哈夫曼树:
*******