数据结构作业系统_第五章答案
数据结构第五章 查找 答案

数据结构与算法上机作业第五章查找一、选择题1、若构造一棵具有n个结点的二叉排序树,在最坏情况下,其高度不超过 B 。
A. n/2B. nC. (n+1)/2D. n+12、分别以下列序列构造二叉排序数(二叉查找树),与用其他3个序列所构造的结果不同的是 C :A. (100, 80, 90, 60, 120, 110, 130)B. (100, 120, 110, 130, 80, 60, 90)C. (100, 60, 80, 90, 120, 110, 130)D. (100, 80, 60, 90, 120, 130, 110)3、不可能生成下图所示的二叉排序树的关键字的序列是 A 。
A. 4 5 3 1 2B. 4 2 5 3 1C. 4 5 2 1 3D. 4 2 3 1 54、在二叉平衡树中插入一个结点造成了不平衡,设最低的不平衡点为A,并已知A的左孩子的平衡因子为0,右孩子的平衡因子为1,则应作 C 型调整使其平衡。
A. LLB. LRC. RLD. RR5、一棵高度为k的二叉平衡树,其每个非叶结点的平衡因子均为0,则该树共有 C 个结点。
A. 2k-1-1B. 2k-1+1C. 2k-1D. 2k+16、具有5层结点的平衡二叉树至少有 A 个结点。
A. 12B. 11C. 10D. 97、下面关于B-和B+树的叙述中,不正确的是 C 。
A. B-树和B+树都是平衡的多叉树B. B-树和B+树都可用于文件的索引结构C. B-树和B+树都能有效地支持顺序检索D. B-树和B+树都能有效地支持随机检索8、下列关于m阶B-树的说法错误的是 D 。
A. 根结点至多有m棵子树B. 所有叶子结点都在同一层次C. 非叶结点至少有m/2(m为偶数)或m/2+1(m为奇数)棵子树D. 根结点中的数据是有序的9、下面关于哈希查找的说法正确的是 C 。
A. 哈希函数构造得越复杂越好,因为这样随机性好,冲突小B. 除留余数法是所有哈希函数中最好的C. 不存在特别好与坏的哈希函数,要视情况而定D. 若需在哈希表中删去一个元素,不管用何种方法解决冲突都只要简单地将该元素删去即可10、与其他查找方法相比,散列查找法的特点是 C 。
数据结构第四五六七章作业答案

数据结构第四五六七章作业答案数据结构第四、五、六、七章作业答案第四章和第五章一、填空题1.不包含任何字符(长度为0)的字符串称为空字符串;由一个或多个空格(仅空格字符)组成的字符串称为空白字符串。
2.设s=“a;/document/mary.doc”,则strlen(s)=20,“/”的位置为3。
3.子串的定位操作称为串模式匹配;匹配的主字符串称为目标字符串,子字符串称为模式。
4、串的存储方式有顺序存储、堆分配存储和块链存储5.有一个二维数组a[0:8,1:5],每个数组元素用四个相邻字节存储,内存用字节寻址。
假设存储阵列元素a[0,1]的地址为100,如果以主行顺序存储,则a[3,5]的地址为176,[5,3]的地址为208。
如果按列存储,[7,1]的地址为128,[2,4]的地址为216。
6、设数组a[1…60,1…70]的基地址为2048,每个元素占2个存储单元,若以列序为主序顺序存储,则元素a[32,58]的存储地址为8950。
7、三元素组表中的每个结点对应于稀疏矩阵的一个非零元素,它包含有三个数据项,分别表示该元素的行下标、列下标和元素值。
8、二维数组a[10][20]采用列序为主方式存储,每个元素占10个存储单元,且a[0][0]的存储地址是2000,则a[6][12]的地址是32609.已知二维数组a[20][10]按行顺序存储,每个元素占2个存储单元,a[10][5]的存储地址为1000,则a[18][9]的存储地址为116810。
已知二维数组a[10][20]按行顺序存储,每个元素占2个存储单元,a[0][0]的存储地址为1024,则a[6][18]的地址为130011,两个字符串相等。
充要条件是长度相等,相应位置的字符相同。
12、二维数组a[10][20]采用列序为主方式存储,每个元素占一个存储单元,并且a[0][0]的存储地址是200,则a[6][12]的地址是200+(12*10+6)=326。
数据结构》作业题答案

