华南理工大学网络教育学院 数据结构同步练习册答案
数据结构综合练习及参考答案

《数据结构》(01111、01211)作业题(一)一、判断题(下列各题,你认为正确的,请在前面的括号内打√,错误的打×。
每题1分,共10分)1、(√)2、(√)3、(√)4、(√)5、(√)6、(╳)7、(√)8、(√)9、(╳)10、(√)(√)1. 数据的存贮结构是数据的逻辑结构的存贮映象。
(√)2. 用顺序表来存储线性表时,不需要另外开辟空间来保存数据元素之间的相互关系。
(√)3. 非线性结构中,至少存在一个元素不止一个直接前趋或不止一个直接后继。
(√)4. 树的最大特点是层次结构。
(√)5. 队列的特点是先进先出。
(╳)6. 图的最小生成树是唯一的。
(√)7. 线性表是广义表的特殊形式。
(√)8. 后序序列和中序序列能唯一确定一棵二叉树。
(╳)9. 散列表是一种链式存贮结构。
(√)10. 快速排序并非在任何情况下都比其它排序方法速度快。
二、填空题(每空2分,共20分)1.数据的存贮结构的四种形式为存贮、存贮、存贮和存贮。
2.所有插入和删除都在表的一端进行的线性表称为。
3.n个结点的完全二叉树,其深度h= 。
4.对于顺序循环队列Q[M],下标从0到M-1,头尾指针分别为F和R,入队时,队尾指针循环加1可表示为R= 。
5.散列法既是一种查找方法,又是一种方法。
6.n个顶点的有向完全图具有条弧。
7.n个元素的顺序查找的平均查找长度为。
三、单选题(本题的每一备选答案中,只有一个是正确的,请把你认为正确的答案的题号填入题干的括号内,多选不给分,每小题3分,共15分)。
1.若进栈序列为1,2,3,4,则不可能得到的出栈序列是()(1)3,2,1,4 (2)3,2,4,1 (3)4,2,3,1 (4) 2,3,4,12.对于下列二叉树,其后序序列为()(1)ABDECFG (2)DBEAFCG (3)DEBFGCA (4)GFCEBDA3.对于下列AOV网,不能出现的拓扑序列为()(1)1 2 3 4 5 (2)1 2 4 3 5 (3)2 4 1 3 5 (4)2 1 4 3 5AB C DEFG题三2图13542题三、3图4.深度为k 的完全二叉树所含叶结点的个数最多为 ( ) (1)2k (2) 2k-1 (3) k (4) 2k 5.衡量查找算法效率的主要标准是 ( ) (1) 元素个数 (2) 所需的存贮量 (3) 平均查找长度 (4) 算法难易程度 四、应用题(25分)1.将下列森林转化为二叉树。
华南理工大学网络教育学院数据库同步练习册答案

