复习题1.docx
- 文档编号:29562264
- 上传时间:2023-07-24
- 格式:DOCX
- 页数:15
- 大小:46.22KB
复习题1.docx
《复习题1.docx》由会员分享,可在线阅读,更多相关《复习题1.docx(15页珍藏版)》请在冰豆网上搜索。
复习题1
一、选择题
1-1下列关于数据和逻辑结构的叙述中,哪一个是不正确的()。
A)数据的逻辑结构是数据间关系的描述
B)数据的逻辑结构抽象反映数据元素间的逻辑关系
C)数据的逻辑结构具体反映数据在计算机中的存储方式
D)数据的逻辑结构分为线性结构和非线性结构
C
1-2以下关于数据的存储结构的叙述中哪一条是正确的()。
A)数据的存储结构是数据间关系的抽象描述
B)数据的存储结构是逻辑结构在计算机存储器中的实现
C)数据的存储结构分为线性结构和非线性结构
D)数据的存储结构对数据运算的具体实现没有影响
B
二、简答题
1-1数据结构的存储方式有哪几种?
1-2算法的时间复杂度仅与问题的规模相关吗?
1-1数据结构的存储方式有哪几种?
【解析】
常用的存储表示方法有四种:
1、顺序存储方法:
它是把逻辑上相邻的结点存储在物理位置相邻的存储单元里,结点间的逻辑关系由存储单元的邻接关系来体现。
由此得到的存储表示称为顺序存储结构,通常借助程序语言的数组描述。
2、链接存储方法:
它不要求逻辑上相邻的结点在物理位置上亦相邻,结点间的逻辑关系是由附加的指针字段表示。
由此得到的存储表示称为链式存储结构,通常借助于程序语言的指针类型描述。
3、索引存储方法:
除建立存储结点信息外,还建立附加的索引表来标识结点的地址。
组成索引表的索引项由结点的关键字和地址组成。
若每个结点在索引表中都有一个索引项,则该索引表称之为稠密索引(DenseIndex)。
若一组结点在索引表中只对应一个索引项,则该索引表称为稀疏索引。
4、散列存储方法:
就是根据结点的关键字直接计算出该结点的存储地址。
1-2算法的时间复杂度仅与问题的规模相关吗?
【解析】
算法的时间复杂度不仅与问题的规模相关,还与输入实例中的初始状态有关。
但在最坏的情况下,其时间复杂度就是只与求解问题的规模相关的。
我们在讨论时间复杂度时,一般就是以最坏情况下的时间复杂度为准的。
三、应用题:
分析以下程序段的时间复杂度。
inti,j,k;
for(i=0;i〈n;i++〉//①
for(j=0;j〈n;j++〉//②
{c[i][j]=0;//③
for(k=0;k〈n;k++〉//④
c[i][j]=c[i][j]+a[i][k]+b[k][j];//⑤
}
【解析】
语句①的循环控制变量i要增加到n,测试到i=n成立才会终止,故它的频度为n+1;
语句②作为语句①循环体内的语句应该执行n次,但语句②本身要执行n+1次,故语句②的频度是n(n+1);
同理可得语句③、④和⑤的频度分别是n2,n2(n+1)和n3。
该程序段所有语句的频度之和为:
T(n)=2n3+3n2+2n+1
其复杂度为O(n3)。
一、简答
1何时选用顺序表、何时选用链表作为线性表的存储结构为宜?
2在顺序表中插入和删除一个结点需平均移动多少个结点?
具体的移动次数取决于哪两个因素?
3为什么在单循环链表中设置尾指针比设置头指针更好?
4在单链表、双链表和单循环链表中,若仅知道指针p指向某结点,不知道头指针,能否将结点*p从相应的链表中删去?
若可以,其时间复杂度各为多少?
5下述算法的功能是什么?
LinkListDemo(LinkListL){
//L是无头结点单链表
ListNode*Q,*P;
if(L&&L->next){
Q=L;L=L->next;P=L;
while(P->next)P=P->next;
P->next=Q;Q->next=NULL;
}
returnL;
}//Demo
6、试描述头指针、头结点、开始结点的区别、并说明头指针和头结点的作用。
二、下列函数的功能是,对以带头结点的单链表作为存储结构的两个递增有序表(表中不存在值相同的数据元素)进行如下操作:
将所有在Lb表中存在而La表中不存在的结点插入到La中,其中La和Lb分别为两个链表的头指针。
请在空缺处填入合适内容,使其成为一个完整的算法。
voidunion(LinkListLa,LinkListLb){
/*本算法的功能是将所有Lb表中存在而La表中不存在的结点插入到La表中*/
LinkListpre=La,q;
LinkListpa=La->next;
LinkListpb=Lb->next;
free(Lb);
while(pa&&pb){
if(pa->data
{ pre=pa;pa=pa->next;}
elseif(pa->data>pb->data)
{
(1) ;
pre=pb;
pb=pb->next;
(2) ;
}
else{
q=pb;pb=pb->next;free(q);
}
}
if(pb)
(3) ;
}
(1)pre->next=pb;
(2)pre->next=pa;
(3)pre->next=pb;
三、已知一个线性表有n(n≤30)个元素,其中每个元素的数据占8个字节。
假设一个指针的大小为4个字节。
如果采用有30个元素的数组存储,那么当数组中有效元素个数n满足什么条件时,数组的存储效率比不带头结点的单链表更高。
数组总的空间240个字节,数组的效率为8n/240;链表的总空间为12n,效率为8n/12n。
故可得:
n〉20
四、画出执行下列各语句后各指针及链表的示意图。
L=(LinkList)malloc(sizeof(Lnode));
P=L;
for(i=1;i<=4;i++){
p->next=(LinkList)
malloc(sizeof(Lnode));
p=p->next;
P->data=i*2-1;}
P->next=NULL;
for(i=4;i>=1;i--)
InsertList(L,i+1,i*2);
for(i=1;i<=3;i++)
DeleteList(L,i);
2、顺序队列一般应该组织成为循环队列的形式,而且一般队列头或为队列尾其中之一虚指一位,满队列时实际上数组中还有一个空闲位置。
请分析这样设置的理由。
有利于判断队列是空还是满。
因为队列有n+2种状态:
空,1个元素,2个元素,…,n个元素,满。
但实际上rear只有n种可能的取值,故必须寻求其他途径解决队空和队满。
当然也有其他方法。
3、队列可以用循环单链表来实现,故可以只设置一个头指针或者只设置一个尾指针。
请分析对于循环单链表实现的队列,用那种方案更合适。
设置尾指针。
因为是循环单链表,设置尾指针,可以在O
(1)的时间内找到头;如果只设置头指针,要在O(n)时间内找到尾。
设置尾指针,入队和出队的时间复杂度均为O
(1),设置头指针,出队O
(1),入队O(n)。
一、单项选择题
1、由于二叉树中每个结点的度最大为2,所以二叉树是一种特殊的树,这种说法(A)正确(B)错误
2、某二叉树的先序遍历序列和后序遍历序列正好相反,则该二叉树一定是
(A)空或只有一个结点(B)完全二叉树
(C)二叉排序树(D)高度等于其节点数
3、深度为5的二叉树至多有多少个结点
(A)16(B)32(C)31(D)10
4、根据使用频率为5个字符设计的哈夫曼编码不可能是
(A)111,110,10,01,00
(B)000,001,010,011,1
(C)100,11,10,1,0
(D)001,000,01,11,10
二、填空题
1、树和二叉树的主要差别是,。
2、深度为k的完全二叉树至少有个结点,至多有个结点。
3、一棵二叉树的第i(i1)层最多有个结点;一棵有n(n>0)个结点的满二叉树共有个叶子结点和个非叶子结点。
1、
(1)每个结点最多有两棵子树;
(2)子树有左右之分
2、2k-1,2k-1,
3、2i-1,2log2n,n-2log2n
1、一棵度为2的树与一棵二叉树有何区别?
2、具有三个结点的树和具有三个结点的二叉树它们的所有不同形态有哪些?
3、请说明一棵二叉树进行先序、中序和后序遍历,其叶结点的次序是否会发生变化?
为什么?
1、解答:
度为2的树结点有两个分支,没有左右之分;一棵二叉树的结点也可有两个分支,但有左右之分,且左右不能交换。
3.解答:
二叉树中叶结点必在某结点的左或右子树中,三种遍历方法对左右子树的遍历都是按先左后右的原则进行。
所以在三种遍历序列中叶结点的相对次序是不会发生变化的。
4、假设一棵二叉树的结点数为33个,则它的最小高度为(),最大高度为()。
5、一个高度为h的满m叉树,第k层最多有()个结点,整棵树最多有()个结点。
4、最小高度为:
6,最大高度为:
33
5、第k层最多有mk-1,整棵树最多有(mk-1)/(m-1)
6、一个二叉树的对称序列和后序序列分别是DCBAEFG和DCBGFEA,请给出该二叉树的前序序列。
6、ABCDEFG
7有7个带权结点,其权值分别为4,7,8,2,5,16,30,以它们为叶子结点构造一颗哈夫曼树(要求按每个结点的左子树根结点的权值小于或等于右子树根结点的权值的次序构造),并计算出其带权路径长度WPL。
可得带权路径长度:
WPL=(2+4)×5+(5+7+8)×4+16×2+30×1=172
1、一个n个顶点的无向图最多有条边。
(A)n(B)n(n-1)(C)n(n-1)/2(D)2n
2、
(A)1/2(B)1(C)2(D)4
3.两种遍历算法。
1、设线性表(a1,a2,…,a500)元素的值由小到大排列,对一个给定的k值用折半法查找线性表,在查找不成功的情况下至多需比较次
1.log2n+1
2试述顺序查找法、折半查找法和分块查找法对被查找的表中元素的要求。
对长度为n的表来说,三种查找法在查找成功时的查找长度各是多少?
查找要求:
顺序查找法:
表中元素可以任意存放,(n+1)/2
折半查找法:
有序存放log2(n+1)-1
分块查找法:
分块有序(n/s+s)/2+1,b为块数,s为块中记录数
1.数据的基本单位是( C )
A.数据项 B.数据类型
C.数据元素 D.数据变量
2.下列程序的时间复杂度为( C )
i=0;s=0;
while(s {i++; s=s+i; } A.O() B.O() C.O(n) D.O(n2) 3.若某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则最节省运算时间的存储方式是( D ) A.单链表 B.仅有头指针的单循环链表 C.双链表 D.仅有尾指针的单循环链表 4.从一个长度为n的顺序表中删除第i个元素(1≤i≤n)时,需向前移动的元素的个数是( A ) A.n-i B.n-i+1 C.n-i-1 D.i 5.顺序栈S中top为栈顶指针,指向栈顶元素所在的位置,elem为存放栈的数组,则元素e进栈操作的主要语句为(C ) A.s.elem[top]=e; B.s.elem[top+1]=e; s.top=s.top+1; s.top=s.top+1; C.s.top=s.top+1; D.s.top=s.top+1; s.elem[top+1]=e; s.elem[top]=e; 6.循环队列sq中,用数组elem[0••25]存放数据元素,sq.front指示队头元素的前一个位置,sq.rear指示队尾元素的当前位置,设当前sq.front为20,sq.rear为12,则当前队列中的元素个数为( D ) A.8 B.16 C.17 D.18 8.含有10个结点的二叉树中,度为0的结点数为4,则度为2的结点数为(A ) A.3 B.4 C.5 D.6 10.有n个结点的有向完全图的弧数是( C ) A.n2 B.2n C.n(n-1) D.2n(n+1) 11.设图的邻接链表如题12图所示,则该图的边的数目是(B ) A.4 B.5 C.10 D.20 12.已知一个有序表为(13,18,24,35,47,50,62,83,90,115,134),当二分检索值为90的元素时,检索成功需比较的次数是( B ) A.1 B.2 C.3 D.4 13.排序算法中,第一趟排序后,任一元素都不能确定其最终位置的算法是( ) A.选择排序 B.快速排序 C.冒泡排序 D.插入排序 14.数据结构是( D ) A.一种数据类型 B.数据的存储结构 C.一组性质相同的数据元素的集合 D.相互之间存在一种或多种特定关系的数据元素的集合 15.算法分析的目的是( B ) A.辨别数据结构的合理性 B.评价算法的效率 C.研究算法中输入与输出的关系 D.鉴别算法的可读性 16.在线性表的下列运算中,不改变数据元素之间结构关系的运算是( D ) A.插入 B.删除 C.排序 D.定位 17.若进栈序列为1,2,3,4,5,6,且进栈和出栈可以穿插进行,则可能出现的出栈序列为( B ) A.3,2,6,1,4,5 B.3,4,2,1,6,5 C.1,2,5,3,4,6 D.5,6,4,2,3,1 18.二维数组A[8][9]按行优先顺序存储,若数组元素A[2][3]的存储地址为1087,A[4][7]的存储地址为1153,则数组元素A[6][7]的存储地址为( A ) A.1207 B.1209 C.1211 D.1213 19.在按层次遍历二叉树的算法中,需要借助的辅助数据结构是( A ) A.队列 B.栈 C.线性表 D.有序表 20.在任意一棵二叉树的前序序列和后序序列中,各叶子之间的相对次序关系(B ) A.不一定相同 B.都相同 C.都不相同 D.互为逆序 1.称算法的时间复杂度为O(f(n)),其含义是指算法的执行时间和___f(n)____的数量级相同。 2.假设为循环队列分配的向量空间为Q[20],若队列的长度和队头指针值分别为13和17,则当前尾指针的值为_10___。 3.一棵含999个结点的完全二叉树的深度为_______。 4.含n个顶点的无向连通图中至少含有______条边。 6.在数据结构中,数据的逻辑结构分为集合、________、树形结构和图状结构等四类。 7.顺序表的存储密度为________,而链表的存储密度为________。 是指一个结点中数据域所占的存储单元和整个结点所占的存储单元之比 8.对于栈只能在________插入和删除元素。 9.在循环队列中,存储空间为0~n-1,设队头指针front指向队头元素前一个空闲元素,队尾指针指向队尾元素,那么队满标志为front=(rear+1)%n,队空标志为________。 10.三个结点可构成________种不同形态的二叉树。 1.若对具有n个元素的有序的顺序表和无序的顺序表分别进行顺序查找,试在下述两种情况下分别讨论两者在等概率时的平均查找长度: (1)查找不成功,即表中无关键字等于给定值K的记录; (2)查找成功,即表中有关键字等于给定值K的记录。 答: 查找不成功时,需进行n+1次比较才能确定查找失败。 因此平均查找长度为n+1,这时有序表和无序表是一样的。 查找成功时,平均查找长度为(n+1)/2,有序表和无序表也是一样的。 因为顺序查找与表的初始序列状态无关。 2.给出树如下图所示,请写出先序遍历和中序遍历的节点次序。 3.一棵度为2的有序树与一棵二叉树有何区别? 答: 一棵度为二的有序树与一棵二叉树的区别在于: 有序树的结点次序是相对于另一结点而言的,如果有序树中的子树只有一个孩子时,这个孩子结点就无须区分其左右次序,而二叉树无论其孩子数是否为2,均需确定其左右次序,也就是说二叉树的结点次序不是相对于另一结点而言而是确定的。 4.设将整数1,2,3,4依次进栈,但只要出栈时栈非空,则可将出栈操作按任何次序夹入其中,请回答下述问题: (1)若入、出栈次序为Push (1),Pop(),Push (2),Push(3),Pop(),Pop(),Push(4),Pop(),则出栈的数字序列为何(这里Push(i)表示i进栈,Pop()表示出栈)? (2)能否得到出栈序列1423和1432? 并说明为什么不能得到或者如何得到。 答: (1)出栈序列为: 1324 (2)不能得到1423序列。 因为要得到14的出栈序列,则应做Push (1),Pop(),Push (2),Push (3),Push(4),Pop()。 这样,3在栈顶,2在栈底,所以不能得到23的出栈序列。 能得到1432的出栈序列。 具体操作为: Push (1),Pop(),Push (2),Push(3),Push(4),Pop(),Pop(),Pop()。 1.指出下述程序段的功能是什么? voidDemo1(SeqStack*S){ inti;arr[64];n=0; while(StackEmpty(S))arr[n++]=Pop(S); for(i=0,i }//Demo1 程序段的功能是将一栈中的元素按反序重新排列,也就是原来在栈顶的元素放到栈底,栈底的元素放到栈顶。 此栈中元素个数限制在64个以内。 2.已知二叉树的先序序列和中序序列分别为HDACBGFE和ADCBHFEG,画出该二叉树. 3.以二叉链表为存储结构,写一算法交换各结点的左右子树。 答: 要交换各结点的左右子树,最方便的办法是用后序遍历算法,每访问一个结点时把两棵子树的指针进行交换,最后一次访问是交换根结点的子树。 voidChangeBinTree(BinTree*T) {//交换子树 if(*T) {//这里以指针为参数使得交换在实参的结点上进行后序遍历 BinTreetemp; ChangeBinTree(&(*T)->lchild); ChangeBinTree(&(*T)->rchild); temp=(*T)->lchild; (*T)->lchild=(*T)->rchild; (*T)->rchild=temp;信道容量 1.假设用于通信的电文由字符集{a,b,c,d,e,f,g,h}中的字母构成,这8个字母在电文中出现的概率分别为{0.07,0.19,0.02,0.06,0.32,0.03,0.21,0.10}.为这8个字母设计哈夫曼编码。 (1)哈夫曼编码 根据上图可得编码表: a: 1001 b: 01 c: 10111 d: 1010 e: 11 f: 10110 g: 00 h: 1000 2.给出下图的从结点a开始的遍历次序,1)深度优先;2)广度优先。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 复习题