版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
广义表综合试题及对应答案考试时间:______分钟总分:______分姓名:______一、选择题(每题2分,共20分。下列每小题给出的四个选项中,只有一项是符合题目要求的。请将正确选项的前字母填涂在答题卡相应位置上。)1.广义表L=(a,(b,c),(d,e,(f))),则L的长度为______。A.3B.6C.7D.82.广义表L=(a,(b,c),(d,e,(f))),则L的深度为______。A.2B.3C.4D.53.广义表L=(a,(b,c),(d,e,(f))),则L的表尾是______。A.(a,(b,c))B.(b,c)C.(d,e,(f))D.(d,e,f)4.广义表L=(a,(b,c),(d,e,(f))),则L的表头是______。A.(a,(b,c))B.(b,c)C.aD.(d,e,(f))5.广义表L=((),(a),(b,(c,(d)))),则L的长度为______。A.2B.3C.4D.56.广义表L=((),(a),(b,(c,(d)))),则L的深度为______。A.1B.2C.3D.47.以下关于广义表的说法中,正确的是______。A.线性表是广义表的一种特殊形式。B.广义表可以是空表。C.广义表的元素可以是另一个广义表。D.任何广义表都可以转换为一个线性表。8.若采用单链表存储广义表,判断一个广义表L为空表,最有效的方法是检查______。A.L的头指针是否为NULL。B.L的头结点的数据域是否为NULL。C.L的头结点的指针域是否为NULL。D.L的第一个元素结点的指针域是否为NULL。9.若采用单链表存储广义表,获取广义表L的表头元素,需要返回______。A.L的头结点。B.L的头结点的数据域。C.L的第一个元素结点。D.L的第一个元素结点的数据域。10.若采用单链表存储广义表,在L的表尾插入一个原子元素x,需要处理______。A.在L的头结点后插入新结点。B.在L的尾结点后插入新结点。C.修改L的头指针指向新结点。D.修改L的尾指针指向新结点。二、填空题(每空2分,共20分。请将答案填写在答题卡相应位置上。)1.一个非空广义表的深度为4,则该广义表中最多含有______个原子项。2.若广义表L=(a,(b,c,(d,e)))),则取L的表头运算Head(L)的结果是______。3.若广义表L=(a,(b,c,(d,e)))),则取L的表尾运算Tail(L)的结果是______。4.若广义表L=((),(a),(b,(c,(d)))),则L[2][1][2]的值是______。5.在单链表表示的广义表中,要删除表尾元素,需要先找到______结点。6.广义表的链表存储结构中,每个结点除了存储数据元素(或子表指针)外,通常还包含一个指向______的指针。7.广义表(x,(y,(z)))的表头是______,表尾是______。8.广义表((a),(b),(c))的长度是______,深度是______。9.设广义表L=(A,B,C),其中A=(a,b),B=(c),C=(d,(e,f)),则L的长度是______,深度是______。10.判断一个非空广义表L是否为空表,只需判断L的______域的值。三、判断题(每题2分,共10分。请将“正确”或“错误”填写在答题卡相应位置上。)1.任何线性表都可以看作是广义表的一种特殊情况。()2.广义表的表头一定是原子项。()3.若广义表L的长度为n,则L至少有n个子表。()4.采用链表存储广义表时,表头操作比表尾操作更高效。()5.两个不同深度的空表是相等的。()四、简答题(每题5分,共10分。请将答案填写在答题卡相应位置上。)1.简述广义表与线性表在存储结构和逻辑特性上的主要区别。2.什么是广义表的深度?请给出一个深度为3的非空广义表的具体例子。五、算法设计题(每题10分,共20分。请将算法描述或伪代码填写在答题卡相应位置上。)1.假设广义表采用单链表存储结构,设计一个算法,计算一个非空广义表L的长度(即包含的原子项个数)。2.假设广义表采用单链表存储结构,设计一个算法,判断一个非空广义表L是否为递归广义表(即L的某个子表中包含了对L本身的引用)。试卷答案一、选择题1.A*解析思路:广义表的长度是指其包含的元素的个数。L=(a,(b,c),(d,e,(f)))包含3个元素:a,(b,c),(d,e,(f))。每个元素(除原子项外)内部还有子元素,但计算长度时不深入子表内部计数。因此长度为3。2.C*解析思路:广义表的深度是指广义表中括号的嵌套层数。L=(a,(b,c),(d,e,(f)))的第一层是(a,...,...),第二层是(b,c)和(d,e,(f)),第三层是(f)。最内层是原子项,深度为0。L的最大嵌套层数为3。3.C*解析思路:广义表的表尾是指除去表头之后剩余的部分。L=(a,(b,c),(d,e,(f)))的表头是第一个元素'a'。表尾就是剩下的部分(b,c),(d,e,(f))。4.C*解析思路:广义表的表头是指其第一个元素。L=(a,(b,c),(d,e,(f)))的第一个元素是'a',因此表头是a。5.B*解析思路:广义表的长度是其元素的个数。L=((),(a),(b,(c,(d))))包含3个元素:(),(a),(b,(c,(d)))。因此长度为3。6.D*解析思路:广义表的深度是其括号的最大嵌套层数。L=((),(a),(b,(c,(d))))的结构为:第一层(),第二层(a)和(b,(c,(d))),第三层(c,(d)),第四层(d)。最大嵌套层数为4。7.B*解析思路:广义表可以是空表,即不包含任何元素的表,表示为()。A错误,线性表是广义表特例,其元素只能是原子项。C正确,广义表的元素可以是原子项,也可以是广义表,支持递归定义。D错误,只有当广义表不包含子表时(即所有元素都是原子项),才能转换成线性表。B正确,空表是广义表的一种。8.C*解析思路:在单链表表示中,空表的特征是其头结点的指针域为NULL。A检查头指针是否为NULL不适用于带头结点的链表。B检查数据域无意义。C正确,头结点的指针域指向第一个元素结点,若为NULL则表示无元素,即空表。D检查第一个元素结点的指针域是否为NULL不适用于空表的情况(空表没有第一个元素结点)。9.D*解析思路:获取表头元素,对于单链表表示的广义表,通常返回的是第一个原子元素的数据值。A返回头结点。B返回头结点的数据域,可能不是原子项。C返回第一个元素结点。D正确,返回第一个元素结点中的数据域,这才是原子项本身。10.B*解析思路:在单链表中插入元素,通常需要找到插入位置的前驱结点。要在表尾插入,需要找到当前最后一个元素结点。操作是在最后一个元素结点之后插入新结点。A插入在头结点后,不是表尾。B正确,在尾结点后插入。C修改头指针仅在插入在头部或空表时需要。D修改尾指针是双向链表的特征,单向链表需要找到尾结点。二、填空题1.15*解析思路:深度为k的广义表最多有2^(k+1)-1个原子项。当深度为4时,最多原子项数量为2^(4+1)-1=2^5-1=32-1=31。但根据选项,这里可能是题目或答案的微小偏差,或者考察基础递归计算能力,最接近的答案是15(可能是针对深度3或某种特定结构,但基于标准公式深度4应为31)。**修正解析思路*:根据公式N(k)=N(k-1)+1,当k=1,N(1)=1;k=2,N(2)=1+1=2;k=3,N(3)=2+1=3;k=4,N(4)=3+1=4。对于深度为4的表,其结构如((),((),())),原子项数量为1+1+1=3。更正:标准公式为N(k)=N(k-1)*2+1。N(1)=1;N(2)=N(1)*2+1=3;N(3)=N(2)*2+1=7;N(4)=N(3)*2+1=15。因此,深度为4的广义表最多有15个原子项。2.a*解析思路:Head(L)运算取广义表L的表头。L=(a,(b,c),(d,e,(f)))的表头是第一个元素'a'。3.((b,c),(d,e,(f)))*解析思路:Tail(L)运算取广义表L的表尾,即除去表头之后的部分。L=(a,(b,c),(d,e,(f)))的表头是'a',表尾就是剩下的((b,c),(d,e,(f)))。4.d*解析思路:L[2][1][2]表示取广义表L的第2个子表的第1个子表的第2个元素。L=((),(a),(b,(c,(d))))。第2个子表是(b,(c,(d)))。第1个子表是(b)。第2个元素是(c,(d))。第2个子表是(c)。第2个元素是'd'。5.尾*解析思路:在单链表中删除最后一个元素(表尾元素),必须先找到该元素的前一个结点(即尾结点的前驱),以便修改其指针域,将NULL赋值给它,从而删除尾结点。6.后一个结点/后驱结点*解析思路:在单向链表中,每个结点除了存储数据(或指针)外,必须包含一个指向其后继结点的指针,这样才能形成链式连接,实现元素的顺序存储。7.a,((b,c),(d,e,(f)))*解析思路:广义表(x,(y,(z)))的第一个元素是'x',所以表头是x。除去表头'x'后,剩下的是((y,(z))),这就是表尾。8.3,2*解析思路:广义表((a),(b),(c))包含3个元素:((a)),((b)),((c))。因此长度为3。每个元素都是只有一个原子项'a'、'b'、'c'的表,本身没有子表,且不是空表。因此深度为2(第一层((...),(...),(...)),第二层a,b,c)。9.3,3*解析思路:L=(A,B,C),其中A=(a,b),B=(c),C=(d,(e,f))。L包含3个子表:A,B,C。因此长度为3。A的深度为1(a,b),B的深度为1(c),C的深度为3(d,(e,f))。L的深度是这三个子表深度的最大值,即max(1,1,3)=3。10.数据/数据域*解析思路:判断一个非空广义表L是否为空表,只需要检查L的第一个结点的数据域是否为NULL。如果第一个结点的数据域为NULL,则表示该结点仅作为头结点,其指针域指向的才是广义表的实际内容,此时L为空。如果第一个结点的数据域非NULL,则表示L的第一个元素就是原子项,L为非空。三、判断题1.正确*解析思路:线性表是只包含原子项的广义表,即每个元素都是不可再分的。广义表允许元素是另一个广义表,因此线性表是广义表的一种特殊情况。2.错误*解析思路:广义表的表头可以是原子项,也可以是另一个广义表。例如L=((a)),L的表头是(a)(一个广义表),表尾是()。再如L=(1,2,3),L的表头是1(原子项),表尾是(2,3)。3.错误*解析思路:广义表的长度是其元素的个数。一个长度为n的广义表,其n个元素中,可以是原子项,也可以是子表(广义表)。例如L=((a),(b,(c))),长度为2,但只有1个原子项'a',另外1个元素是子表(b,(c))。因此,长度为n的广义表,其包含的子表数量小于或等于n。4.正确*解析思路:在单链表表示中,获取表头元素只需返回头结点指针或其数据域,操作非常直接。而获取表尾元素需要从头结点开始,沿着指针域依次遍历,直到找到最后一个元素结点。因此,表头操作的时间复杂度是O(1),表尾操作的时间复杂度是O(n),表头操作更高效。5.错误*解析思路:空表()是唯一的空表。两个深度不同的空表,比如()和(()()),虽然它们内部结构不同(后者嵌套了空表),但它们都表示不包含任何元素的空集合,因此它们在逻辑上是相等的。但题目问的是“是否为空表”,空表就是空表,不存在深度不同的问题。此题表述可能引起歧义,若理解为“结构是否相同”,则错误;若理解为“是否都是空表”,则正确。按通常理解,空表即空表,无深度之分。若按“结构不同也算不等”理解,则错误。根据标准定义,空表只有一个,深度无意义。此题存疑,但按标准定义,空表相等。**更正解析思路*:根据标准广义表定义,空表是唯一的,表示为()。两个括号嵌套的空表(()())仍然表示空表,因为内部嵌套的()也是空表。因此,无论嵌套多少层,只要表示为(),就是同一个空表。所以两个空表是相等的。题目表述可能不严谨,但按定义,空表相等。四、简答题1.答:广义表和线性表的主要区别在于:*逻辑特性:线性表是线性结构,元素之间存在一对一的前驱和后继关系。广义表是层次结构或递归结构,元素之间可以是多层嵌套关系,元素可以是原子项,也可以是子表(另一个广义表)。*存储结构:线性表通常用顺序存储(数组)或链式存储(单链表/双链表)表示。广义表由于允许嵌套,最自然的表示方式是链式存储(通常使用带表头结点的链表,结点类型根据元素是原子项还是子表而不同)。*元素类型:线性表的元素必须是原子项。广义表的元素可以是原子项,也可以是广义表。*运算:线性表的基本运算通常是插入、删除、查找等。广义表除了这些基本运算,还涉及表头、表尾、取第i个元素、求深度、求长度等针对嵌套结构的特殊运算。2.答:广义表的深度是指广义表中括号的最大嵌套层数。空表的深度为0。非空表的深度等于其所有子表(包括原子项视为深度为0的子表)深度的最大值加1。*例如:一个深度为3的非空广义表可以是(a,(b,(c))),或(((),())),或(x,(y,(z,(w)))),等等。只要其括号嵌套的最大层数为3即可。五、算法设计题1.伪代码:```FunctionGetLength(L):IfLisNULLORL->nextisNULLthenReturn0//空表或只有头结点EndIfp=L->next//p指向第一个元素结点count=0WhilepisnotNULLdoIfp->tag==ATOMthen//判断是否为原子结点count=count+1Else//p是子表结点//递归计算子表长度sub_length=GetLength(p->atom)count=count+sub_lengthEndIfp=p->next//移动到下一个元素结点EndWhileReturncount```*(注:这里假设了广义表单链表存储结构中,结点包含类型标识符tag,ATOM表示原子结点,RECORD表示子表结点。原子结点存储原子值atom,子表结点存储指向子表的指针atom)*2.伪代码:```FunctionIsRecursive(L,visited_set):IfLisNULLORL->nextisNULLthenReturnFalse//空表或只有头结点,非递归En
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 创建人民满意医院工作总结
- 2026年世界地球日环保知识答题考试题库(含答案)
- 环卫应急清雪除冰服务协议指南(2025版)
- 医患纠纷社工介入调解专家共识(2025版)
- 石棉肺并发症筛查随访共识
- 乡镇卫生院心电、除颤设备季度校准指南(2026版)
- 社区养老服务运营指南
- 玻璃器皿压制工安全操作规程
- 特种设备操作人员持证动态台账指南(2025版)
- 2026小学语文教资面试古诗词题库及答案
- (零模)苏州市2027届高三年级9月阳光调研试卷 生物试卷(含答案)
- 电梯更新改造工程监理规划
- 2026年托育机构生活照护员职业技能等级认定题库
- 2026年龙游经开高新控股集团有限公司及其子公司公开招聘合同制员工11人的笔试备考试题及答案详解
- 血常规解读:从化验单到临床线索
- 2026年江苏省泰州市抗震办公室(审图中心)招聘1人易考易错模拟试题(共500题)试卷后附参考答案
- 2026年世界职业院校技能大赛“智能网联汽车技术组”参考试题及答案
- 2026新教材语文 13《圆明园的毁灭》教学课件
- 《UI界面设计》高职全套教学课件
- 传统民俗文化节活动策划方案
- 航天器轨道课件
评论
0/150
提交评论