参考答案第一章、绪论一、选择题1 B;2 A; 3 B;4 C ;5 C; 6 B;7 C;8 C;9 D;10 B。
二、填空题1、存储;2、无,1,无,1;3、前驱,1,后继,任意多个;4、一对一,一对多,多对多;5、时间复杂度,空间复杂度;6、集合,线性结构,树形结构,图形结构;7、顺序结构,链式结构,索引结构,散列结构;8、顺序。
三、问答题与算法题1、3 ;2、T1 ( n ) = 5n 2 -O ( n ) ; T2 ( n ) = 3 n 2 + O ( n ) ; T3 ( n ) = 8 n 2 + O(log n) ;T4 ( n ) = 1.5 n 2 + O ( n ) 。
T4 ( n ) 较优,T3 ( n )较劣。
3、见课本。
第二章线性表一、选择题1C;2A;3D;4B;5D;6B;7C;8B;9A;10C;11D;12D;13C;14C.二、填空题1、O ( 1 ), O ( n );2、单链表,双链表;3、地址,指针;4、4,2;5、便于访问尾结点和头结点;6、前驱;7、L->next== L且L->prior== L;8、顺序。
三、问答题与算法题1、头指针:结点或头结点的指针变量。
其作用是存放第一个结点或头结点的地址,从头指针出发可以找到链表中所有结点的信息。
头结点:是附加在链表的第一个结点之前的一个特殊结点,其数据域一般不存放信息。
其作用是为了简化运算,将空表与非空表统一起来,将第一个结点与其他结点的处理统一起来。
首结点:是链表的第一个结点。
2、(1)基于空间的考虑。
当要求存储的线性表长度变化不大,易于事先确定其大小时,为了节约存储空间,宜采用顺序表;反之,当线性表长度变化大,难以估计其存储规模时,采用动态链表作为存储结构为好。
(2)基于时间的考虑。
若线性表的操作主要是进行查找,很少做插入和删除操作时,采用顺序表做存储结构为宜;反之,若需要对线性表进行频繁地插入或删除等的操作时,宜采用链表做存储结构。
数据结构第五章参考答案

习题51.填空题(1)已知二叉树中叶子数为50,仅有一个孩子的结点数为30,则总结点数为(___________)。
答案:129(2)3个结点可构成(___________)棵不同形态的二叉树。
答案:5(3)设树的度为5,其中度为1~5的结点数分别为6、5、4、3、2个,则该树共有(___________)个叶子。
答案:31(4)在结点个数为n(n>1)的各棵普通树中,高度最小的树的高度是(___________),它有(___________)个叶子结点,(___________)个分支结点。
高度最大的树的高度是(___________),它有(___________)个叶子结点,(___________)个分支结点。
答案:2 n-1 1 n 1 n-1(5)深度为k的二叉树,至多有(___________)个结点。
答案:2k-1(6)(7)有n个结点并且其高度为n的二叉树的数目是(___________)。
答案:2n-1(8)设只包含根结点的二叉树的高度为0,则高度为k的二叉树的最大结点数为(___________),最小结点数为(___________)。
答案:2k+1-1 k+1(9)将一棵有100个结点的完全二叉树按层编号,则编号为49的结点为X,其双亲PARENT (X)的编号为()。
答案:24(10)已知一棵完全二叉树中共有768个结点,则该树中共有(___________)个叶子结点。
答案:384(11)(12)已知一棵完全二叉树的第8层有8个结点,则其叶子结点数是(___________)。
答案:68(13)深度为8(根的层次号为1)的满二叉树有(___________)个叶子结点。
答案:128(14)一棵二叉树的前序遍历是FCABED,中序遍历是ACBFED,则后序遍历是(___________)。
答案:ABCDEF(15)某二叉树结点的中序遍历序列为ABCDEFG,后序遍历序列为BDCAFGE,则该二叉树结点的前序遍历序列为(___________),该二叉树对应的树林包括(___________)棵树。
吉林省专升本数据结构习题及答案——第五章

