自学考试高级语言程序设计习题.docx
- 文档编号:6766453
- 上传时间:2023-01-10
- 格式:DOCX
- 页数:18
- 大小:210.02KB
自学考试高级语言程序设计习题.docx
《自学考试高级语言程序设计习题.docx》由会员分享,可在线阅读,更多相关《自学考试高级语言程序设计习题.docx(18页珍藏版)》请在冰豆网上搜索。
自学考试高级语言程序设计习题
2010年自学考试《高级语言程序设计》习题
第1部分引论
二、选择
1.链式存储结构中,每个数据的存储结点里D指向邻接存储结点的指针,用以反映数据间的逻辑关系。
A.只能有1个B.只能有2个C.只能有3个D.可以有多个
2.有下面的算法段:
for(i=0;i k++; 其时间复杂度为B。 A.O (1)B.O(n)C.O(log2n)D.O(n2) 四、应用 1.给出下面3个算法段的时间复杂度: (1)x++; (2)for(j=1;j x++; (3)for(j=1;j<=n;j++) for(k=1;k<=m;k++) x++; 答: (1)的时间复杂度为O (1); (2)的时间复杂度O(n); (3)的时间复杂度是O(n2)。 第2部分线性表 一、填空 1.以顺序存储结构实现的线性表,被称为顺序表。 2.以链式存储结构实现的线性表,被称为链表。 3.不带表头结点的链表,是指该链表的表头指针直接指向该链表的起始结点。 4.顺序表Sq=(a1,a2,a3,…,an)(n≥1)中,每个数据元素需要占用w个存储单元。 若m为元素a1的起始地址,那么元素an的存储地址是m+(n-1)*w。 5.当线性表的数据元素个数基本稳定、很少进行插入和删除操作,但却要求以最快的速度存取表中的元素时,我们应该对该表采用顺序存储结构。 二、选择 1.下面,对非空线性表特点的论述,C是正确的。 A.所有结点有且只有一个直接前驱 B.所有结点有且只有一个直接后继 C.每个结点至多只有一个直接前驱,至多只有一个直接后继 D.结点间是按照1对多的邻接关系来维系其逻辑关系的 2.带表头结点的单链表Lk_h为空的判定条件是B。 A.Lk_h==NULLB.Lk_h->Next==NULL C.Lk_h->Next==Lk_hD.Lk_h! =NULL 3.往一个顺序表的任一结点前插入一个新数据结点时,平均而言,需要移动B个结点。 A.nB.n/2C.n+1D.(n+1)/2 4.在一个单链表中,已知qtr所指结点是ptr所指结点的直接前驱。 现要在qtr所指结点和ptr所指结点之间插入一个rtr所指的结点,要执行的操作应该是C。 A.rtr->Next=ptr->Next;ptr->Next=rtr; B.ptr->Next=rtr->Next; C.qtr->Next=rtr;rtr->Next=ptr; D.ptr->Next=rtr;rtr->Next=qtr->Next; 5.在一个单链表中,若现在要删除ptr指针所指结点的直接后继结点,则需要执行的操作是A。 A.ptr->Next=ptr->Next->Next; B.ptr=ptr->Next;ptr->Next=ptr->Next->Next; C.ptr=ptr->Next->Next; D.ptr->Next=ptr; 6.在长度为n的顺序表中,往其第i个元素(1≤i≤n)之前插入一个新的元素时,需要往后移动B个元素。 A.n-iB.n-i+1C.n-i-1D.i 7.在长度为n的顺序表中,删除第i个元素(1≤i≤n)时,需要往前移动A个元素。 A.n-iB.n-i+1C.n-i-1D.i 8.设tail是指向一个非空带表头结点的循环单链表的尾指针。 那么,删除链表起始结点的操作应该是D。 A.ptr=tail;B.tail=tail->Next; tail=tail->Next;free(tail); free(ptr); C.tail=tail->Next->Next;D.ptr=tail->Next->Next; Free(tail);tail->Next->Next=ptr->Next; Free(ptr);free(ptr); 9.在单链表中,如果指针ptr所指结点不是链表的尾结点,那么在ptr之后插入由指针qtr所指结点的操作应该是B。 A.qtr->Next=ptr;B.qtr->Next=ptr->Next; ptr->Next=qtr;ptr->Next=qtr; C.qtr->Next=ptr->Next;D.ptr->Next=qtr; ptr=qtr;qtr->Next=ptr; 四、应用 1.设计一个计算带表头结点的单链表L的长度(即结点个数)的算法。 typedefstructnode*link; typedefstructnode{ListItemelement; linknext; }Node; 答: 算法设计如下: intLength(linkL) { Linkp=L->next; intsum=0; while(p) {sum++; p=p->next; } return(sum); } 2、已知一个带表头结点的无序单链表L。 试编写一个算法,功能是从表中找出最大值和最小值。 typedefstructnode{ListItemelement; structnodenext;}Node,*link; viodmaxmin(linkL) {intmax,min; linkp=L->next; if(p) {max=p->element; min=p->element; p=p->next; while(p) {if(max if(min>p->element)min=p->element; p=p->next; } printf("max=%d,min=%d\n",max,min); } 3.已知一个带表头结点的无序单链表L,不同结点的Data域值有可能相同。 编写一个算法,功能是计算出Data域值为x的结点的个数。 typedefstructnode*link; typedefstructnode{ListItemdata; linknext;}Node; 答: intCount(linkL,intx) {n=0; linkp=L->next; while(p) { if(p->data==x) n++; p=p->next } return(n); } 第3部分栈与队列 一、填空 1.限定插入和删除操作只能在一端进行的线性表,被称为是栈。 2.如果在顺序栈满时仍打算进行进栈操作,就称为发生了“上溢”出错。 3.如果在顺序栈空时仍打算进行出栈操作,就称为发生了“下溢”出错。 4.在具有n个数据结点的循环队列中,队满时共有n-1个数据元素。 5.如果操作顺序是先让字母A、B、C进栈,做两次出栈;再让字母D、E、F进栈,做一次出栈;最后让字母G进栈,做三次出栈。 最终这个堆栈从栈顶到栈底的余留元素应该是A。 6.队列中,允许进行删除的一端称为队首。 二、选择 1.一个栈的元素进栈序列是a、b、c、d、e,那么下面的C不能做为一个出栈序列。 A.e、d、c、b、aB.d、e、c、b、a C.d、c、e、a、b.D.a、b、c、d、e 2.判定一个顺序队列Qs(最多有n个元素)为空的条件是C。 A.Qs_rear-Qs_front==n*sizeB.Qs_rear-Qs_front+1==n*size C.Qs_front==Qs_rearD.Qs_front==Qs_rear+size 3.链栈与顺序栈相比,一个较为明显的优点是D。 A.通常不会出现栈空的情形B.插入操作更加便利 C.删除操作更加便利D.通常不会出现栈满的情形 4.一个循环队列的最大容量为m+1,front为队首指针,rear为队尾指针。 那么进队操作时求队位号应该使用公式D。 A.Cq_front=(Cq_front+1)%mB.Cq_front=(Cq_front+1)%(m+1) C.Cq_rear=(Cq_rear+1)%mD.Cq_rear=(Cq_rear+1)%(m+1) 5.在一个循环顺序队列里,队首指针Cq_front总是指向A。 A.队首元素B.队首元素的前一个队位 C.任意位置D.队首元素的后一个队位 6.若一个栈的进栈序列是1、2、3、4,那么要求出栈序列为3、2、1、4时,进、出栈操作的顺序应该是A。 (注: 所给顺序中,I表示进栈操作,O表示出栈操作) A.IIIOOOIOB.IOIOIOIOC.IIOOIOIOD.IOIIIOOO 第4部分树 一、填空 1.树中结点的度,是指结点拥有孩子的个数。 2.树中除根结点外,其他结点有且只有一个前驱结点,但可以有零个或多个后继结点。 3.在数据结构中,把n(n≥0)棵互不相交的树的集合称为森林。 4.在如图6-21所示的树中,,结点H的祖先是A、D、G。 图6-21树示例图6-22树示例 5.在树中,一个结点的孩子个数,称为该结点的度。 6.一棵树的形状如图6-22所示。 它的根结点是A,叶结点是E、G、I、J、K、L、N、O、P、Q、R,这棵树的度是4,这棵树的深度是5,结点F的孩子结点是J、K,结点G的父结点是C,结点M、H、D、A是结点R的祖先。 7.结点数为7的二叉树的高度最矮是3,最高是7。 8.如果一棵满二叉树的深度为6,那么它共有63个结点,有32个叶结点。 9.由n个带权值的叶结点生成的哈夫曼树,最终共有2n-1个结点。 10.将一棵完全二叉树按层次进行编号。 那么,对编号为i的结点,如果有左孩子,则左孩子的编号应该是2i;如果有右孩子,则右孩子的编号应该是2i+1。 11.若二叉树共有n个结点,采用二叉链表存储结构。 那么在所有存储结点里,一共会有2n个指针域,其中有n+1个指针域是空的。 12.深度为5的二叉树,至多有31个结点。 二、选择 1.已知一棵单右支的二叉树,如下左图所示。 把它还原成森林,应该是D。 A. B. C. D. 2.将一棵树Tr转换成相应的二叉树Bt,那么对Tr的先序遍历是对Bt的A。 A.先序遍历B.中序遍历C.后序遍历D.无法确定 3.将一棵树Tr转换成相应的二叉树Bt,那么对Tr的后序遍历是对Bt的B。 A.先序遍历B.中序遍历C.后序遍历D.无法确定 4.设森林F中有3棵树,依次有结点n1、n2、n3个。 把该森林转换成对应的二叉树后,该二叉树的右子树上的结点个数是D。 A.n1B.n1+n2C.n3D.n2+n3 5.设有由三棵树T1、T2、T3组成的森林,其结点个数分别为n1、n2、n3。 与该森林相应的二叉树为Bt。 则该二叉树根结点的左子树中应该有结点A个。 A.n1-1B.n1C.n1+1D.n1+n2 6.一棵有n个结点的树,在把它转换成对应的二叉树之后,该二叉树根结点的左子树上共有B个结点。 A.n-2B.n-1C.n+1D.n+2 7.一棵有n个结点的树,在把它转换成对应的二叉树之后,该二叉树根结点的右子树上共有A个结点。 A.0B.nC.n+1D.n+2 8.下列说法中,正确的是A。 A.树的先序遍历序列与其对应的二叉树的先序遍历序列相同 B.树的先序遍历序列与其对应的二叉树的后序遍历序列相同 C.树的后序遍历序列与其对应的二叉树的先序遍历序列相同 D.树的后序遍历序列与其对应的二叉树的后序遍历序列相同 9.在所给的4棵二叉树中,C不是完全二叉树。 10.设有一棵5个结点的二叉树,其先序遍历序列为: A-B-C-D-E,中序遍历序列为: B-A-D-C-E,那么它的后序遍历序列为B。 A.A-B-D-E-CB.B-D-E-C-A C.D-E-C-A-BD.A-B-C-D-E 11.将一棵有50个结点的完全二叉树按层编号,那么编号为25的结点是B。 A.无左、右孩子B.有左孩子,无右孩子 C.有右孩子,无左孩子D.有左、右孩子 12.深度为6的二叉树,最多可以有A个结点。 A.63B.64C.127D.128 13.在一棵非空二叉树的中序遍历序列里,根结点的右边D结点。 A.只有左子树上的部分B.只有左子树上的所有 C.只有右子树上的部分D.只有右子树上的所有 14.在任何一棵二叉树的各种遍历序列中,叶结点的相对次序是A。 A.不发生变化B.发生变化 C.不能确定D.以上都不对 15.权值为1、2、6、8的四个结点,所构造的哈夫曼树的带权路径长度是D。 A.18B.28C.19D.29 16.一棵二叉树度2的结点数为7,度1的结点数为6。 那么它的叶结点数是C。 A.6B.7C.8D.9 17.在一棵二叉树中,第5层上的结点数最多是C个。 A.8B.15C.16D.32 四、应用 1.将图6-26所示的二叉树转换成相应的森林。 图6-26二叉树示例图6-27树示例 答: 转换成的森林如下图所示。 2.给出如图6-27所示树的先序遍历序列和后序遍历序列。 答: 该树的先序遍历序列为: A-B-E-F-K-L-M-C-G-D-H-I-J; 该树的后序遍历序列是: E-K-M-L-F-B-G-C-H-I-J-D-A。 3.将图6-28所示的森林转换成对应的二叉树。 图6-28森林示例图6-29树示例 答: 对应的二叉树如下图所示。 4.将图6-29所示的树转换成相对应的二叉树。 答: 对应的二叉树如下图所示 5.分别写出如图5-32所示二叉树的先序、中序、后序遍历序列。 图5-32二叉树示例 答: 先序遍历序列为: A-B-C-D-F-G-H-E, 中序遍历序列为: B-A-D-G-F-H-C-E, 后序遍历序列为: B-G-H-F-D-E-C-A。 6.权值序列为: 10、16、20、6、30、24,请用图示来表达构造一棵哈夫曼树的全过程。 答: 构造这棵哈夫曼树的全过程如下所示。 第5部分图 一、填空 1.在一个具有4个顶点的无向图中,要连通全部顶点,,至少需要3条边。 2.在无向图中,若顶点vi和vj之间有一条边(vi,vj)存在,那么则称顶点vi和vj互为邻接点。 3.图中顶点vi的“度”,是指与它相邻接的顶点的个数,并记为D(vi)。 4.在有向图中,把从顶点vi到顶点vj的弧记为 5.对于一个无向图,其邻接矩阵中第i行(或第i列)里非零或非∞元素的个数,正好是第i个顶点vi的度。 6.对于一个有向图,其邻接矩阵中第i行里非零或非∞元素的个数,正好是第i个顶点vi的出度;其邻接矩阵中第i列里非零或非∞元素的个数,正好是第i个顶点vi的入度。 7.在无向图中,若从顶点vi到顶点vj之间有路径存在,则称vi与vj是连通的。 8.如果无向图G中任意一对顶点之间都是连通的,则称该图G为连通图,否则是非连通图。 9.在无向图G中,尽可能多地从集合V及E里收集顶点和边,使它们成为该图的一个极大的连通子图,这个子图就被称为是无向图G的一个连通分量。 10.包含无向连通图G的所有n个顶点在内的极小连通子图,是这个图的生成树。 11.只要在无向连通图的生成树里减少任意一条边,它就成为了一个非连通图。 12.对图的广度优先搜索,类似于对树进行按层次遍历。 二、选择 1.在一个有n个顶点的无向图中,要连通全部顶点,至少需要C条边。 A.nB.n+1C.n-1D.n/2 2.对于一个无向完全图来说,它的每个不同顶点对之间,都存在有一条边。 因此,有n个顶点的无向完全图包含有C条边。 A.n(n-1)B.n(n+1)C.n(n-1)/2D.n(n+1)/2 3.对于一个有向完全图来说,它的每个不同顶点对之间,都存在有两条弧。 因此,有n个顶点的有向完全图包含有A条边。 A.n(n-1)B.n(n+1)C.n(n-1)/2D.n(n+1)/2 4.在一个无向图中,所有顶点的度数之和,是其所有边数之和的C倍。 A.1/2B.1C.2D.4 5.在一个有向图中,所有顶点的入度之和B所有顶点的出度之和。 A.二分之一于B.等于C.两倍于D.四倍于 6.一个无向连通网图的最小生成树A。 A.有一棵或多棵B.只有一棵C.一定有多棵D.可能不存在 7.一个无向图有n个顶点,那么该图拥有的边数至少可以是D。 A.2nB.nC.n/2D.0 8.一个有n个顶点的无向连通网图,其生成树里含有C条边。 A.4n-1B.2n-1C.n-1D.n/2 9.下面关于图的存储的叙述中,正确的是C。 A.用邻接表存储图,所用存储空间大小只与图中顶点个数有关,与边数无关 B.用邻接表存储图,所用存储空间大小只与图中边数有关,与顶点个数无关C.用邻接矩阵存储图,所用存储空间大小只与图中顶点个数有关,与边数无关.D.用邻接矩阵存储图,所用存储空间大小只与图中边数有关,与顶点个数无关 10.对如图7-21所示的无向图实施深度优先搜索遍历,可能的遍历序列是B。 图7-21无向图示例 XX文库-让每个人平等地提升自我XX文库-让每个人平等地提升自我三、问答 图7-23无向图示例 1.有如图7-23所示的一个无向图,给出它的邻接矩阵以及从顶点v1出发的深度优先遍历序列。 答: 它的邻接矩阵如图所示。 从顶点v1出发的深度优先遍历序列为: v1->v2->v4->v5->v7->v6->v3 注意,该序列是不唯一的。 2.对图7-24回答下列问题: (1)顶点集合V; (2)边集合E;(3)每个顶点x的度D(x); (4)一个长度为5的路径;(5)一个长度为4的回路; (6)图的一个生成树;(7)邻接矩阵;(8)邻接表。 图7-24图示例 答: (1)顶点集合V={v1,v2,v3,v4,v5,v6}。 (2)边集合E={ (3)每个顶点的度: D(v1)=1,D(v2)=3,D(v3)=D(v4)=4,D(v5)=D(v6)=2。 (4)一个长度为5的路径是: v1->v2->v3->v6->v4->v5。 (5)一个长度为4的回路是: v2->v3->v5->v4->v2。 (6)如下图(a)所示。 (7)如下图(b)所示。 (8)如下图(c)所示。 问答5的(6)~(8)答案 第6部分二叉排序树与散列表 一、填空 1.在散列查找中使用的函数,称为“散列函数”。 在散列法中的查找表,称为散列表或哈希表。 2.散列法中,如果两个不同的关键字经过散列函数的计算后,得到了相同的索引地址,那么这种现象被称作“冲突”。 3.散列法中,计算后得到相同索引地址的那些不同关键字,被称作“同义词”。 二、选择 1.在对线性表进行折半查找时,要求线性表必须B。 A.以顺序方式存储 B.以顺序方式存储,且结点按关键字有序排列 C.以链式方式存储 D.以链式方式存储,且结点按关键字有序排列 2.采用顺序查找法查找长度为n的线性表时,其平均查找长度为C。 A.nB.n/2C.(n+1)/2D.(n-1)/2 3.设散列表长m=14,散列函数h(key)=key%11。 表中已有四个记录,关键字分别为15、38、61、84,采用二次探测法解决冲突。 那么关键字为49的记录的散列地址为D。 A.1B.3C.5D.9 4.在下列各种查找方法中,只有A查找法的平均查找长度与表长n无关。 A.散列查找B.二叉查找树C.折半查找D.分块查找 四、应用 1.有关键字序列: 20、10、30、15、25、5、35、12、27,请一步步画出构造二叉查找树的过程。 答: 构造二叉查找树的过程如下: 2.给出如图8-21所示的一棵二叉查找树,在其基础上分别做操作: (1)删除关键字为15的记录; (2)插入关键字为20的记录。 画出这两个操作完成后该树的形态。 图8-21二叉查找树示例 答: 1)删除关键字为15的记录后,该树的形态如图(a)所示 (2)插入关键字为20的记录后,该树的形态如图(c)所示。 第7部分选择与排序 一、填空 1.若经过某种排序之后,那些有相同关键字值的记录间的相对位置保持不变,那么称这种排序方法是稳定的。 2.选择排序方法是从未排序的序列中挑选出元素,然后将其依次放入排好序的序列的一端。 3.快速排序方法是通过适当的位置交换,把序列中的元素一次性地放到了它的最终位置上。 4.对关键字序列22、86、19、49、12、30、65、35、18做一趟排序后,得到的结果是18、12、19、22、49、30、65、35、86。 因此,可以认为采用的排序方法是快速排序。 二、选择 1.在下面给出的各种排序算法中,只有A是稳定排序算法。 A.冒泡排序B.快速排序C.直接选择排序D.堆排序 2.在下面给出的各种排序算法中,只有B不是稳定排序算法。 A.冒泡排序B.快速排序C.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 自学考试 高级 语言程序设计 习题