华南理工大学网络教育学院数据库同步练习册答案答案:第一章1.A2.A3.D4.A5.C6.A7.数据库管理系统(DBMS)、数据库管理员(DBA)8. 概念模式或逻辑模式9.人工管理、数据库10.概念模式第二章1.B2.C3.C4.C5.A6.A7.B8.109. 课程名,课程号10. 答:外键的充要条件:1) FK和K的取值域是一样的;2) 对于R中任何一个元组t,要么t[FK]上的值为null,要么存在R'中的元组t',使得t[FK]=t'[K]。
作用:形成关系(表)与关系(表)之间的联系11. 答:每个关系应有一个主键,每个元组的主键的应是唯一的。
这就是实体完整性约束。
如关系:student(学号,姓名,性别)中,有一个主键“学号”,每条学生记录的学号都不同,这是就关系student中的实体完整性约束。
12.R4为:ABa1b1a2b113.ПENO(EPM σmanager=’001’(DEPT))= ПENO(σmanager=’001’(EPM╳DEPT))SELECT ENO FROM EMP, DEPT WHERE DEPT.MANAGER=‘001’ AND EMP.DNO=DEPT.DNO14. 答:1.2.客户(身份证号,客户姓名,联系电话,地址,邮政编码)主键:身份证号业务员(业务员代号,业务员姓名,电话号码)主键:业务员代号房间(房间号,居室数,使用面积,建筑面积,单位,金额,合同号)主键:房间号外键:合同号合同(合同号,日期,付款方式,总金额,身份证号,业务员代号)主键:合同号外键:身份证号,业务员代号15.文本框: 客户客户业务员房间购房合同经办出售111mmm司机(驾照号,姓名,地址,邮编,电话)PK=驾照号机动车(牌照号,型号,制造厂,生产日期)PK=牌照号警察(警察编号,姓名)PK=警察编号处罚通知(编号,日期,时间,地点,驾照号,牌照号,警告,罚款,暂扣,警察编号)PK=编号FK=驾照号,牌照号,警察编号第三章1.B2.A3.B4.A5.B6.B7.D8.grant revoke9. (1)select sname from student,course,sc where credit>3 and grade<70 andstudent.sno=sc.sno and /doc/3c2526876.html,o=http://www.doczj .com/doc/3c2526876.html,o(2) ПSNAME(σs.sno=sc.sno and/doc/3c2526876.html,o=http://www.doczj .com/doc/3c2526876.html,o and credit>3 and grade<70 (STUDENT×COURSE×SC))(3) select sname,/doc/3c2526876.html,o,credit from student, course ,sc where grade is nulland student.sno=sc.sno and /doc/3c2526876.html,o=http://www.doczj .com/doc/3c2526876.html,o(4) Select cno,count(sno),max(grade),min(grade), avg(grade) from sc wheregroup by cno order by cno(5) 二步:第一步:CREATE TABLE FGRADE(SNAME VARCHAR(8) NOT NULL,CNO CHAR(6) NOT NULL,文本框: 司机司机机动车警察下发处罚通知包含开出11mmm1GRADE DEC(4,1) DEFAULT NULL);第二步:INSERT INTO FGRADE SELECT SNAME,CNO,GRADE FROM STUDENT,SC WHERESTUDENT.SNO=SC.SNO AND SEX=‘女’;10.(1) select ename,dname from emp,dept where salary>=600 and emp.dno=dept.dno(2)select dname from emp,dept where eno=’001’and emp.dno=dept.dnoПdname(σeno=’001’and emp.dno=dept.dno (emp×dept)) 或者Пdname(emp eno=’001’dept)(3) update emp set salary=salary*1.1 where salary<600 and dno in (select dnofrom dept where dname=’销售部’)(4) 查询编号为“001” 的部门经理的职工号。
2020-华南理工大学网络教育计算机基础 随堂练习及答案