吉林省专升本考试数据结构分章习题及参考答案———选择题(第五章)1、一棵完全二叉树上有1001个结点,其中叶子结点的个数是( )。
A、250B、500C、254D、5012、将一棵树t转换为孩子—兄弟链表表示的二叉树h,则t的后根序遍历是h 的A、前序遍历B、中序遍历C、后序遍历D、层序遍历3、采用邻接表存储的图,其深度优先遍历类似于二叉树的()。
A、中序遍历B、先序遍历C、后序遍历D、按层次遍历4、二叉树的第5层上最多含有结点数为()A、31B、16C、15D、325、某二叉树中序序列为A,B,C,D,E,F,G,后序序列为B,D,C,A,F,G,E则前序序列是:A、E,G,F,A,C,D,BB、E,A,C,B,D,G,FC、E,A,G,C,F,B,DD、上面的都不对6、若森林F有15条边、25个结点,则F包含树的个数是( )。
A、8B、9C、10D、117、有权值分别为2,3,5,8,7,4的叶子结点生成一棵哈夫曼树,其带权路径长度为()A、36B、72C、96D、1208、任何一棵二叉树的叶子结点在前序、中序、后序遍历序列中的相对次序()A、肯定不发生改变B、肯定发生改变C、不能确定D、有时发生变化9、为5个使用频率不等的字符设计哈夫曼编码,不可能的方案是( ).A、 111,110,10,01,00B、000,001,010,011,1C、100,11,10,1,0D、001,000,01,11,1010、给定二叉树1(2(4,5(6,7)),3)。
设N代表二叉树的根,L代表根结点的左子树,R代表根结点的右子树。
若遍历后的结点序列为3,1,7,5,6,2,4则其遍历方式是( )A、LRNB、NRLC、RLND、RNL11、若以{4,5,6,7,8}作为权值构造哈夫曼树,则该树的带权路径长度为()。
A、67B、68C、69D、7012、深度为k的完全二又树至少有( )个结点。
A、2k-2+1B、2k-1C、2k-1D、2k-1-113、一个具有1025个结点的二叉树的高h为()A、11B、10C、11至1025之间D、10至1024之间14、设F是一个森林,B是由F变换得的二叉树。
数据结构第五章考试题库(含答案)

第 5 章数组和广义表一、选择题为第一元素,其存储地址为1,1.设有一个10阶的对称矩阵A,采用压缩存储方式,以行序为主存储,a11的地址为()。
【燕山大学 2001 一、2 (2分)】每个元素占一个地址空间,则a85A. 13B. 33C. 18D. 402. 有一个二维数组A[1:6,0:7] 每个数组元素用相邻的6个字节存储,存储器按字节编址,那么这个数组的体积是(①)个字节。
假设存储数组元素A[1,0]的第一个字节的地址是0,则存储数组A的最后一个元素的第一个字节的地址是(②)。
若按行存储,则A[2,4]的第一个字节的地址是(③)。
若按列存储,则A[5,7]的第一个字节的地址是(④)。
就一般情况而言,当(⑤)时,按行存储的A[I,J]地址与按列存储的A[J,I]地址相等。
供选择的答案:【上海海运学院 1998 二、2 (5分)】①-④: A.12 B. 66 C. 72 D. 96 E. 114 F. 120G. 156 H. 234 I. 276 J. 282 K. 283 L. 288⑤: A.行与列的上界相同 B. 行与列的下界相同C. 行与列的上、下界都相同D. 行的元素个数与列的元素个数相同3. 设有数组A[i,j],数组的每个元素长度为3字节,i的值为1 到8 ,j的值为1 到10,数组从内存首地址BA开始顺序存放,当用以列为主存放时,元素A[5,8]的存储首地址为( )。
A. BA+141B. BA+180C. BA+222D. BA+225【南京理工大学 1997 一、8 (2分)】4. 假设以行序为主序存储二维数组A=array[1..100,1..100],设每个数据元素占2个存储单元,基地址为10,则LOC[5,5]=()。
【福州大学 1998 一、10 (2分)】A. 808B. 818C. 1010D. 10205. 数组A[0..5,0..6]的每个元素占五个字节,将其按列优先次序存储在起始地址为1000的内存单元中,则元素A[5,5]的地址是( )。
数据结构第五章习题答案

