欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOCX文档下载  

    数据结构习题及答案严蔚敏.docx

    • 资源ID:3560179       资源大小:58.40KB        全文页数:44页
    • 资源格式: DOCX        下载积分:6.99金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要6.99金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    数据结构习题及答案严蔚敏.docx

    数据结构习题及答案严蔚敏 第一章 绪论 一、选择题 1.组成数据的基本单位是 数据项数据类型数据元素数据变量 2.数据结构是研究数据的以及它们之间的相互关系。 理想结构,物理结构 理想结构,抽象结构 物理结构,逻辑结构 抽象结构,逻辑结构 3.在数据结构中,从逻辑上可以把数据结构分成 动态结构和静态结构 紧凑结构和非紧凑结构 线性结构和非线性结构内部结构和外部结构 4.数据结构是一门研究非数值计算的程序设计问题中计算机的 以及它们之间的和运算等的学科。 数据元素计算方法逻辑存储数据映像 结构 关系 运算 算法 5.算法分析的目的是。 找出数据结构的合理性 研究算法中的输入和输出的关系 分析算法的效率以求改进分析算法的易懂性和文档性 6.计算机算法指的是,它必须具备输入、输出和等5个特性。 计算方法排序方法解决问题的有限运算序列调度方法 可执行性、可移植性和可扩充性可行性、确定性和有穷性 确定性、有穷性和稳定性 易读性、稳定性和安全性 二、判断题 1.数据的机内表示称为数据的存储结构。 2.算法就是程序。 3.数据元素是数据的最小单位。 4.算法的五个特性为:有穷性、输入、输出、完成性和确定性。 5.算法的时间复杂度取决于问题的规模和待处理数据的初态。 三、填空题 1.数据逻辑结构包括_、_、_ 和_四种类型,其中树形结构和图形结构合称为_。 2.在线性结构中,第一个结点_前驱结点,其余每个结点有且只有_个前驱结点;最后一个结点_后续结点,其余每个结点有且只有_个后续结点。 3.在树形结构中,树根结点没有_结点,其余每个结点有且只有_个前驱结点;叶子结点没有_结点,其余每个结点的后续结点可以_。 4.在图形结构中,每个结点的前驱结点数和后续结点数可以_。 5.线性结构中元素之间存在_关系,树形结构中元素之间存在_关系,图形结构中元素之间存在_关系。 6.算法的五个重要特性是_、_、_、_、_。 7.数据结构的三要素是指_、_和_。 8.链式存储结构与顺序存储结构相比较,主要优点是_。 9.设有一批数据元素,为了最快的存储某元素,数据结构宜用_结构,为了方便插入一个元素,数据结构宜用_结构。 四、算法分析题 1.求下列算法段的语句频度及时间复杂度 参考答案: 一、选择题 1. C 2.C 3. C 4. A、B 5. C 6.C、B 二、判断题: 1、 2、 × 3、× 4、× 5、 三、填空题 1、线性、树形、图形、集合? ;非线性 2、没有;1;没有;1 3、前驱;1;后继;任意多个 4、任意多个 5、一对一;一对多;多对多6、有穷性;确定性;可行性;输入;输出 7、数据元素;逻辑结构;存储结构 8、插入、删除、合并等操作较方便 9、顺序存储;链式存储 四、算法分析题 for(i=1; i<=n; i+) for(j =1; j <=i ; j+) x=x+1; 分析:该算法为一个二重循环,执行次数为内、外循环次数相乘,但内循环次数不固定,与外循环有关,因些,时间频度T(n)=1+2+3+n=n*(n+1)/2 有 1/4T(n)/n21,故它的时间复杂度为(n2), 即(n)与n2 数量级相同。 2、分析下列算法段的时间频度及时间复杂度 for for (j=1;j<=i;j+) for ( k=1;k<=j;k+) x=i+j-k; 分析算法规律可知时间频度T(n)=1+(1+2)+(1+2+3)+.+(1+2+3+n) 由于有1/6 T/ n3 1,故时间复杂度为(n3) 第二章 线性表 一、选择题 1.一个线性表第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是( ) 110 108100 120 2. 向一个有127个元素的顺序表中插入一个新元素并保持原来顺序不变,平均要移动个元素。 6463 63.5 7 3.线性表采用链式存储结构时,其地址。 (A) 必须是连续的 (B) 部分地址必须是连续的 (C) 一定是不连续的 (D) 连续与否均可以 4. 在一个单链表中,若p所指结点不是最后结点,在p之后插入s所指结点,则执行 s->next=p;p->next=s; s->next=p->next;p->next=s; s->next=p->next;p=s; p->next=s;s->next=p; 5.在一个单链表中,若删除p所指结点的后续结点,则执行 p->next=p->next->next; p=p->next; p->next=p->next->next; p->next=p->next; p =p->next->next; 6.下列有关线性表的叙述中,正确的是 线性表中的元素之间隔是线性关系 线性表中至少有一个元素 线性表中任何一个元素有且仅有一个直接前趋 线性表中任何一个元素有且仅有一个直接后继 7.线性表是具有n个的有限序列表元素 字符 数据元素 数据项 二、判断题 1.线性表的链接存储,表中元素的逻辑顺序与物理顺序一定相同。 2.如果没有提供指针类型的语言,就无法构造链式结构。 3.线性结构的特点是只有一个结点没有前驱,只有一个结点没有后继,其余的结点只有一个前驱和后继。 4.语句p=p->next完成了指针赋值并使p指针得到了p指针所指后继结点的数据域值。 5.要想删除p指针的后继结点,我们应该执行q=p->next ; p->next=q->next; free(q)。 三、填空题 1.已知P为单链表中的非首尾结点,在P结点后插入S结点的语句为:_ 。 2.顺序表中逻辑上相邻的元素物理位置( )相邻, 单链表中逻辑上相邻的元素物理位置_相邻。 3.线性表L采用顺序存储,假定在不同的n1个位置上插入的概率相同,则插入一个新元素平均需要移动的元素个数是_ 4.在非空双向循环链表中,在结点q的前面插入结点p的过程如下: p->prior=q->prior; q->prior->next=p; p->next=q; _; 5.已知L是无表头结点的单链表,是从下列提供的答案中选择合适的语句序列,分别实现: 表尾插入s结点的语句序列是_ (2) 表尾插入 s结点的语句序列是_ 1. p->next=s; 2. p=L; 3. L=s; 4. p->next=s->next; 5. s->next=p->next; 6. s->next=L; 7. s->next=null; 8. while(p->next!= Q)? p=p-next; 9. while(p->next!=null) p=p->next; 四、算法设计题 1.试编写一个求已知单链表的数据域的平均值的函数。 2.已知带有头结点的循环链表中头指针为head,试写出删除并释放数据域值为x的所有结点的c函数。 3.某百货公司仓库中有一批电视机,按其价格从低到高的次序构成一个循环链表,每个结点有价格、数量和链指针三个域。现出库m台价格为h的电视机,试编写算法修改原链表。 4.某百货公司仓库中有一批电视机,按其价格从低到高的次序构成一个循环链表,每个结点有价格、数量和链指针三个域。现新到m台价格为h的电视机,试编写算法修改原链表。 5.线性表中的元素值按递增有序排列,针对顺序表和循环链表两种不同的存储方式,分别编写C函数删除线性表中值介于a与b之间的元素。 6.设A=(a0,a1,a2,.,an-1),B=(b0,b1,b2,.,bm-1)是两个给定的线性表,它们的结点个数分别是n和m,且结点值均是整数。 若n=m,且 ai= bi ,则A=B; 若n<m ,且ai=bi ,则A<B; 若存在一个j, j<m ,j<n ,且ai=bi , 若aj<bj,则A<B,否则 A>B。 试编写一个比较A和B的C函数,该函数返回 -1或 0或 1,分别表示 A<B或 A=B或 A>B。 7.试编写算法,删除双向循环链表中第k个结点。 8.线性表由前后两部分性质不同的元素组成(a0,a1,.,an-1,b0,b1,.,bm-1),m和n为两部分元素的个数,若线性表分别采用数组和链表两种方式存储,编写算法将两部分元素换位成(b0,b1,.,bm-1,a0,a1,.,an-1),分析两种存储方式下算法的时间和空间复杂度。 9.用循环链表作线性表(a0,a1,.,an-1)和的存储结构,头指针分别为ah和bh,设计C函数,把两个线性表合并成形如的线性表,要求不开辟新的动态空间,利用原来循环链表的结点完成合并操作,结构仍为循环链表,头指针为head,并分析算法的时间复杂度。 10.试写出将一个线性表分解为两个带有头结点的循环链表,并将两个循环链表的长度放在各自的头结点的数据域中的C函数。其中,线性表中序号为偶数的元素分解到第一个循环链表中,序号为奇数的元素分解到第二个循环链表中。 11.试写出把线性链表改为循环链表的C函数。 12.己知非空线性链表中x结点的直接前驱结点为y,试写出删除x结点的C函数。 参考答案: 一、选择题 1. B 2.C 3. D 4. B 5. A 6.A 7、C 二、判断题: 参考答案:1、×2、3、×4、×5、 三、填空题 1、s->next=p->next; p->next=s; 2、一定;不一定 3、n/2 4、q->prior=p; 5、(1)6) 3) (2) 2) 9)1) 7) 四、算法设计题 1、 #include "stdio.h" #include "malloc.h" typedef struct node int data; struct node *link; NODE; int aver(NODE *head) int i=0,sum=0,ave; NODE *p; p=head; while(p!=NULL) p=p->link;+i; sum=sum+p->data; ave=sum/i; return (ave); 2、 #include "stdio.h" #include "malloc.h" typedef struct node int data; /* 假设数据域为整型 */ struct node *link; NODE; void del_link(NODE *head,int x) /* 删除数据域为x的结点*/ NODE *p,*q,*s; p=head; q=head->link; while(q!=head) if(q->data=x) p->link=q->link; s=q; q=q->link; free(s); else p=q; q=q->link; 3、 void del(NODE *head,float price,int num) NODE *p,*q,*s; p=head;q=head->next; while(q->price<price&&q!=head) p=q; q=q->next; if(q->price=price) q->num=q->num-num; else printf("无此产品"); if(q->num=0) p->next=q->next; free(q); 4、 #include "stdio.h" #include "malloc.h" typedef struct node float price; int num; struct node *next; NODE; void ins(NODE *head,float price,int num) NODE *p,*q,*s; p=head;q=head->next; while(q->price<price&&q!=head) p=q; q=q->next; if(q->price=price) q->num=q->num+num; else s=(NODE *)malloc(sizeof(NODE); s->price=price; s->num=num; s->next=p->next; p->next=s; 5、顺序表: 算法思想:从0开始扫描线性表,用k记录下元素值在a与b之间的元素个数,对于不满足该条件的元素,前移k个位置,最后修改线性表的长度。 void del int i=0,k=0; while NODE *rh,*qh,*r,*q,*p; int i=0,j=0;/*i为序号是奇数的结点个数 j为序号是偶数的结点个数 */ p=a; rh=malloc);/*rh为序号是奇数的链表头指针 */ qh=(NODE *)malloc(sizeof(NODE); /*qh为序号是偶数的链表头指针 */ r=rh; q=qh; while(p!=NULL) r->link=p; r=p; i+; p=p->link; if(p!=NULL) q->link=p; q=p; j+; p=p->link; rh->data=i; r->link=rh; qh->data=j; q->link=qh; 11. typedef struct node elemtype data; struct node *link; NODE; void change(NODE *head) NODE *p; p=head; if(head!=NULL) while(p->link!=NULL) p=p->link; p->link=head; 12. typedef struct node elemtype data; struct node *link; NODE; void del(NODE *x,NODE *y) NODE *p,*q; elemtype d1; p=y; q=x; while(q->next!=NULL) /* 把后一个结点数据域前移到前一个结点*/ p->data=q->data; q=q->link; p=q; p->link=NULL; /* 删除最后一个结点*/ free(q); 第三章 栈和队列 一、选择题 1. 一个栈的入栈序列是a,b,c,d,e,则栈的不可能的输出序列是。 edcbadecbadceab abcde 2.栈结构通常采用的两种存储结构是。 线性存储结构和链表存储结构散列方式和索引方式 链表存储结构和数组 线性存储结构和非线性存储结构 3.判定一个栈ST(最多元素为m0)为空的条件是。 ST-top!=0 ST-top=0 ST-top!=m0 ST-top=m0 4.判定一个栈ST(最多元素为m0)为栈满的条件是。 ST->top!=0 ST->top=0 ST->top!=m0-1ST->top=m0-1 5.一个队列的入列序列是1,2,3,4,则队列的输出序列是。 4,3,2,11,2,3,41,4,3,23,2,4,1 6.循环队列用数组A0,m-1存放其元素值,已知其头尾指针分别是front和rear则当前队列中的元素个数是 (rear-front+m)%m rear-front+1 rear-front-1rear-front 7.栈和队列的共同点是 都是先进后出 都是先进先出 只允许在端点处插入和删除元素没有共同点 8.表达式a*(b+c)-d的后缀表达式是。 abcd*+-abc+*d- abc*+d-+*abcd 9.4个元素a1,a2,a3和a4依次通过一个栈,在a4进栈前,栈的状态,则不可能的出栈序是 (A)a4,a3,a2,a1 (B)a3,a2,a4,a1 (C)a3,a1,a4,a2 (D)a3,a4,a2,a1 10.以数组Q0.m1存放循环队列中的元素,变量rear和qulen分别指示循环队列中队尾元素的实际位置和当前队列中元素的个数,队列第一个元素的实际位置是 (A)rearqulen (B)rearqulenm (C)mqulen (D)1% m 二、填空题 1.栈的特点是_,队列的特点是_。 2.线性表、栈和队列都是_结构,可以在线性表的_位置插入和删除元素,对于栈只能在_插入和删除元素,对于队列只能在_插入元素和_删除元素。 3.一个栈的输入序列是12345,则栈有输出序列12345是_。(正确/错误) 4.设栈S和队列Q的初始状态皆为空,元素a1,a2,a3,a4,a5和a6依次通过一个栈,一个元素出栈后即进入队列Q,若6个元素出队列的顺序是a3,a5,a4,a6,a2,a1则栈S至少应该容纳_个元素。 三、算法设计题 1.假设有两个栈s1和s2共享一个数组stackM,其中一个栈底设在stack0处,另一个栈底设在stackM-1处。试编写对任一栈作进栈和出栈运算的C函数push (A)一个串的字符个数即该串的长度 (B)一个串的长度至少是1 (C)空串是由一个空格字符组成的串 (D)两个串S1和S2若长度相同,则这两个串相等 2.字符串"abaaabab"的nextval值为(? ) (A)(0,1,01,1,0,4,1,0,1) (B)(0,1,0,0,0,0,2,1,0,1) (C)(0,1,0,1,0,0,0,1,1) (D)(0,1,0,1,0,1,0,1,1) 3.字符串满足下式,其中head和tail的定义同广义表类似,如head(xyz)= x,tail(xyz)= yz,则s=( )。 concat(head(tail(s),head(tail(tail(s)= dc。 (A)abcd (B)acbd (C)acdb (D)adcb 4.串是一种特殊的线性表,其特殊性表现在 (A)可以顺序存储 (B)数据元素是一个字符 (C)可以链式存储 (D)数据元素可以是多个字符 5设串S1=ABCDEFG,s2=PQRST,函数CONCAT返回X和Y串的连接串,SUBSTR返回串S从序号I开始的J个字符组成的字串,LENGTH返回串S的长度,则CONCAT),SUBSTR,2)的结果串是 BCDEF (B) BCDEFG (C)BCPQRST (D)BCDEFEF 二、算法设计 1.分别在顺序存储和一般链接存储两种方式下,用C语言写出实现把串s1复制到串s2的串复制函数strcpy(s1,s2)。 2.在一般链接存储(一个结点存放一个字符)方式下,写出采用简单算法实现串的模式匹配的C语言函数int L_index(t,p)。 参考答案: 一、选择题 1. A 2.B 3. D 4. D 5. D 二、算法设计 1. 顺序存储: #include "string.h" #define MAXN 100 char sMAXN; int S_strlen(char s) int i; for(i=0;si!='0'i+); return(i); void S_strcpy(char s1,char s2) /4.3题 int i; for(i=0;s1i!='0'i+) s2i=s1i; s2i='0' 一般链接存储: #include "stdio.h" typedef struct node char data; struct node *link; NODE; NODE *L_strcpy(NODE *s1) NODE *s2,*t1,*t2,*s; if(s1=NULL) return(NULL); else t1=s1; t2=(NODE *)malloc(sizeof(NODE); s2=t2; while(t1!=NULL) s=(NODE *)malloc(sizeof(NODE); s->data=t1->data; t2->link=s; t2=s; t1=t1->link; t2->link=NULL; s=s2; s2=s2->link; free(s); return(s2); 2. #include "stdio.h" typedef struct node char data; struct node *link; NODE; int L_index(NODE *t,NODE *p) NODE *t1,*p1,*t2; ?int i; t1=t;i=1; while(t1!=NULL) p1=p; t2=t1->link; while(p1->data=t1->data&&p1!=NULL) p1=p1->link; t1=t1->link; if(p1=NULL) return(i); i+; t1=t2; return(0); 第五章 数组和广义表 一、选择题 1. 常对数组进行的两种基本操作是 建立与删除索引和修改查找和修改查找与索引 2.二维数组M的元素是4个字符(每个字符占一个存储单元)组成的串,行下标i的范围从0到4,列下标j的范围从0到5,M按行存储时元素M35的起始地址与M按列存储时元素( ) 的起始地址相同。 M24M34M35M44 3.数组A810中,每个元素A的长度为3个字节,从首地址SA开始连续存放在存储器内,存放该数组至少需要的单元数是。 80100240270 4.数组A810中,每个元素A的长度为3个字节,从首地址SA开始连续存放在存储器内,该数组按行存放时,元素A74的起始地址为。 SA+141SA+144SA+222SA+225 5.数组A810中,每个元素A的长度为3个字节,从首地址SA开始连续存放在存储器内,该数组按列存放时,元素A47的起始地址为。 SA+141SA+180SA+222SA+225 6.稀疏矩阵一般的压缩存储方法有两种,即。 二维数组和三维数组三元组和散列 三元组和十字链表 散列和十字链表 7.若采用三元组压缩技术存储稀疏矩阵,只要把每个元素的行下标和列下标互换,就完成了对该矩阵的转置运算,这种观点。 正确错误 8.设矩阵A是一个对称矩阵,为了节省存储,将其下三角部分按行序存放在一维数组B1,n(n-1)/2中,对下三角部分中任一元素ai,j(i<=j),在一组数组B的下标位置k的值是。 i(i-1)/2+j-1i(i-1)/2+ji(i+1)/2+j-1 (D)i(i+1)/2+j 二、填空题 1.己知二维数组Amn采用行序为主方式存储,每个元素占k个存储单元,并且第一个元素的存储地址是LOC(A00),则A00的地址是_。 2.二维数组A1020采用列序为主方式存储,每个元素占一个存储单元,并且A00的存储地址是200,则A612的地址是_。 3.有一个10阶对称矩阵A,采用压缩存储方式(以行序为主,且A00=1),则A85的地址是_。 4.设n行n列的下三角矩阵A已压缩到一维数组S1.n*(n+1)/2中,若按行序为主存储,则Aij对应的S中的存储位置是_。 5.若A是按列序为主序进行存储的4×6的二维数组,其每个元素占用3个存储单元,并且A00的存储地址为1000,元素A13的存储地址为_,该数组共占用_个存储单元。 三、算法设计 1.如果矩阵A中存在这样的一个元素Aij满足条件:Aij是第i行中值最小的元素,且又是第j列中值最大的元素,则称之为该矩阵的一个马鞍点。编写一个函数计算出1×n的矩阵A的所有马鞍点。 2.n只猴子要选大王,选举办法如下:所有猴子按1,2,.,n编号围坐一圈,从1号开始按1、2、.、m报数,凡报m号的退出到圈外,如此循环报数,直到圈内剩下只猴子时,这只猴子就是大王。n和m由键盘输入,打印出最后剩下的猴子号。编写一程序实现上述函数。 3.数组和广义表的算法验证程序 编写下列程序: (1)求广义表表头和表尾的函数head和tail。 (2)计算广义表原子结点个数的函数count_GL。 (3)计算广义表所有原子结点数据域(设数据域为整型之和的函数sum_GL。 参考答案: 一、选择题 1. C 2.B 3. C 4. C 5. B 6.C 7、B 8、B 二、填空题 1、loc(A00)+(n*i+j)*k 2、332 3、42 4、i*(i+1)/2+j+1 5、1039;72 三、算法设计题 1. 算法思想:依题意,先求出每行的最小值元素,放入minm之中,再求出每列的最大值元素,放入maxn之中,若某元素既在mini中,又在maxj中,则该元素Aij便是马鞍点,找出所有这样的元素,即找到了所有马鞍点。因此,实现本题功能的程序如下: #include <stdio.h> #define m 3 #define n 4 void minmax(int amn) int i1,j,have=0; int minm,maxn; for(i1=0;i1<m;i1+)/*计算出每行的最小值元素,放入minm之中*/ mini1=ai10; for(j=1;j<n;j+) if(ai1j<mini1) mini1=ai1j; for(j=0;j<n;j+)/*计算出每列的最大值元素,放入maxn之中*/ maxj=a0j; for(i1=1;i1<m;i1+) if(ai1j>max j) maxj=ai1j; for(i1=0;i1<m;i1+) for(j=0;j<n;j+) if(mini1=maxj) printf("(%d,%d):%dn",i1,j,ai1j); have=1; if(!have) printf("没有鞍点n"); 2. 算法思想:本题用一个含有n个元素的数组a,初始时ai中存放猴子的编号i,计数器似的值为0。从ai开始循环报数,每报一次,计数器的值加1,凡报到m时便打印出ai值(退出圈外的猴子的编号),同时将ai的值改为O(以后它不再参加报数),计数器值重新置为0。该函数一直进行到n只猴子全部退出圈外为止,最后退出的猴子就是大王。因此,现本题功能的程序如下: #include "stdio.h" main int a100; int count,d,j,m,n; scanf("%d %d",&m,&n);/* n>=m*/ for(j=0;j<n;j+) aj=j+1; count=0;d=0; while(d<n) for(j=0;j<n;j+) if(aj!=0) count+; if(count=m) printf("% d ",aj); aj=0; count=0; d+; 3. #include "stdio.h" #include "malloc.h" typedef struct node int tag; union struct node *sublist; char data; dd; struct node *link; NODE; NODE *creat_GL(char *s) NODE *h; char ch; ch=*(*s); (*s)+; if(ch!='0') h=(NODE*)malloc(sizeof(NODE); if(ch='(') h->tag=1; h->dd.sublist=creat_GL(s); Else h->tag=0; h->dd.data=ch; else h=NULL; ch=*(*s); (*s)+; if(h!=NULL) if(ch=',') h->link =creat_GL(s); else h->link=NULL; return(h); void prn_GL(NODE *p) if(p!=NULL) if(p->tag=1) printf("("); if(p->dd.sublist =NULL) printf(" "); else prn_GL(p->dd.sublist ); else printf("%c",p->dd.data); if(p->tag=1) printf(")"); if(p->link!=NULL) printf(","); prn_GL(p->link); NODE *copy_GL(NODE *p) NODE *q; if(p=NULL) return(NULL); q=(NODE *)malloc(sizeof(NODE); q->tag=p->tag; if(p->tag) q->dd.sublist =copy_GL(p->dd.sublist ); else q->dd.data =p->dd.data; q->link=copy_GL(p->link); return(q); NODE *head(NODE *p) /*求表头函数 */ return(p->dd.sublist); NODE *tail(NODE *p) /*求表尾函数 */ return(p->link); int sum(NODE *p) /*求原子结点的数据域之和函数 */ int m,n; if(p=NULL) return(0); else if(p->tag=0) n=p->dd.data; else n=sum(p->dd.sublist); if(p->link!=NULL) m=sum(p->link); else m=0; return(n+m); int depth(NODE *p) /*求表的深度函数 */ int h,maxdh; NODE *q; if(p->tag=0) return(0); else if(p->tag=1&&p->dd.sublist=NULL) return 1; else maxdh=0; while(p!=NULL) if(p->tag=0) h=0; else q=p->dd.sublist; h=depth(q); if(h>maxdh)maxdh=h; p=p->link; return(maxdh+1); main NODE *hd,*hc; char s100,*p; p=gets(s); hd=creat_GL(&p); prn_GL(head(hd); prn_GL(tail(hd); hc=copy_GL(hd); printf("copy after:"); prn_GL(hc); printf("sum:%dn",sum(hd); printf("depth:%dn",depth(hd); 第六章 树和二叉树 一、选择题 1.在线索化二叉树中,t所指结点没有左子树的充要条件是 t-left=NULL t-ltag=1 t-ltag=1且t-left=NULL以上都不对 2.二叉树按某种顺序线索化后,任一结点均有指向其前趋和后继的线索,这种说法 正确 错误 不同情况下答案不确定 3.二叉树的前序遍历序列中,任意一个结点均处在其子女结点的前面,这种说法 (A)正确 (B)错误 不同情况下答案不确定 4.由于二叉树中每个结点的度最大为2,所以二叉树是一种特殊的树,这种说法 正确 错误 不同情况下答案不确定 5.设高度为h的二叉树上只有度为0和度为2的结点,则此类二叉树中所包含的结点数至少为。 2h 2h-12h+1h+1 6.已知某二叉树的后序遍历序列是dabec。中序遍历序列是debac,它的前序遍历序列是。 acbed decabdeabc cedba 7.如果T2是由有序树T转换而来的二叉树,那么T中结点的前序就是T2中结点的 前序中序后序层次序 8.某二叉树的前序遍历结点访问顺序是abdgcefh,中序遍历的结点访问顺序是dgbaechf,则其后序遍历的结点访问顺序是。 bdgcefha gdbecfha bdgaechf gdbehfca 9.二叉树为二叉排序树的充分必要条件是其任一结点的值均大于其左孩子的值、小于其右孩子的值。这种说法 正确错误不同情况下答案不确定 10.按照二叉树的定义,具有3个结点的二叉树有种。 3456 11.在一非空二叉树的中序遍历序列中,根结点的右边 只有右

    注意事项

    本文(数据结构习题及答案严蔚敏.docx)为本站会员(牧羊曲112)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开