例题选讲

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

已知完全二叉树的第7层有10个叶子结点, 则整个二叉树的结点数最多是多少?
解答:由于本题求二叉树的结点数最多是多少 ,第7层共有27-1=64个结点,已知有10个叶子 结点,则其余54个结点均为分支结点。它在第8 层上有108个叶子结点。所以该二叉树的结点数 最多可达27-1+108=235。 注意:本题未说明完全二叉树的高度,但根据 题意,只能有8层。
【分析】算法思路:线性表L,A,B采用顺序存储 结构。依次遍历L中的元素,比较当前的元素值, 大于0的赋给A,小于0的赋给B。

解答:算法如下
Void ret(SqList L,SqList A,SqList B) { for(i=0,j=0,k=0; i<L.length; i++) { if(L.elem[i]>0) A.elem[j++]=L.elem[i]; if(L.elem[i])<0) B.elem[k++]=L.elem[i]; } }
例6-8

对 n(n 大于等于 2)个权值均不相同的字符构成 哈夫曼树,关于该树的叙述中,错误的是( ) (2010)
A.该树一定是一棵完全二叉树 B.树中一定没有度为 1 的结点 C.树中两个权值最小的结点一定是兄弟结点 D.树中任一非叶结点的权值一定不小于下一任 一结点的权值
例6-9
若一棵完全二叉树有768个结点,则该二叉树中 叶子结点的个数是( )。(2011) A. 257 B. 258 C. 384 D. 385 解答:由性质4可得本完全二叉树的高度为10。第 10层上的结点个数为768-(29-1)=257(这些全为叶 子结点);第9层上的非叶子结点为(2571)/2+1=129;则第9层上的叶子结点个数为: 29-1-129=127;则叶子结点总数为257+127=384 。
例1-6

设单链表中指针p指向结点m,若要删除m之后的结 点(若存在),则需修改指针的操作为( )。
A. p->next=p->next->next; B. p=p->next; C. p=p->next->next; D. p->next=p;
例1-7



设将n(n>1)个整数存放到一维数组R中。试设计 一个在时间和空间两方面尽可能高效的算法, 将R中保存的序列循环左移p(0<p<n)个位置, 即将R中的数据由(x0,x1,…,xn-1)变换为 (xp,xp+1,…xn-1,x0,x1,…,xp-1)。要求: (1)给出算法的基本设计思想。 (2)根据设计思想,采用C或C++或Java语言 描述算法,关键之处给出注释。 (3)说明你所设计算法的时间复杂度和空间 复杂度。
树和二叉树
习题选讲
例6-1

树最适合用来表示(
)。
A. 有序数据元素 B. 无序数据元素 C. 元素之间具有分支层次关系的数据 D. 元素之间无联系的数据
例6-2

一棵含有n个结点的k叉树,可能达到的最 大深度和最小深度各为多少?
解答:一棵含有n个结点的k叉树,能达到最大深 度的是单支树,其深度为n;深度最小的是完全k 叉树。


例6-5

证明:一棵二叉树中的结点的度或为0或为2, 则二叉树的分支数为2(n0-1),其中n0是度为0的 结点的个数。
解答:设二叉树度为0和2的结点数及总的结点数分别为n0 n= n0 + n2 (1) , n2, n。则 再设二叉树的分支数为B,除根结点外,每个结点头上都有 一个分支。则 B=n-1 (2) 度为0的是叶子,没有分支,而度为2的结点有两个分支。 则 n=2 n2 +1 (3) 由(1),(3)式得n2= n0-1,并由(1),(2)式得 B=2( n0 -1 )

3数组和稀疏矩阵

例3-1 数组A中,每个元素A[i][j]的长度为3个字 节,行下标i从1到8,列下标j从1到10,从首地 址SA开始连续存放在存储器内,存放该数组至 少需要的单元数是( )。
A. 80 B. 100 C. 240 D. 270

例3-2


数组A中,每个元素A[i][j]的长度为3个字节,行 下标i从1到8,列下标j从1到10,从首地址SA开 始连续存放在存储器内,该数组按行存放时, 元素A[8][5]的起始地址为( )。 A. SA+141 B. SA+144 C. SA+222 D. SA+225

例2-5

元素a,b,c,d,e依次进入初始为空的栈中,若元素 进栈后可停留、可出栈,直到所有元素都出栈, 则在所有可能的出栈序列中,以元素d开头的序 列个数是( )。(2011)
A. 3 B. 4 C. 5 D. 6

例2-6

已知循环队列存储在一维数组A[0…n-1]中, 且队列非空时front和rear分别指向队头和队尾元 素。若初始时队列为空,且要求第1个进入队列 的元素存储在A[0]处,则初始时front和rear的值 分别是( )。(2011) A. 0,0 B. 0,n-1 C. n-1,0 D. n-1,n-1
例题选讲
线性结构
1线性表

例1-1关于线性表的说法,下面选项正确的是 ( )。 A. 线性表的特点是每个元素都有一个前驱元素 和一个后继元素 B.线性表是具有n(n≥0)个元素的一个有限序列 C.线性表就是顺序存储的表 D.线性表只能用顺序存储结构实现
例1-2

下面关于线性表的叙述中,错误的是哪一个? A.线性表采用顺序存储,必须占用一片连续的存 储单元 B.线性表采用顺序存储,便于进行插入和删除操 作 C.线性表采用链式存储,不必占用一片连续的存 储单元 D.线性表采用链式存储,便于插入和删除操作

解答:



四叉树结点的度数均不大于4,结点总数应等于 度为i的结点数(记为ni)之和: N=no+n1+n2+n3+n4 (1) 因为度为 i的结点有i个孩子,而根结点不是任何 结点的孩子,故结点总数为: N=n1+2n2+3n3+4n4+1 (2) 由上面的(1)、(2)式得到: no=n2+2n3+3n4+1=1+20+60+1=82