第1章计算机基础知识·1.1计算机的基本概念1.(单选题)世界上第一台电子计算机诞生于()年。
A.1941年B.1946年C.1949年D.1950年参考答案:B问题解析:计算机是一种能自动运行、具有高速运算能力和信息存储能力、在程序控制下完成信息加工工作的电子设备。
1946年世界第一台电子数字计算机ENIAC(The Electronic Numerical Integrator and Calculator)研制成功。
2.(单选题)计算机中的信息都用()来表示。
A.二进制码B.十进制数C.八进制数D.十六进制数参考答案:A问题解析:计算机体系结构的基本思想可以归纳为:(1)计算机中的程序和数据全部采用二进制数表示。
(2)计算机由输入设备、存储设备、运算器、控制器、输出设备组成。
(3)计算机由存储程序控制完成有关工作。
3.(单选题)从()开始计算机高级程序设计语言广泛应用。
A.第1代计算机B.第2代计算机C.第3代计算机D.第4代计算机参考答案:C问题解析:集成电路计算机时期,计算机的体积明显减小,计算机的运算速度和性能明显提高,出现了计算机通信网络。
这一时期微型计算机诞生,计算机广泛应用于各个领域,采用计算机高级程序语言设计程序。
4.(单选题)目前微型计算机采用的电子元件是()。
A.电子管B.晶体管C.集成电路D.大规模集成电路参考答案:D问题解析:按照计算机电子元件的构成,计算机的发展经历了以下阶段:(1)第一代计算机,电子管计算机时期。
(2)第二代计算机,晶体管计算机时期。
(3)第三代计算机,集成电路计算机时期。
(4)第四代计算机,大规模或超大规模集成电路计算机时期。
5.(单选题)世界上第一台电子数字计算机采用的主要逻辑部件是()。
A.电子管B.晶体管C.继电器D.光电管参考答案:A问题解析:第一代计算机电子管计算机。
6.(单选题)计算机能直接执行()。
A.高级语言编写的源程序B.机器语言程序C.英语程序D.十进制程序参考答案:B问题解析:计算机采用机器语言(二进制代码方式)和汇编语言(助记符)方式设计程序。
数据结构(含课程设计)·随堂练习2019春华南理工大学网络教育答案

数据结构(含课程设计),随堂第一章绪论1.(单选题) 计算机所处理的数据一般具备某种内在联系,这是指()。
A、数据和数据之间存在某种关系 B.元素和元素之间存在某种关系C元素内部具有某种结构 D.数据项和数据项之间存在某种关系答题: A. B. C. D. (已提交)参考答案:B问题解析:2.(单选题) 在数据结构中,与所使用计算机无关的是数据的()结构.A.逻辑B.存储C.逻辑和存储D. 物理答题: A. B. C. D. (已提交)参考答案:A问题解析:3.(单选题) 数据结构在计算机中的表示称为数据的()A.存储结构B.抽象数据类型C.顺序结构D.逻辑结构答题: A. B. C. D. (已提交)参考答案:A问题解析:4.(单选题) 在计算机中存储数据时,通常不仅要存储各数据元素的值,还要存储().A.数据的处理方法B.数据元素的类型C.数据元素之间的关系D.数据的存储方法答题: A. B. C. D. (已提交)参考答案:C问题解析:5.(单选题) 在计算机的存储器中表示数据时,逻辑上相邻的两个元素对应的物理地址也是相邻的,这种存储结构称为()A.逻辑结构B.顺序存储结构C.链式存储结构D.以上都正确答题: A. B. C. D. (已提交)参考答案:B问题解析:6.(单选题) 当数据采用链式存储结构时,要求().A.每个结点占用一片连续的存储区域B.所有结点占用一片连续的存储区域C结点的最后一个数据域是指针类型D.每个结点有多少个后继就设多少个指针域答题: A. B. C. D. (已提交)参考答案:A问题解析:7.(单选题) 以下关于算法的说法正确的是().A.算法最终必须由计算机程序实现B.算法等同于程序C算法的可行性是指指令不能有二义性D.以上都是错误的答题: A. B. C. D. (已提交)参考答案:D问题解析:8.(单选题) 算法的时间复杂度与()有关.A问题规模 B.计算机硬件性能C编译程序质量 D.程序设计语言答题: A. B. C. D. (已提交)参考答案:A问题解析:9.(单选题) 算法的主要任务之一是分析()A算法是否具有较好的可读姓,B算法中是否存在语法错误,C算法的功能是否符合设计要求D.算法的执行时间和问题规模之间的关系答题: A. B. C. D. (已提交)参考答案:D问题解析:10.(单选题) 某算法的时间复杂度为O(),表明该算法的()A问题规模是 B执行时间等于C.执行时间与成正比D.问题规模与成正比答题: A. B. C. D. (已提交)参考答案:C问题解析:第二章线性表1.(单选题) 线性表是具有n个()的有限序列.A.关系 B字符C数据元素 D.数据项答题: A. B. C. D. (已提交)参考答案:C问题解析:2.(单选题) 以下关于线性表的叙述中正确的是()A.每个元素都有一个前趋元素和一个后继元素B线性表中至少有一个元素C.线性表中元素的排列次序必须是由小到大或由大到小D.除第一个和最后一个元素外,每个元素都有一个且仅有一个前趋元素和后继元素答题: A. B. C. D. (已提交)参考答案:D问题解析:3.(单选题) 以下关于线性表和有序表的叙述中正确的是()。
数据结构第一次作业华南理工网络教育学院