1.二维数组A行下标i的范围从1到12,列下标j的范围从3到10,采用行序为主序存储,每个数据存储元素占用4个存储单元,该数组的首地址(既A[1][3]的地址)为1200,则A[6][5]的地址为(D)A.1400B.1404C.1372D.13682.有一个M*N的矩阵A,若采用行序为主序进行顺序存储,每个元素占用8个字节,则A ij (1≤i≤M,1≤i≤N)元素的相对字节地址(相对首元素地址而言)为(B)A.((i-1)*N+j)*8B.((i-1)*N+j-1)*8C.(i*N+j-1)*8D.((i-1)*N+j+1)*83.稀疏矩阵一般的压缩存储方法有两种,即(D)A.二维数组和三维数组B.三元组和散列C.散列和十字链表D.三元组和十字链表4.若采用三元组压缩技术存储稀疏矩阵,只要把每个元素的行下标和列下标互换,就完成了对该矩阵的转置运算,这种观点(B)A.正确B.错误5.广义表((a,b),c,d)的表头是(C),表尾是(D)。
A.aB.bC.(a,b)D.(c,d)6.一个广义表的表头总是广义表,这个断言是(B)A.正确B.错误7.二维数组A[10][20]采用列序为主方式存储,每个元素占一个存储单元,并且A[0][0]的存储地址是200,则A[6][12]的地址是(326)8.有一个10阶对称矩阵A,采用压缩存储方式(以行序为主存储,且A[0][0]=1),则A[4][3]的地址是(14)9.一个广义表为(a,(a,b),d,e,((i,j),k)),则该广义表的长度为(5),深度为(3)10.广义表((a),((b),c),(((d))))的表头是((a)),表尾是((((b),c),(((d)))))11.已知广义表A=((a,b,c),(d,e,f)),则广义表运算head(tail(tail(A)))=(e)12.已知广义表GL=(a,(b,c,d),e),运用head和tail函数取出GL中的原子b的运算是(head(head(tail(GL))))13.特殊矩阵和压缩矩阵哪一种压缩存储后会失去随机存取的功能?为什么?答:稀疏矩阵在进行压缩存储后会失去随机存取的功能,因为非零元素的位置没有办法确定。
数据结构与算法第5章课后答案