例6-3

具有n个结点的满二叉树的叶子结点的个数是 多少?

解答:设该满二叉树的高度为h,由于满二叉树 中叶子结点都集中在最底层,所以该满二叉树 的叶子结点的个数为: 2h1 h h 1 则总的结点个数为: n 2 1 2 * 2 1
得: 2
h 1
n 1 2
例6-4

为解决计算机与打印机之间速度不匹配的问题, 通常设置一个打印数据缓冲区,主机将要输出 的数据依次写入该缓冲区,而打印机则依次从 该缓冲区中取出数据。该缓冲区的逻辑结构应 该是( )。(2009) A.栈 B.队列 C.树 D.图

例2-4

设栈 S 和队列 Q 的初始状态均为空,元素 abcdefg 依次进入栈 S。若每个元素出栈后立即 进 入 队列 Q, 且 7 个 元素 出队 的顺 序是 bdcfeag, 则栈 S 的容 量至 少是( )。 (2009) A.1 B.2 C.3 D.4
2栈和队列

例2-1 若元素a,b,c,d,e,f依次进栈,允许进栈、退 栈操作交替进行,但不允许连续三次进行退栈 工作,则不可能得到的出栈序列是( )。 (2010)
A. d,c,e,b,f,a B. c,b,d,a,e,f C. b,c,a,e,f,d D. a,f,e,d,c,b
源自文库
例1-5

从一个具有n个结点的单链表中检索其值等于x 的结点时,在检索成功的情况下,需平均比较 ( )个元素结点?
A n/2 Bn C (n+1)/2 D (n-1)/2
分析:

由于单链表中的元素检索必须从头结点开始依 次比较每一个元素结点的值,故在检索成功的 情况下,平均比较次数应该为:
1 1 n(n 1) n 1 (1 2 n) n n 2 2

例3-4
3 设稀疏矩阵如下图所示: 0 25 A 0 0 0

0 0 0 0 16 0 0 0 0 0 0 0 66 0 0 0 0 0 0 0 88 0 0 0 0 0 0 0 0 6
要求给出该稀疏矩阵下列各表示法的图示。 (1)三元组顺序表; (2)三元组单链表; (3)带行指针数组的三元组链表; (4)三元组十字链表。
例2-2

某队列允许在其两端进行入队操作,但仅允许 在一端进行出队操作。若元素a,b,c,d,e依次入此 队列后再进行出队操作,则不可能得到的出队 序列是( )。(2010)
A. b,a,c,d,e B. d,b,a,c,e C. d,b,c,a,e D. e,c,b,a,d

例2-3

例6-6

下列线索二叉树中(用虚线表示线索),符合 后序线索树定义的是( )。(2010)
例6-7

在一棵度为 4 的树 T 中,若有 20 个度为 4 的 结点,10 个度为 3 的结点,1 个度为 2 的结 点,10 个度为 1 的结点,则树 T 的叶结点个 数是( )。(2010)
A. 41 B. 82 C. 113 D. 122
例1-3

设A是一个线性表(a1,a2,…,an),若采用顺序 存储结构,则在等概率的前提下,平均插入一 个元素需要移动的元素个数为多少?若元素插 在ai和ai+1之间(0≤ i ≤n-1)的概率为
n -i n(n 1) / 2
则平均每插入一个元素所移动的元素的个数又 是多少?
解答:


在等概率的前提下,平均插入一个元素需要移动的 元素个数为:(0+1+2+…+n)/(n+1)=n/2 若元素插在ai和ai+1之间(0≤ i ≤n-1)的概率为 n -i n(n 1) / 2 ,则平均每插入一个元素所移动的元 素的个数为:
解答:SA+(7*10+4)*3=SA+222

例3-3

设矩阵A是一个对称矩阵,为了节省存储空间, 将其下三角部分按行序存放在一维数组B[1..n(n1)/2]中,对任一下三角部分元素aij(i>=j),在一 维数组B的下标位置k的值是( )。
A. i(i-1)/2+j-1 C. i(i+1)/2+j-1 B. i(i-1)/2+j D. i(i+1)/2+j
答案要点:

(1)算法基本设计思想: 先将n个数据x0,x1,…,xp,…,xn-1原地逆置,得 到xn-1,…,xp,xp-1,…,x0,然后再将前n-p个和后p个 元素分别原地逆置,得到最终结果: xp,xp+1,…xn-1,x0,x1,…,xp-1
(2)算法实现
void Reverse(int r[],int left,int right) { int k=left, j=right,temp; while(k<j){ temp=r[k]; r[k]=r[j]; r[j]=temp; k++;j--; //k右移一个位置,j左移一个位置 } }
void LeftShift(int r[],int n, int p) { if(p>0 && p<n) { Reverse(r,0,n-1); //将全部数据逆置 Reverse(r,0,n-p-1); //将前n-p个元素逆置 Reverse(r,n-p,n-1); //将后p个元素逆置 } } (3)时间复杂度为O(n),空间复杂度O(1)。
ni 2 (n i) (12 2 2 n 2 ) n(n 1) / 2 n(n 1) i 0 2 1 2n 1 * n(n 1)( 2n 1) n(n 1) 6 3
n -1
例1-4

编写一函数,将一个线性表L(任何元素均不为0) 分拆成两个线性表,使L中大于0的元素存放在A 中,小于0的元素存放在B中。

例6-10

若一棵二叉树的前序遍历序列和后序遍历序列分 别为1,2,3,4和4,3,2,1,则该二叉树的中序遍历序 列不会是( )。(2011)
A. 1,2,3,4 B. 2,3,4,1 C. 3,2,4,1 D. 4,3,2,1
相关文档
最新文档