1判断题(√)1. 数据的逻辑结构与数据元素本身的内容和形式无关。
(X)2. 线性表的逻辑顺序与物理顺序总是一致的。
(√)3. 若有一个叶子结点是二叉树中某个子树的前序遍历结果序列的最后一个结点,则它一定是该子树的中序遍历结果序列的最后一个结点。
(X)4. 对于同一组待输入的关键码集合,虽然各关键码的输入次序不同,但得到的二叉搜索树都是相同的。
(√)5. 最优二叉搜索树的任何子树都是最优二叉搜索树。
(√)6. 在二叉搜索树上插入新结点时,不必移动其它结点,仅需改动某个结点的指针,使它由空变为非空即可。
(√)7. 有n(n≥1)个顶点的有向强连通图最少有n条边。
(X)8. 连通分量是无向图中的极小连通子图。
(X)9. 二叉树中任何一个结点的度都是2。
(X)10. 单链表从任何一个结点出发,都能访问到所有结点。
二、单选题1 向一个有127个元素的顺序表中插入一个新元素并保持原来顺序不变,平均要移动()个元素。
A.8 B. 63.5 C. 63 D. 72 设有一个二维数组A[m][n],假设A[0][0]存放位置在644(10),A[2][2]存放位置在676(10),每个元素占一个空间,则A[3][3]在(A)位置,(10)表明用10进数表示。
A.692(10) B. 626(10) C. 709(10) D. 724(10)3 N个顶点的连通图至少有(A)条边。
A.N-1 B. N C. N+1 D. 04 下面程序的时间复杂度为(C)。
for(int i=0; i<m;i++)for(int j=0; j<n;j++)a[i][j]=i*j;A.O(m2) B. O(n2) C. O(m*n) D. O(m+n)5 设单链表中结点的结构为(data, link)。
已知指针q所指结点是指针p所指结点的直接前驱,若在*q与*p之间插入结点*s,则应执行下列哪一个操作( B )。
A.s->link=p->link; p->link =s; B. q->link=s; s->link =p;C. p->link=s->link; s->link =q;D. p->link=s; s->link =q;6栈的插入和删除操作在(A)进行。
华南理工网络教育计算机网络随堂练习有答案

???随堂练习提交截止时间:2018-06-15 23:59:59当前页有10题,你已做10题,已提交10题,其中答对10题。
??A.??B.??C.??D.???A.??B.??C.??D.???A.??B.??C.??D.???A.??B.??C.??D.???A.??B.??C.??D.? ??A.??B.??C.??D.? ??A.??B.??C.??D.???A.??B.??C.??D.???A.??B.??C.??D.???A.??B.??C.??D.????随堂练习提交截止时间:2018-06-15 23:59:59当前页有10题,你已做10题,已提交10题,其中答对10题。
??A.??B.??C.??D.???A.??B.??C.??D.? ??A.??B.??C.??D.? ??A.??B.??C.??D.???A.??B.??C.??D.? ??A.??B.??C.??D.? ??A.??B.??C.??D.? ??A.??B.??C.??D.???A.??B.??C.??D.???A.??B.??C.??D.????随堂练习提交截止时间:2018-06-15 23:59:59当前页有10题,你已做10题,已提交10题,其中答对9题。
??A.??B.??C.??D.???A.??B.??C.??D.???A.??B.??C.??D.? ??A.??B.??C.??D.? ??A.??B.??C.??D.? ??A.??B.??C.??D.???A.??B.??C.??D.? ??A.??B.??C.??D.? ??A.??B.??C.??D.? ??A.??B.??C.??D.?第3章数据链路层???随堂练习提交截止时间:2018-06-15 23:59:59当前页有2题,你已做2题,已提交2题,其中答对2题。
??B.??C.??D.???A.??B.??C.??D.????随堂练习提交截止时间:2018-06-15 23:59:59当前页有3题,你已做3题,已提交3题,其中答对2题。
华南理工大学网络教育学院 数据结构同步练习册答案