page: 1The Home of jetmambo - 第 5 章树和二叉树第 5 章树和二叉树(1970-01-01) -第 5 章树和二叉树课后习题讲解1. 填空题⑴树是n(n≥0)结点的有限集合,在一棵非空树中,有()个根结点,其余的结点分成m (m>0)个()的集合,每个集合都是根结点的子树。
【解答】有且仅有一个,互不相交⑵树中某结点的子树的个数称为该结点的(),子树的根结点称为该结点的(),该结点称为其子树根结点的()。
【解答】度,孩子,双亲⑶一棵二叉树的第i(i≥1)层最多有()个结点;一棵有n(n>0)个结点的满二叉树共有()个叶子结点和()个非终端结点。
【解答】2i-1,(n+1)/2,(n-1)/2【分析】设满二叉树中叶子结点的个数为n0,度为2的结点个数为n2,由于满二叉树中不存在度为1的结点,所以n=n0+n2;由二叉树的性质n0=n2+1,得n0=(n+1)/2,n2=(n-1)/2。
⑷设高度为h的二叉树上只有度为0和度为2的结点,该二叉树的结点数可能达到的最大值是(),最小值是()。
【解答】2h -1,2h-1【分析】最小结点个数的情况是第1层有1个结点,其他层上都只有2个结点。
⑸深度为k的二叉树中,所含叶子的个数最多为()。
【解答】2k-1【分析】在满二叉树中叶子结点的个数达到最多。
⑹具有100个结点的完全二叉树的叶子结点数为()。
【解答】50【分析】100个结点的完全二叉树中最后一个结点的编号为100,其双亲即最后一个分支结点的编号为50,也就是说,从编号51开始均为叶子。
⑺已知一棵度为3的树有2个度为1的结点,3个度为2的结点,4个度为3的结点。
则该树中有()个叶子结点。
【解答】12【分析】根据二叉树性质3的证明过程,有n0=n2+2n3+1(n0、n2、n3分别为叶子结点、度为2的结点和度为3的结点的个数)。
⑻某二叉树的前序遍历序列是ABCDEFG,中序遍历序列是CBDAFGE,则其后序遍历序列是()。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
if(ls->tag==ATOM)return 0; for(p=ls;p;p=p->un.ptr.tp) { dep=GListDepth(p->un.ptr.hp); if(max<dep) max=dep; } return max+1; } 5.32④ 试编写判别两个广义表是否相等的递归算法。
C.data[p].j=A.data[k].j; k++;p++; } else { C.data[p].e=B.data[n].e; C.data[p].i=B.data[n].i; C.data[p].j=B.data[n].j; n++; p++; } } if(k>A.tu) while(n<=B.tu) { C.data[p].e=B.data[n].e; C.data[p].i=B.data[n].i; C.data[p].j=B.data[n].j; n++;p++; printf("%d B ",B.data[n].e); } else while(k<=A.tu) { C.data[p].e=A.data[k].e; C.data[p].i=A.data[k].i; C.data[p].j=A.data[k].j; k++;p++; printf("%d A ",C.data[p].e); } C.mu=A.mu; C.nu=A.nu; C.tu=p-1; return TRUE; } 5.23② 三元组表的一种变型是,从三元组表中去掉 行下标域得到二元组表,另设一个行起始向量,其每 个分量是二元组表的一个下标值,指示该行中第一个 非零元素在二元组表中的起始位置。试编写一个算法, 由矩阵元素的下标值 i,j 求矩阵元素。试讨论这种方 法和三元组表相比有什么优缺点。 要求实现以下函数: Status GetElem(T2SMatrix M, int i, int j, ElemTf struct { OLink *rhead,*chead; // 行和列链表头指针向量基址 int mu,nu,tu; // 稀疏矩阵的行数、列数和非零元个数 }CrossList; void OutCSM(CrossList M, void(*Out3)(int, int, int)) /* 用函数 Out3,依次以三元组格式输出十字链表表示的矩阵 */ { int j=0; OLink p; for(j=0;j<=M.mu;j++) { if(M.rhead[j]) for(p=M.rhead[j];p;p=p->right) Out3(p->i,p->j,p->e); } } 5.30③ 试按表头、表尾的分析方法重写求广义表 的深度的递归算法。 要求实现以下函数: int GListDepth(GList ls); /* Return the depth of list */ 广义表类型 GList 的定义: typedef enum {ATOM,LIST} ElemTag; typedef struct GLNode{ ElemTag tag; union { char atom; struct { GLNode *hp, *tp; } ptr; }un; } *GList; int GListDepth(GList ls) /* Return the depth of list */ { int max=0,dep; GList p; if(ls==NULL)return 1;
/* 求二元组矩阵的元素 A[i][j]的值 e
*/
稀疏矩阵的二元组顺序表+行起始向量的类型 T2SMatrix 的定义: typedef struct{ int j; ElemType e; }TwoTuples; typedef struct{ TwoTuples data[MAXSIZE]; int cpot[MAXROW]; // 这个向量存储每一行在二元组中的起始位置 int mu,nu,tu; } T2SMatrix; // 二元组矩阵类型 Status GetElem(T2SMatrix M, int i, int j, ElemType &e) /* 求二元组矩阵的元素 A[i][j]的值 e */ { int k; if(i>M.mu||j>M.nu||i<1||j<1)return ERROR; for(k=M.cpot[i];k<M.cpot[i+1];k++) { if(M.data[k].j==j) { e=M.data[k].e; return OK; } } e=0; return OK; } 5.26③ 试编写一个以三元组形式输出用十字链表 表示的稀疏矩阵中非零元素及其下标的算法。 要求实现以下函数: void OutCSM(CrossList M, void(*Out3)(int, int, int)); /* 用函数 Out3,依次以三元组格式输出十字链表表示的矩阵 */ 稀疏矩阵的十字链表存储表示: typedef struct OLNode { int i,j; // 该非零元的行和列下标 ElemType e; // 非零元素值 OLNode *right,*down; // 该非零元所在行表和列表的后继链域 }OLNode, *OLink;
void OutAtom(GList A, int layer, void(*Out2)(char, int)); /* 递归地用函数 Out2 输出广义表的原子及其所在层次,layer 表示当前层次 */ 广义表类型 GList 的定义: typedef enum {ATOM,LIST} ElemTag; typedef struct GLNode{ ElemTag tag; union { char atom; struct { GLNode *hp, *tp; } ptr; }un; } *GList; void OutAtom(GList A, int layer, void(*Out2)(char, int)) /* 递归地用函数 Out2 输出广义表的原子及其所在层次,layer 表示当前层次 */ { if(A==NULL)return; if(A->tag==ATOM)Out2(A->un.atom,layer); else { OutAtom(A->un.ptr.hp,layer+1,Out2); OutAtom(A->un.ptr.tp,layer,Out2); } } 5.18⑤ 试设计一个算法,将数组 A 中的元素 A[0..n-1]循环右移 k 位,并要求只用一个元素 大小的附加存储,元素移动或交换次数为 O(n)。 要求实现以下函数: void Rotate(Array1D &a, int n, int k); 一维数组类型 Array1D 的定义: typedef ElemType Array1D[MAXLEN]; void Rotate(Array1D &a, int n, int k) /* a[n] contains the elements, /* rotate them right circlely by k sits */ { int i,j,l,p,temp; for(i=1;i<=k;i++)
*/
if(k%i==0&&n%i==0)p=i; for(i=0;i<p;i++) { j=i; l=(j+k)%n; while(l!=i) { if(j==i){temp=a[l];a[l]=a[j];a[j]=temp;} else { temp=a[l]; a[l]=a[i]; a[i]=temp; } j=l; l=(k+j)%n; } } }
5.21④ 假设稀疏矩阵 A 和 B 均以三元组表作为存储结构。 试写出矩阵相加的算法,另设三元组表 C 存放结果矩阵。 要求实现以下函数: Status AddTSM(TSMatrix A,TSMatrix B,TSMatrix &C); /* 三元组表示的稀疏矩阵加法: C=A+B */ 稀疏矩阵的三元组顺序表类型 TSMatrix 的定义: #define MAXSIZE 20 // 非零元个数的最大值 typedef struct { int i,j; // 行下标,列下标 ElemType e; // 非零元素值 }Triple; typedef struct { Triple data[MAXSIZE+1]; // 非零元三元组表,data[0]未用 int mu,nu,tu; // 矩阵的行数、列数和非零元个数 }TSMatrix; Status AddTSM(TSMatrix A,TSMatrix B,TSMatrix &C) /* 三元组表示的稀疏矩阵加法: C=A+B */ { int k=1,n=1,p=1; ElemType ce; if(A.mu!=B.mu||A.nu!=B.nu)return ERROR; while(k<=A.tu&&n<=B.tu) { if(A.data[k].i==B.data[n].i&&A.data[k].j==B.data[n].j) { ce=A.data[k].e+B.data[n].e; if(ce) { C.data[p].i=A.data[k].i; C.data[p].j=A.data[k].j; C.data[p].e=ce; p++; //printf("%d,,%d ",ce,C.data[p-1].e); } k++;n++; } else if(A.data[k].i<B.data[n].i||A.data[k].i==B.data[n].i&&A.data[k].j<B.data[n].j) { C.data[p].e=A.data[k].e; C.data[p].i=A.data[k].i;