数据结构练习112章答案.docx
- 文档编号:6904080
- 上传时间:2023-01-12
- 格式:DOCX
- 页数:18
- 大小:62.49KB
数据结构练习112章答案.docx
《数据结构练习112章答案.docx》由会员分享,可在线阅读,更多相关《数据结构练习112章答案.docx(18页珍藏版)》请在冰豆网上搜索。
数据结构练习112章答案
数据结构作业
一、设n为整数,利用大“O”记号,求下列程序段的时间复杂度
1、i=0;k=0;
Do
{k=k*10*i;i++;
}while(i //T(n)=O(n) 2、i=1;j=0; while(i+j<=n) {if(i>j)j++; elsei++; } //T(n)=O(n) 3、x=n;//n>1 while(x>=(y+1)*(y+1)) y++; //T(n)=O( ) 4、x=91;y=100; while(y>0) if(x>100){x=x-10;y--;} elsex++; //T(n)=常数=O (1) 二、选择题 1、从逻辑上可以把数据结构分为(C)两大类。 A.动态结构、静态结构B.顺序结构、链式结构 C.线性结构、非线性结构D.初等结构、构造型结构 2、以下数据结构中,哪一个是线性结构(D)? A.广义表B.二叉树C.稀疏矩阵D.串 3、在下面的程序段中,对x的赋值语句的频度为(C) for(i=1;i<=n;i++) for(j=1;j<=n;j++) x=x+1; A.O(2n)B.O(n)C.O(n2)D.O(log2n) 4、下面关于线性表的叙述中,错误的是哪一个? (B) A.线性表采用顺序存储,必须占用一片连续的存储单元。 B.线性表采用顺序存储,便于进行插入和删除操作。 C.线性表采用链接存储,不必占用一片连续的存储单元。 D.线性表采用链接存储,便于插入和删除操作。 5、某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用(D)存储方式最节省运算时间。 A.单链表B.仅有头指针的单循环链表C.双链表D.仅有尾指针的单循环链表 6、静态链表中指针表示的是(B). A.内存地址B.数组下标C.下一元素地址D.左、右孩子地址 7、下面的叙述不正确的是(B、C) A.线性表在链式存储时,查找第i个元素的时间同i的值成正比 B.线性表在链式存储时,查找第i个元素的时间同i的值无关 C.线性表在顺序存储时,查找第i个元素的时间同i的值成正比 D.线性表在顺序存储时,查找第i个元素的时间同i的值无关 8、若长度为n的线性表采用顺序存储结构,在其第i个位置插入一个新元素的算法的时间复杂度为(C)(1<=i<=n+1)。 A.O(0)B.O (1)C.O(n)D.O(n2) 9、在单链表指针为p的结点之后插入指针为s的结点,正确的操作是: (B)。 A.p->next=s;s->next=p->next;B.s->next=p->next;p->next=s; C.p->next=s;p->next=s->next;D.p->next=s->next;p->next=s; 10、对于一个头指针为head的带头结点的单链表,判定该表为空表的条件是(B) A.head==NULLB.head→next==NULLC.head→next==headD.head! =NULL 11、一个栈的输入序列为123…n,若输出序列的第一个元素是n,输出第i(1<=i<=n)个元素是(B)。 A.不确定B.n-i+1C.iD.n-i 12、有六个元素6,5,4,3,2,1的顺序进栈,问下列哪一个不是合法的出栈序列? (C) A.543612B.453126C.346521D.234156 13、设有三个元素X,Y,Z顺序进栈(进的过程中允许出栈),下列得不到的出栈排列是(C)。 A.XYZB.YZXC.ZXYD.ZYX 14、假设以数组A[m]存放循环队列的元素,其头尾指针分别为front和rear,则当前队列中的元素个数为(A)。 A.(rear-front+m)%mB.rear-front+1C.(front-rear+m)%mD.(rear-front)%m 15、若用一个大小为6的数组来实现循环队列,且当前rear和front的值分别为0和3,当从队列中删除一个元素,再加入两个元素后,rear和front的值分别为多少? (B) A.1和5B.2和4C.4和2D.5和1 16、下面关于串的的叙述中,哪一个是不正确的? (B) A.串是字符的有限序列B.空串是由空格构成的串 C.模式匹配是串的一种重要运算D.串既可以采用顺序存储,也可以采用链式存储 17、设有两个串p和q,其中q是p的子串,求q在p中首次出现的位置的算法称为(C) A.求子串B.联接C.匹配D.求串长 18、设有数组A[i,j],数组的每个元素长度为3字节,i的值为1到8,j的值为1到10,数组从内存首地址BA开始顺序存放,当用以列为主存放时,元素A[5,8]的存储首地址为(B)。 A.BA+141B.BA+180C.BA+222D.BA+225 19、广义表A=(a,b,(c,d),(e,(f,g))),则下面表达式的值为(D)。 Head(Tail(Head(Tail(Tail(A))))) A.(g)B.(d)C.cD.d 三、判断题 1、数据元素是数据的最小单位。 (错) 2、顺序存储方式的优点是存储密度大,且插入、删除运算效率高。 (错) 3、线性表采用链表存储时,结点和结点内部的存储空间可以是不连续的。 (对) 4、线性表的特点是每个元素都有一个前驱和一个后继。 (错) 5、一个稀疏矩阵Am*n采用三元组形式表示,若把三元组中有关行下标与列下标的值互换,并把m和n的值互换,则就完成了Am*n的转置运算。 (错) 6、所谓取广义表的表尾就是返回广义表中最后一个元素。 (错) 四、填空题 1、当线性表的元素总数基本稳定,且很少进行插入和删除操作,但要求以最快的速度存取线性表中的元素时,应采用顺序存储结构。 2、线性表L=(a1,a2,…,an)用数组表示,假定删除表中任一元素的概率相同,则删除一个元素平均需要移动元素的个数是(n-1)/2。 3、对于一个具有n个结点的单链表,在已知的结点*p后插入一个新结点的时间复杂度为O (1),在给定值为x的结点后插入一个新结点的时间复杂度为O(n)。 4、带头结点的双循环链表L中只有一个元素结点的条件是: L->next==L->prior (或L->prior->prior==L) 5、一个栈的输入序列是: 1,2,3则不可能的栈输出序列是3,1,2。 6、用S表示入栈操作,X表示出栈操作,若元素入栈的顺序为1234,为了得到1342出栈顺序,相应的S和X的操作串为SXSSXSXX。 7、队列又称作先进先出表。 8、组成串的数据元素只能是字符。 9、设有C语言描述的二维数组A[10][20],其每个元素占两个字节,第一个元素的存储地址为100,若按行优先顺序存储,则元素A[6][6]存储地址为352。 五、算法设计题 1、请设计一算法: 已知顺序表L,表中元素为整型且递增有序,现有一值为e的元素要插入L表,使插入后L表仍然有序。 2.已知带头结点的动态单链表L中的结点是按整数值递增排列的,试写一算法将值x为的结点插入到表L中,使L仍然有序。 3.设计一算法,逆置带头结点的动态单链表L。 4.在长度大于1的单循环链表中,既无头结点也无头指针。 s为指向链表中某个结点的指针,试编写算法删除结点*s的直接前趋结点。 1、方法一: #defineLIST_INIT_SIZE100 #defineLISTINCREMENT10 Statussqlist_insert(sqlist&L,inte) {int*p,*newbase; if(L.length==L.listsize)//空间不够,需重新申请 {newbase=(int*)realloc(L.elem, (L.listsize+Listincrement)*sizeof(int)); if(! newbase)exit(overflow); L.elem=newbase;L.listsize+=listincrement;//新基址和存储容量 } for(p=L.elem+L.length;p>=L.elem&&*p>e;--p)//从表尾开始比较和移动 *(p+1)=*p; *(p+1)=e; ++L.length; Returnok } 方法二: Statussqlist_insert(sqlist&L,inte) {inti,*newbase; if(L.length==L.listsize)//空间不够,需重新申请 {newbase=(int*)realloc(L.elem, (L.listsize+Listincrement)*sizeof(int)); if(! newbase)exit(overflow); L.elem=newbase;L.listsize+=listincrement;//新基址和存储容量 } for(i=L.length-1;i>=0&&L.elem[i]>e;--i)//从表尾开始比较和移动 L.elem[i+1]=L.elem[i]; L.elem[i+1]=e; ++L.length; Returnok } 2、方法一: VoidLinklist_insert(linklist&L,inte) {linklistp,pre; pre=L;p=L->next;//pre是p的直接前驱 while(p&&p->data p=p->next; s=(linklist)malloc(sizeof(LNode)) s->data=e; s->next=p;//s插在pre的后面,p的前面 pre->next=s; } 方法二: VoidLinklist_insert(linklist&L,inte) {linklistp=L; while(p->next&&p->next->data p=p->next; s=(linklist)malloc(sizeof(LNode)) s->data=e; s->next=p->next;//s插在p的后面 p->next=s; } 3、 Voidlinklist_reverse(linklist&L) {linklistp,q; P=L->next; L->next=NULL; While(p) {q=p->next; p->next=L->next;//p插在头结点L的后面 L->next=p; p=q; } 4、 Voidlinklist_delete(linklists) {linklistp; p=s; while(p->next->next! =s) p=p->next; free(p->next);删除p的后继 p->next=s;p的后继为s } 六、程序填空题 不带头结点的单链表L进行就地逆置的算法,用L返回逆置后的链表的头指针。 voidreverse(linklist&L) {p=null;q=L; while(q! =null) { (1);q->next=p;p=q; (2)___;} (3)_____; } // (1)L=L->next (2)q=s(3)L=P 第六章树 选择题 1.已知一算术表达式的中缀形式为A+B*C-D/E,后缀形式为ABC*+DE/-,其前缀形式为(D) A.-A+B*C/DEB.-A+B*CD/EC.-+*ABC/DED.-+A*BC/DE 2.算术表达式a+b*(c+d/e)转为后缀表达式后为(B) A.ab+cde/*B.abcde/+*+C.abcde/*++D.abcde*/++ 3.设树T的度为4,其中度为1,2,3和4的结点个数分别为4,2,1,1则T中的叶子数为(D) A.5B.6C.7D.8 4.设森林F对应的二叉树为B,它有m个结点,B的根为p,p的右子树结点个数为n,森林F中第一棵树的结点个数是(A) A.m-nB.m-n-1C.n+1D.条件不足,无法确定 5.若一棵二叉树具有10个度为2的结点,5个度为1的结点,则度为0的结点个数是(B) A.9B.11C.15D.不确定 6.具有10个叶结点的二叉树中有(B)个度为2的结点, A.8B.9C.10D.ll 7.一棵完全二叉树上有1001个结点,其中叶子结点的个数是(E) A.250B.500C.254D.505E.以上答案都不对 8.有n个叶子的哈夫曼树的结点总数为(D)。 A.不确定B.2nC.2n+1D.2n-1 9.一棵具有n个结点的完全二叉树的树高度(深度)是(A) A.⎣logn⎦+1B.logn+1C.⎣logn⎦D.logn-1 10.深度为h的满m叉树的第k层有(A)个结点。 (1= A.mk-1B.mk-1C.mh-1D.mh-1 11.在一棵高度为k的满二叉树中,结点总数为(C) A.2k-1B.2kC.2k-1D.⎣log2k⎦+1 12.对二叉树的结点从1开始进行连续编号,要求每个结点的编号大于其左、右孩子的编号,同一结点的左右孩子中,其左孩子的编号小于其右孩子的编号,可采用(C)次序的遍历实现编号。 A.先序B.中序C.后序D.从根开始按层次遍历 13.树的后根遍历序列等同于该树对应的二叉树的(B). A.先序序列B.中序序列C.后序序列 14.已知某二叉树的后序遍历序列是dabec,中序遍历序列是debac,它的前序遍历是(D)。 A.acbedB.decabC.deabcD.cedba 15.二叉树的先序遍历和中序遍历如下: 先序遍历: EFHIGJK;中序遍历: HFIEJKG。 该二叉树根的右子树的根是: (C) A、EB、F C、G D、H 16.n个结点的线索二叉树上含有的线索数为(C) A.2nB.n-lC.n+lD.n 17.下述编码中哪一个不是前缀码(B)。 A.(00,01,10,11)B.(0,1,00,11)C.(0,10,110,111)D.(1,01,000,001) 18.从下列有关树的叙述中,选出5条正确的叙述(C,D,F,H,I) A.二叉树中每个结点有两个子结点,而树无此限制,因此二叉树是树的特殊情况。 B.当K≥1时高度为K的二叉树至多有2k-1个结点。 C.用树的前序周游和中序周游可以导出树的后序周游。 D.线索二叉树的优点是便于在中序下查找前驱结点和后继结点。 E.将一棵树转换成二叉树后,根结点没有左子树。 F.一棵含有N个结点的完全二叉树,它的高度是⎣LOG2N⎦+1。 G.在二叉树中插入结点,该二叉树便不再是二叉树。 H.采用二叉树链表作树的存储结构,树的前序周游和其相应的二叉树的前序周游的结果是一样的。 I.哈夫曼树是带权路径最短的树,路径上权值较大的结点离根较近。 J.用一维数组存储二叉树时,总是以前序周游存储结点。 判断题 1.完全二叉树中,若一个结点没有左孩子,则它必是树叶。 (对) 2.二叉树只能用二叉链表表示。 (错) 3.在二叉树的第i层上至少有2i-1个结点(i>=1)(错) 4.度为二的树就是二叉树。 (错) 5.在中序线索二叉树中,每一非空的线索均指向其祖先结点。 错) 填空题: 1.具有256个结点的完全二叉树的深度为9。 2.已知一棵度为3的树有2个度为1的结点,3个度为2的结点,4个度为3的结点,则该树有12个叶子结点。 3.在一棵二叉树中,度为零的结点的个数为N0,度为2的结点的个数为N2,则有N0=N2+1 4.已知二叉树有50个叶子结点,则该二叉树的总结点数至少是99。 5.一个有2001个结点的完全二叉树的高度为11。 6.设F是由T1,T2,T3三棵树组成的森林,与F对应的二叉树为B,已知T1,T2,T3的结点数分别为n1,n2和n3则二叉树B的左子树中有n1-1个结点,右子树中有n2+n3个结点。 7.如某二叉树有20个叶子结点,有30个结点仅有一个孩子,则该二叉树的总结点数为69。 算法应用题 1、已知一棵度为m的树中有n1个度为1的结点,n2个度为2的结点,……,nm个度为m的结点,问该树中有多少个叶子结点? 2、已知一棵满二叉树的结点个数为20到40之间的素数,此二叉树的叶子结点有多少个? (请给出具体的推理过程) 3、请采用顺序存储方式和链式存储方式,分别写出下图所示二叉树的存储结构。 A BC DEF GH 4、求出上图所示二叉树的前序、中序和后序序列。 5、以二叉链表做存储结构,试编写按层次顺序(同一层自左至右)遍历二叉树的算法。 6、设一棵二叉树的先序、中序遍历序列分别为 先序遍历序列: ABDFCEGH中序遍历序列: BFDAGEHC (1)画出这棵二叉树。 (2)画出这棵二叉树的后序线索树。 7、假设一个二叉树的两种遍历如下: 前序: ABFGCHDEIJLK中序: FGBHCDILJKEA 画出这棵二叉树以及它的中序线索树; 8、给定一组权值3,27,7,8,14,23,6,12 (1)试画出用Huffman算法建造的Huffman树; (2)求Huffman编码和平均编码长度(考虑概率) 9、已知一棵二叉树的中序和后序序列如下: 中序: GLDHBEIACJFK后序: LGHDIEBJKFCA (1)给出这棵二叉树: (2)转换为对应的森林: 10、将下列森林转化为二叉树。 11、求上述森林的前序和中序序列。 第七章图 选择题 1.设无向图的顶点个数为n,则该图最多有(B)条边。 A.n-1B.n(n-1)/2C.n(n+1)/2D.0E.n2 2.一个n个顶点的连通无向图,其边的个数至少为(A)。 A.n-1B.nC.n+1D.nlogn; 3.一个有n个结点的图,最少有(B)个连通分量,最多有(D)个连通分量。 A.0B.1C.n-1D.n 4.在一个无向图中,所有顶点的度数之和等于所有边数(B)倍,在一个有向图中,所有顶点的入度之和等于所有顶点出度之和的(C)倍。 A.1/2B.2C.1D.4 5.下列哪一种图的邻接矩阵是对称矩阵? (B) A.有向图B.无向图C.AOV网D.AOE网 6.当一个有N个顶点的图用邻接矩阵A表示时,顶点Vi的度是(B)。 A. B. C. D. + 7.下面哪一方法可以判断出一个有向图是否有环(回路): (B) A.深度优先遍历B.拓扑排序C.求最短路径D.广度优先遍历 8.在图采用邻接表存储时,求最小生成树的Prim算法的时间复杂度为(B)。 A.O(n)B.O(n+e)C.O(n2)D.O(n3) 9.求解最短路径的Floyd算法的时间复杂度为(D)。 A.O(n)B.O(n+c)C.O(n*n)D.O(n*n*n) 10.若一个有向图的邻接距阵中,主对角线以下的元素均为零,则该图的拓扑有序序列(A)。 A.存在B.不存在 11.一个有向无环图的拓扑排序序列(B)是唯一的。 A.一定B.不一定 12.在有向图G的拓扑序列中,若顶点Vi在顶点Vj之前,则下列情形不可能出现的是(D)。 A.G中有弧 C.G中没有弧 13.在用邻接表表示图时,拓扑排序算法时间复杂度为(B)。 A.O(n)B.O(n+e)C.O(n*n)D.O(n*n*n) 14.关键路径是事件结点网络中(A)。 A.从源点到汇点的最长路径B.从源点到汇点的最短路径 C.最长回路D.最短回路 15.下列关于AOE网的叙述中,不正确的是(B)。 A.关键活动不按期完成就会影响整个工程的完成时间 B.任何一个关键活动提前完成,那么整个工程将会提前完成 C.所有的关键活动提前完成,那么整个工程将会提前完成 D.某些关键活动提前完成,那么整个工程将会提前完成 判断题 1.有e条边的无向图,在邻接表中有e个结点。 (错) 2.有向图的邻接矩阵是对称的。 (错) 3.任何无向图都存在生成树。 (错) 4.不同的求最小生成树的方法最后得到的生成树是相同的.(错) 5.有环图也能进行拓扑排序。 (错) 6.关键路径是AOE网中从源点到终点的最长路径。 (对) 填空题 1.具有10个顶点的无向图,边的总数最多为45。 2.在有n个顶点的有向图中,若要使任意两点间可以互相到达,则至少需要n条弧。 3.n个顶点的连通无向图,其边的条数至少为n-1。 4.N个顶点的连通图用邻接矩阵表示时,该矩阵至少有无向图: 2(n-1);有向图: n个非零元素。 5.构造连通网最小生成树的两个典型算法是普里姆算法、克鲁斯卡尔算法。 6.有一个用于n个顶点连通带权无向图的算法描述如下: (1).设集合T1与T2,初始均为空; (2).在连通图上任选一点加入T1; (3).以下步骤重复n-1次: a.在i属于T1,j不属于T1的边中选最小权的边; b.该边加入T2。 上述算法完成后,T2中共有n-1条边,该算法称普里姆算法算法,T2中的边构成图的最小生成树。 7.AOV网中,顶点表示活动,弧表示活动间的优先关系。 AOE网中,顶点表示事件,弧表示活动。 8.当一个AOV网用邻接表表示时,可按下列方法进行拓扑排序。 (1).查邻接表中入度为零的顶点,并进栈; (2).若栈不空,则①输出栈顶元素Vj,并退栈;②查Vj的直接后继Vk,对Vk入度处理,处理方法是Vk的入度减1,如为零则进栈; (3).若栈空时,输出顶点数小于图的顶点数,说明有环路,否则拓扑排序完成。 算法应用题 1、对n个顶点的无向图,采用邻接矩阵表示,如何判别下列有关问题 1)图中有多少条边? 2)任意两个顶点i和j是否有边相连? 3)任意一个顶点的度是多少? 2.设G=(V,E)以邻接表存储,试写出深度优先和广度
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 练习 112 答案