第3章 习题 3
栈、队列
3-1 对于一个适当大小的栈,设输入项序列为 A、B、C、D、E。为得到下列的处理序列,需 要做什么样的运算序列(由 PUSH、POP 组成)?。如果其中某处理序列得不到时,试说明理 由?:① A、B、C、D、E;② B、C、D、E、A;③E、A、B、C、D;④ E、D、C、B、A。 答 : ① PUSH(A), POP(A), PUSH(B), POP(B), PUSH(C), POP(C), PUSH(D), POP(D), PUSH(E), POP(E) ②PUSH(A), PUSH(B), POP(B), PUSH(C), POP(C), PUSH(D), POP(D), PUSH(E), POP(E), POP(A) ③无法实现。 ④PUSH(A), PUSH(B), PUSH(C), PUSH(D), PUSH(E), POP(E), POP(D), POP(C), POP(B), POP(A) 3-2 用链表存放着 n 个字符, 试用算法判断读字符串是否有中心对称关系。 例如 abccba, abcba 都算是中心对称的字符串。要求用尽可能少的时间完成判断(提示:将一半的字符先依次进 栈) 。 答:
2
x++;
由件(x>=(y+1)*(y+1))可知:当 (y+1)*(y+1)刚超过 n 的值时退出循环。
由(y+1)*(y+1)<n 得:y<n^0.5-1 所以,该程序段的执行时间为:向下取整(n^0.5-1) 第2章 习题 2 2.1 描述以下三个概念的区别:头指针、头结点、首元结点。此外叙述有序表的特性何在?, 以及向量与有序表的异同点?,头指针变量和头结点的作用?。并比较顺序存储结构和链式存 储结构的优缺点。 答:首元结点是指链表中的第一个结点,也就是没有直接前驱的那个结点。链表的头指 针是一指向链表开始结点的指引(没有头结点时)。单链表由头指针唯一确定,因此单链表可 以用头指针的名字来命名。头结点是人为地在链表的开始结点之前附加的一个结点。有了头 结点之后.头指针指向头结点,不论链表是否为空,头指针总是非空。而且头指针的设置使 得对链表的第一个位置的操作与在表其他位置上的操作一致(都是在某一结点之后)。 2.2 试写出将链表 L 从某元素 R 处分成两个链表 L 和 K 的算法。R 为 K 表的第一个元素。 答:提示:链表最终将分成两个链表。处理好 L 的尾结点(即 R 的前驱结点) ,和 K 的 头结点(R) 。 void depart_Node(Node *head,int R,Node *head_K) { Node *p=head,*temp; while(p){if(p->data=R)break;temp=p;p=p->next;} temp->next=NUll; head_k->next=p; } 2.3 给定一个 n 项元素的线性表 V,写一个过程,将元素排列的次序颠倒过来。要求占用原 来的空间,并且用顺序表和单表两种方法表示(要求用最少的附加空间来完成) 。 答: 线性表
数据结构(含课程设计)·平时作业2020春华南理工大学网络教育答案

数据结构平时作业1.简述单链表设置头结点的主要作用。
答:设置头结点是为了保证处理第一个节点和后面的节点的时候设计的算法相同,实现程序的高效性2. 简述线性表的顺序和链式两种存储结构各自的主要特点。
答:顺序存储结构的主要特点是:(1)结点中只有自身的信息域,没有关联信息域。
因此,顺序存储结构的存储密度大、存储空间利用率高。
更多作业加威(yaoyao9894)(2)通过计算地址直接访问任何数据元素,即可以随机访问。
(3)插入和删除操作会引起大量元素的移动。
链式存储结构的主要特点是:(1)结点除自身的信息域外,还有表示关联信息的指针域。
因此,链式存储结构的存储密度小、存储空间利用率低。
(2)在逻辑上相邻的结点在物理上不必相邻,因此,不可以随机存取,只能顺序存取。
(3)插入和删除操作方便灵活,不必移动结点只需修改结点中的指针域即可。
3. 说明在线性表的链式存储结构中,试述头结点,首元结点,头指针这三个概念的区别.答:(1)头结点:是为了方便操作链表而附设的,头结点数据域通常用来保存跟链表有关的信息,比如链表的长度;首元结点:就是链表里“正式”的第一个结点,即链表的开始结点;头指针:头指针是指向链表的基地址。
如果链表存在头结点则头指针就是指向头结点的地址,反之指向首元结点的地址。
(2)头结点、首元结点、头指针区别为:性质不同、目的不同、存在情况不同。
4. 设计一个算法,将元素x插入到一个有序(从小到大排序)顺序表的适当位置上,并保持有序性。
答:#include<stdio.h>2 #include<stdlib.h>34 #define LIST_INIT_SIZE 1005 #define LISTINCREMENT 106 typedef struct7 {8 int *elem;//存储空间基址9 int length ;10 int listsize;11 }SqList;1213 void InitList(SqList *L)14 {15 L->elem = (int *)malloc(LIST_INIT_SIZE*sizeof(int));//创建一个空列表16 L->length = 0;//空表长度为017 L->listsize =LIST_INIT_SIZE;//初始存储容量1819 }2021 void InputData(SqList *L)22 {2324 int n;25 int *p;26 p = L->elem;27 printf("请输入列表元素个数:");28 scanf("%d",&n);29 /*进行判断,是否超过列表长度*/30 if(n>L->listsize)//超过存储容量,再分配空间31 {32 L->elem = (int*)realloc(L->elem,(L->listsize+LISTINCREMENT)*sizeof(int));//再分配空间33 L->listsize +=(n+LISTINCREMENT);34 while(n!=0)35 {36 scanf("%d",p);37 p++;38 n--;39 L->length++;40 }41 }42 else43 {4445 while(n!=0)46 {47 scanf("%d",p);48 p++;49 n--;50 L->length++;51 }52 }53 }5455 void DisplayList(SqList *L)//显示顺序列表5657 {58。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
6.3 分别写出题 6.1 所示二叉树的先根,中根和后根序列。 答:先根:ABCDEFGHIJ 二叉树。 答: 由后根遍历序列得到二叉树的根结点 A (后根序列中最后一个结点) ; 在中序序列中, A 的左力是 A 的左子树上的结点,A 的右边是 A 的右子树上的结点;再到后根序列中找左子 树和右子树的根结点,依次类推,直到画出该二叉树。 中根:DCBAFEHJIG 后根:DCBFJIHGEA 6.4 已知一棵二叉树的中根序列和后根序列分别为 BDCEAFHG 和 DECBHGFA,试画出这棵
(4) int x = 91, y = 100;
while (y > 0) { if (x > 100) else x++; } 答:100 解析: x=91; //1 y=100; //1
{
x = x -10; y--;
}
while(y>0) //1101 if(x>100) //1100 { x=x-10; //100 y--; //100 } else x++; //1000 以上程序段右侧列出了执行次数。该程序段的执行时间为: T(n)=O(1)
while ( i <= n ) { k = k+10*i; i++; } 答:n-1
解析: i=1; //1 k=0; //1 while(i<n) //n { k=k+10*i; //n-1 i++; //n-1 } 由以上列出的各语句的频度,可得该程序段的时间消耗: T(n)=1+1+n+(n-1)+(n-1)=3n 可表示为 T(n)=O(n)
x++; y++;
答:O(n2) void recursive (int n) { if (n <= 1) return 1; else return (recursive (n -1) + recursive(n -1)); } 答:O(n) 1.3 设 n 为正整数,试确定下列各程序段中带标号@的语句的频度。
2.4 已知单链表 L 中的结点是按值非递减有序排列的。 试写一算法将值为 x 的结结点插入表 L 中,使得 L 仍然有序。 答: 因已知顺序表 L 是按值非递减有序表, 所以只要从头找起找到第一个比它大(或相等) 的结点数据,把 x 插入到这个数所在的位置就可以了。
2.5 假设分别以两个元素值递增有序的线性表 A, B 表示两个集合 (即同一个线性表中的元素 各不相同) 。现要求构成一个新的线性表 C。C 表示集合 A 与 B 的交,且 C 中元素也递增有 序。试分别以下顺序表和单链表为存储结构,编写实现上述运算的算法。 答:
(5) int x = 0;
for (int i =1; i <= n; i++) for (int j =1; j<=i; j++) for (int k = 1; k <= j; k++) 答:n /2+n (6) int x = n, y = 0; // n>1 while (x >= (y+1)*(y+1)) y++; 答: y -1 解析:
(1) int i =1, k = 0;
while (i <= n-1) 答:n-1
(2) int i =1, j = 0;
{ k = k +10*i; i = i+1; }
while ((i+j) <= n) if (i>j) j++; else i++; 答:n/2
(3) int i =1, k = 0;
if(p1||p2) return 0; else return 1; } 第6章 习题 6 6.1 分别就下图中的二叉树和树回答下列问题:①哪个是根结点?;②哪些是叶子结点?; ③哪 个是 G 的双亲?; ④哪些是 G 的祖先?; ⑤哪些是 E 的子孙?; ⑥哪些是 E 的兄弟?; 哪些是 C 的兄弟?; ⑦结点 B 和 的层数分别是多少?。
2
x++;
由 x=n 且 x 的值在程序中不变,又 while 的循环条件(x>=(y+1)*(y+1))可知:当 (y+1)*(y+1)刚超过 n 的值时退出循环。
由(y+1)*(y+1)<n 得:y<n^0.5-1 所以,该程序段的执行时间为:向下取整(n^0.5-1) 第2章 习题 2 2.1 描述以下三个概念的区别:头指针、头结点、首元结点。此外叙述有序表的特性何在?, 以及向量与有序表的异同点?,头指针变量和头结点的作用?。并比较顺序存储结构和链式存 储结构的优缺点。 答:首元结点是指链表中的第一个结点,也就是没有直接前驱的那个结点。链表的头指 针是一指向链表开始结点的指引(没有头结点时)。单链表由头指针唯一确定,因此单链表可 以用头指针的名字来命名。头结点是人为地在链表的开始结点之前附加的一个结点。有了头 结点之后.头指针指向头结点,不论链表是否为空,头指针总是非空。而且头指针的设置使 得对链表的第一个位置的操作与在表其他位置上的操作一致(都是在某一结点之后)。 2.2 试写出将链表 L 从某元素 R 处分成两个链表 L 和 K 的算法。R 为 K 表的第一个元素。 答:提示:链表最终将分成两个链表。处理好 L 的尾结点(即 R 的前驱结点) ,和 K 的 头结点(R) 。 void depart_Node(Node *head,int R,Node *head_K) { Node *p=head,*temp; while(p){if(p->data=R)break;temp=p;p=p->next;} temp->next=NUll; head_k->next=p; } 2.3 给定一个 n 项元素的线性表 V,写一个过程,将元素排列的次序颠倒过来。要求占用原 来的空间,并且用顺序表和单表两种方法表示(要求用最少的附加空间来完成) 。 答: 线性表
A B E B A C
树、 二叉树
C
F
G
D
E
F
G
D
H I
H
I
J
J
答: 左边的图形 1)A 2)D,J 3)E 右边的图形 1)A 2)D,H,I,J,F,G 3)C 4)C,A 5)H,I,J 6)E 兄弟:D , C 兄弟: B 7) 2 和 4 6.2 分别画出含 3 个结点的无序树与二叉树的所有不同形态。 答: 4)E,A 5)G,H,I,J 6)E 兄弟:B , C 兄弟: F,G 7) 2 和 5
第3章 习题 3
栈、队列
3-1 对于一个适当大小的栈,设输入项序列为 A、B、C、D、E。为得到下列的处理序列,需 要做什么样的运算序列(由 PUSH、POP 组成)?。如果其中某处理序列得不到时,试说明理 由?:① A、B、C、D、E;② B、C、D、E、A;③E、A、B、C、D;④ E、D、C、B、A。 答 : ① PUSH(A), POP(A), PUSH(B), POP(B), PUSH(C), POP(C), PUSH(D), POP(D), PUSH(E), POP(E) ②PUSH(A), PUSH(B), POP(B), PUSH(C), POP(C), PUSH(D), POP(D), PUSH(E), POP(E), POP(A) ③无法实现。 ④PUSH(A), PUSH(B), PUSH(C), PUSH(D), PUSH(E), POP(E), POP(D), POP(C), POP(B), POP(A) 3-2 用链表存放着 n 个字符, 试用算法判断读字符串是否有中心对称关系。 例如 abccba, abcba 都算是中心对称的字符串。要求用尽可能少的时间完成判断(提示:将一半的字符先依次进 栈) 。 答:
6.5 将下图所示的森林转换成二叉树。
A G L
B
C
H
M
N
O
D
E
F
I
J
K Q
P R
答:
6.6 分别画出下图所示各二叉树对应的森林。
A A C B A B C G B A C D H B E I J A C F
答:
6.7 给定权值 7,18,3,32,5,26,12,8,构造相应的哈夫曼树。 答:按权值大小排列后 3 5 7 8 12 18 26 32 只要按照将最小的两个合并, 合并后的值再 入列中(最小的两个出列), 至到列中只有一个值.按上面要求构造哈夫曼树如下: /////树列完后, 可取左树编码 为 0, 右为 1, (左为 1, 右为 0 亦可) [3]`````[5]`````````[7]``````[8] ``\`````/`````````````\``````/ `0`\```/`1```````````0`\````/`1 ````\`/`````````````````\``/ ````(8)`````[12]````````(15)`````[18] ``````\``````/`````````````\``````/ `````0`\````/`1```````````0`\````/`1 ````````\``/`````````````````\``/ ````````(20)``````[26]```````(33)``````[32] ```````````\``````/`````````````\``````/
第1章 习题 1
绪论
1.1 什么是数据、数据元素、原子元素?,它们有何区别?。 答:数据:用以描述客观事物的数、字符以及所有能被计算机接受和处理的符号的集合 称为数据。例如整数、实数、字符、字符串、表格及各种图像、声音等。数据元素:就是数 据的基本单位,在某些情况下,数据元素也称为元素、结点、顶点、记录。数据元素有时可 以由若干数据项组成。原子元素是物理学的概念。 1.2 分析下列程序段的运行时间(时间复杂度) 。 void mystery (int n) { int i, j, k; for (i =1; i < n; i++) for (j = i+1; j <= n; j++) for (k = 1; k<= j; k++); } 答:O(n3) void odd (int n) { int i, j, x = 0, y = 0; for (i =1; i <= n; i++) if odd(i) { for(j = i; j <= n; j++) for( j = 1; j <= i; j++) } }