《数据结构(Java版)(第2版)》习题解答

合集下载

数据结构(第二版)课后习题答案(王红梅主编)

数据结构(第二版)课后习题答案(王红梅主编)

第1章绪论课后习题讲解1.填空⑴()是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。

【解答】数据元素⑵()是数据的最小单位,()是讨论数据结构时涉及的最小数据单位。

【解答】数据项,数据元素【分析】数据结构指的是数据元素以及数据元素之间的关系。

)、()、()和()。

⑶ 从逻辑关系上讲,数据结构主要分为(【解答】集合,线性结构,树结构,图结构⑷ 数据的存储结构主要有()和()两种基本方法,不论哪种存储结构,都要存储两方面的内容:()和()。

【解答】顺序存储结构,链接存储结构,数据元素,数据元素之间的关系⑸ 算法具有五个特性,分别是()、()、()、()、()。

【解答】有零个或多个输入,有一个或多个输出,有穷性,确定性,可行性⑹ 算法的描述方法通常有()、()、()和()四种,其中,()被称为算法语言。

【解答】自然语言,程序设计语言,流程图,伪代码,伪代码⑺ 在一般情况下,一个算法的时间复杂度是()的函数。

【解答】问题规模⑻设待处理问题的规模为 n,若一个算法的时间复杂度为一个常数,则表示成数量级的形式为(),若为n*log25n ,则表示成数量级的形式为()。

【解答】Ο(1) ,Ο(nlog2n)【分析】用大 O记号表示算法的时间复杂度,需要将低次幂去掉,将最高次幂的系数去掉。

2.选择题⑴ 顺序存储结构中数据元素之间的逻辑关系是由()表示的,链接存储结构中的数据元素之间的逻辑关系是由()表示的。

A 线性结构B 非线性结构C 存储位置D 指针【解答】 C,D【分析】顺序存储结构就是用一维数组存储数据结构中的数据元素,其逻辑关系由存储位置(即元素在数组中的下标)表示;链接存储结构中一个数据元素对应链表中的一个结点,元素之间的逻辑关系由结点中的指针表示。

⑵ 假设有如下遗产继承规则:丈夫和妻子可以相互继承遗产;子女可以继承父亲或母亲的遗产;子女间不能相互继承。

则表示该遗产继承关系的最合适的数据结构应该是()。

《数据结构》课后习题答案(第2版)

《数据结构》课后习题答案(第2版)

《数据结构》课后习题答案(第2版)数据结构课后习题答案(第2版)第一章:基本概念1. 什么是数据结构?数据结构是指数据元素之间的关系,以及相应的操作。

它研究如何组织、存储和管理数据,以及如何进行高效的数据操作。

2. 数据结构的分类有哪些?数据结构可以分为线性结构和非线性结构。

线性结构包括数组、链表、栈和队列;非线性结构包括树和图。

3. 什么是算法?算法是解决特定问题的一系列有序步骤。

它描述了如何输入数据、处理数据,并产生期望的输出结果。

4. 算法的特性有哪些?算法具有确定性、有限性、输入、输出和可行性这五个特性。

5. 数据结构和算法之间的关系是什么?数据结构是算法的基础,算法操作的对象是数据结构。

第二章:线性表1. 顺序表的两种实现方式是什么?顺序表可以通过静态分配或动态分配的方式实现。

静态分配使用数组,动态分配使用指针和动态内存分配。

2. 单链表的特点是什么?单链表由节点组成,每个节点包含数据和一个指向下一个节点的指针。

它的插入和删除操作效率高,但是查找效率较低。

3. 循环链表和双向链表分别是什么?循环链表是一种特殊的单链表,在尾节点的指针指向头节点。

双向链表每个节点都有一个指向前一个节点和后一个节点的指针。

4. 链表和顺序表的区别是什么?链表的插入和删除操作效率更高,但是查找操作效率较低;顺序表的插入和删除操作效率较低,但是查找操作效率较高。

第三章:栈和队列1. 栈是什么?栈是一种特殊的线性表,只能在表的一端进行插入和删除操作。

后进先出(LIFO)是栈的特点。

2. 队列是什么?队列是一种特殊的线性表,只能在表的一端进行插入操作,在另一端进行删除操作。

先进先出(FIFO)是队列的特点。

3. 栈和队列的应用有哪些?栈和队列在计算机科学中有广泛的应用,例如浏览器的前进后退功能使用了栈,操作系统的进程调度使用了队列。

4. 栈和队列有哪些实现方式?栈和队列可以使用数组或链表来实现,还有更为复杂的如双端队列和优先队列。

《数据结构》第二版严蔚敏课后习题作业参考答案(1-7章)

《数据结构》第二版严蔚敏课后习题作业参考答案(1-7章)

第1章4.答案:(1)顺序存储结构顺序存储结构是借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系,通常借助程序设计语言的数组类型来描述。

(2)链式存储结构顺序存储结构要求所有的元素依次存放在一片连续的存储空间中,而链式存储结构,无需占用一整块存储空间。

但为了表示结点之间的关系,需要给每个结点附加指针字段,用于存放后继元素的存储地址。

所以链式存储结构通常借助于程序设计语言的指针类型来描述。

5. 选择题(1)~(6):CCBDDA6.(1)O(1) (2)O(m*n) (3)O(n2)(4)O(log3n) (5)O(n2) (6)O(n)第2章1.选择题(1)~(5):BABAD (6)~(10):BCABD (11)~(15):CDDAC 2.算法设计题(1)将两个递增的有序链表合并为一个递增的有序链表。

要求结果链表仍使用原来两个链表的存储空间, 不另外占用其它的存储空间。

表中不允许有重复的数据。

[题目分析]合并后的新表使用头指针Lc指向,pa和pb分别是链表La和Lb的工作指针,初始化为相应链表的第一个结点,从第一个结点开始进行比较,当两个链表La和Lb均为到达表尾结点时,依次摘取其中较小者重新链接在Lc表的最后。

如果两个表中的元素相等,只摘取La表中的元素,删除Lb表中的元素,这样确保合并后表中无重复的元素。

当一个表到达表尾结点,为空时,将非空表的剩余元素直接链接在Lc表的最后。

void MergeList(LinkList &La,LinkList &Lb,LinkList &Lc){//合并链表La和Lb,合并后的新表使用头指针Lc指向pa=La->next; pb=Lb->next;//pa和pb分别是链表La和Lb的工作指针,初始化为相应链表的第一个结点Lc=pc=La; //用La的头结点作为Lc的头结点while(pa && pb){ if(pa->data<pb->data){pc->next=pa; pc=pa; pa=pa->next;}//取较小者La中的元素,将pa链接在pc的后面,pa指针后移else if(pa->data>pb->data) {pc->next=pb; pc=pb; pb=pb->next;}//取较小者Lb中的元素,将pb链接在pc的后面,pb指针后移else //相等时取La中的元素,删除Lb中的元素{pc->next=pa;pc=pa;pa=pa->next;q=pb->next; delete pb ; pb =q;}}pc->next=pa?pa:pb; //插入剩余段delete Lb; //释放Lb的头结点}(5)设计算法将一个带头结点的单链表A分解为两个具有相同结构的链表B、C,其中B表的结点为A表中值小于零的结点,而C表的结点为A表中值大于零的结点(链表A中的元素为非零整数,要求B、C表利用A表的结点)。

《数据结构》课后习题答案(第2版)

《数据结构》课后习题答案(第2版)

1 填空题(1)数据元素(2)数据项数据元素(3)集合线性结构树结构图结构(4)顺序存储链接存储数据元素数据元素之间的关系(5)零或多个输入一个或多个输出有穷性确定性可行性(6)自然语言程序设计语言流程图伪代码,伪代码(7)问题规模(8)O(1) O(nlog2n)2 选择题(1)C D (2)B (3) B (4) A (5) D (6)A (7) C (8) C E3 判断题×××√×第二章1 填空题(1)表长一半表长位置(2)108(3)p->next=(p->next)->next;(4)运算方便(5)p->next=head;(6)s->next=rear->next rear->next=s; rear=s;q=rear->next->next; rear->next->next=q->next; delete q;(7)O(1) O(n)(8)循环单链表循环双链表双链表2 选择题(1) A B (2) D (3) B (4) A (5) A (6) D(7) B(8) B(9) C(10)B(11)B(12)D(13)A(14)A3 判断题×××××1 填空题(1)1003H(2)顺序栈和链栈top=-1或top==NULL top==数组长度或内存无可用空间(3)栈(4)abc+*d-(5)后进先出先进先出操作位置受限(6)假溢出(7)(rear-front+n)% n(8)O(1) O(n)2 选择题(1) C (2) D (3) C (4) B(5) B(6) B(7) D(8) A(9) C3 判断题×√√××第四章1 填空题(1)数据元素的类型是字符(2)长度相等且对应位置字符相等(3)存取修改顺序存储(4)1140(5)d+41(6)三元组顺序表十字链表2 选择题(1) B (2) D E K (3) B (4) C(5) D(6) C(7) D3 判断题×√√××1 填空题(1)有且仅有一个互不相交(2)度孩子双亲(3)2i-1(n+1)/2 (n-1)/2 (4)2h-1 2h-1(5)2k-1(6)50(7)12(8)CDBGFEA (9)2n n-1 n+1 (10)n n-12 选择题(1) D (2) D (3) B (4) C (5) B C (6) D(7) A(8) A B(9) D A(10)B(11)B(12)C(13)D(14)C3 判断题×√×√×第六章1 填空题(1)0 n(n-1)/2 0 n(n-1) (2)自身(3)邻接矩阵邻接表(4)O(n+e)(5)第j列所有元素之和(6)出度(7)前序栈层序队列(8)O(n2) O(elog2e) (9)回路(10)v i v j v k2 选择题(1) c (2) A G (3) C (4) B (5) D (6) C F(7) B(8) D(9) A(10)A(11)A(12)C(13)A(14)C C F(15)B3 判断题√√××××√×1 填空题(1)顺序存储和链接存储顺序存储按照关键码有序(2) 1 ,7(3)8,59/15(4) 4(5)62(6)开放定址法拉链法(7)散列查找(8)通过关键码计算记录的存储地址并进行一定的比较2 选择题(1) B (2) D B (3) A D (4) D (5) A(6) C(7) C(8) B(9) D(10)A(11)C(12)D3 判断题×××××第八章1 填空题(1)查找(2)正序n-1 反序n(n-1)/2 (3) 3(4) 3(5)O(nlog2n) O(n)(6)n-1(7)50(8)602 选择题(1) C (2) C (3) C (4) B (5) A (6) A(7) B C B(8) C(9) D(10)A D(11)B(12)D,B,E,A,C(13)C,A,D,B,B,D,F(14)C(15)D3 判断题×√××√。

数据结构(第二版)习题答案第3章

数据结构(第二版)习题答案第3章

3.1 选择题第3章线性表的链式存储(1)两个有序线性表分别具有n个元素与m个元素且n≤m,现将其归并成一个有序表,其最少的比较次数是( A )。

A.n B.m C.n− 1D.m + n(2)非空的循环单链表head 的尾结点(由p 所指向)满足( C )。

A.p->next==NULL B.p==NULL C.p->next==head D.p==head (3)在带头结点的单链表中查找x应选择的程序体是( C )。

A.node *p=head->next; while (p && p->info!=x) p=p->next;if (p->info==x) return p else return NULL;B.node *p=head; while (p&& p->info!=x) p=p->next; return p;C.node *p=head->next; while (p&&p->info!=x) p=p->next; return p;D.node *p=head; while (p->info!=x) p=p->next ; return p;(4)线性表若采用链式存储结构时,要求内存中可用存储单元的地址( D )。

A.必须是连续的C.一定是不连续的B.部分地址必须是连续的D.连续不连续都可以(5)在一个具有n个结点的有序单链表中插入一个新结点并保持单链表仍然有序的时间复杂度是( B )。

A.O(1) B.O(n) C.O(n2) D.O(n log2n)(6)用不带头结点的单链表存储队列时,其队头指针指向队头结点,其队尾指针指向队尾结点,则在进行删除操作时( D )。

A.仅修改队头指针C.队头、队尾指针都要修改B.仅修改队尾指针D.队头,队尾指针都可能要修改(7)若从键盘输入n个元素,则建立一个有序单向链表的时间复杂度为( B )。

严蔚敏《数据结构》(第2版)笔记和习题(含考研真题)详解

严蔚敏《数据结构》(第2版)笔记和习题(含考研真题)详解

目录分析
1.2强化习题详解
1.1复习笔记
1.3考研真题与典 型题详解
2.2强化习题详解
2.1复习笔记
2.3考研真题与典 型题详解
3.2强化习题详解
3.1复习笔记
3.3考研真题与典 型题详解
Hale Waihona Puke 4.2强化习题详解4.1复习笔记
4.3考研真题与典 型题详解
5.2强化习题详解
5.1复习笔记
5.3考研真题与典 型题详解
严蔚敏《数据结构》(第2版)笔 记和习题(含考研真题)详解
读书笔记模板
01 思维导图
03 目录分析 05 读书笔记
目录
02 内容摘要 04 作者介绍 06 精彩摘录
思维导图
关键字分析思维导图
习题
数据结构
笔记
名校
复习
重难点
第章
笔记
教材
真题 真题
存储管理
第版
典型
二叉树
习题 题
树 动态
内容摘要
严蔚敏所著的《数据结构》(第2版,清华大学出版社)是我国高校采用较多的计算机专业优秀教材,也被众 多高校指定为计算机专业考研参考书目。作为该教材的辅导书,本书具有以下几个方面的特点:1.整理名校笔记, 浓缩内容精华。在参考了国内外名校名师讲授严蔚敏《数据结构》的课堂笔记基础上,本书每章的复习笔记部分 对该章的重难点进行了整理,同时对重要知识点进行点拨,因此,本书的内容几乎浓缩了配套教材的知识精华。 2.归纳典型题,强化知识考点。为了进一步巩固和强化各章知识难点的复习,特针对该教材的重难点相应整理了 典型强化习题,并对相关知识点进行归纳和延伸,梳理知识点逻辑关系,以达到高效复习的目的。3.精选考研真 题,巩固重难点知识。为了强化对重要知识点的理解,本书精选了部分名校近几年的数据结构考研真题,这些高 校大部分以该教材作为考研参考书目。所选考研真题基本涵盖了各个章节的考点和难点,特别注重联系实际,凸 显当前热点。要深深牢记:考研不同一般考试,概念题(名词解释)要当作简答题来回答,简答题要当作论述题 来解答,而论述题的答案要像是论文,多答不扣分。有的论述题的答案简直就是一份优秀的论文(其实很多考研 真题就是选自一篇专题论文),完全需要当作论文来回答!

数据结构第2版习题答案—严蔚敏

数据结构第2版习题答案—严蔚敏

)。

第2章线性表1 .选择题(1)顺序表中 第一个 元素的存储 地址是100,每个元素的 长度为2,则第5个元素的 地址是( )。

A . 110 答案:B 解释:顺序表中的数据连续存储,所以第D . 120 5个元素的地址为: 100+2*4=108。

(3)向一个有127个元素的顺序表中插入一个新元素并保持原来顺序不变,平均要移 动的元素个数为( )。

C . 63 A . 8 B . 答案:B 解释:平均要移动的元素个数为: (4) 链接存储的存储结构所占存储空间(n/2。

)。

A .分两部分,一部分存放结点值,另一部分存放表示结点间关系的指针 B .只有一部分,存放结点值C .只有一部分,存储表示结点间关系的指针D .分两部分,一部分存放结点值,另一部分存放结点所占单元数答案:A(5) 线性表若采用链式存储结构时,要求内存中可用存储单元的地址(A .必须是连续的C . 一定是不连续的答案:D(6) 线性表1在( B •部分地址必须是连续的D •连续或不连续都可以)情况下适用于使用链式结构实现。

B.需不断对L 进行删除插入 D.L 中结点结构复杂A .需经常修改L 中的结点值C . L中含有大量的结点答案:B解释:链表最大的优点在于插入和删除时不需要移动数据,直接修改指针即可。

(7) 单链表的存储密度( )。

A .大于1 B .等于1答案:C 解释:存储密度是指一个结点数据本身所占的存储空间和整个结点所占的存储空间之比,假设单链表一个结点本身所占的空间为 D ,指针域所占的空间为 N ,则存储密度为:D/(D+N),—定小于 1。

(8) 将两个各有 n 个元素的有序表归并成一个有序表,其最少的比较次数是(C •小于1D •不能确定 B . 2n-1 C . 2n D . n-1C . 100答案:A解释:当第一个有序表中所有的元素都小于(或大于)第二个表中的元素,只需 要用第二个表中的第一个元素依次与第一个表的元素比较,总计比较n 次。

《数据结构》第二版严蔚敏课后习题作业参考答案(1-7章)

《数据结构》第二版严蔚敏课后习题作业参考答案(1-7章)

第1章4.答案:(1)顺序存储结构顺序存储结构是借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系,通常借助程序设计语言的数组类型来描述。

(2)链式存储结构顺序存储结构要求所有的元素依次存放在一片连续的存储空间中,而链式存储结构,无需占用一整块存储空间。

但为了表示结点之间的关系,需要给每个结点附加指针字段,用于存放后继元素的存储地址。

所以链式存储结构通常借助于程序设计语言的指针类型来描述。

5. 选择题(1)~(6):CCBDDA\6.(1)O(1) (2)O(m*n) (3)O(n2)(4)O(log3n) (5)O(n2) (6)O(n)(第2章1.选择题(1)~(5):BABAD (6)~(10): BCABD (11)~(15):CDDAC\2.算法设计题(1)将两个递增的有序链表合并为一个递增的有序链表。

要求结果链表仍使用原来两个链表的存储空间, 不另外占用其它的存储空间。

表中不允许有重复的数据。

[题目分析]合并后的新表使用头指针Lc指向,pa和pb分别是链表La和Lb的工作指针,初始化为相应链表的第一个结点,从第一个结点开始进行比较,当两个链表La和Lb均为到达表尾结点时,依次摘取其中较小者重新链接在Lc表的最后。

如果两个表中的元素相等,只摘取La表中的元素,删除Lb表中的元素,这样确保合并后表中无重复的元素。

当一个表到达表尾结点,为空时,将非空表的剩余元素直接链接在Lc表的最后。

void MergeList(LinkList &La,LinkList &Lb,LinkList &Lc){法设计题(1)将编号为0和1的两个栈存放于一个数组空间V[m]中,栈底分别处于数组的两端。

当第0号栈的栈顶指针top[0]等于-1时该栈为空,当第1号栈的栈顶指针top[1]等于m时该栈为空。

两个栈均从两端向中间增长。

试编写双栈初始化,判断栈空、栈满、进栈和出栈等算法的函数。

数据结构-第二版--课后答案-(陈雁-著)-高等教育出版社

数据结构-第二版--课后答案-(陈雁-著)-高等教育出版社
p=t;
}
return C;
}
8
void Insertx_Linkst (LNode *H, Elemtp a, Elemtp b)
{
s=(LNode *) malloc (sizeof(LNode));
s->data=b;
s->next=NULL;
if(H==NULL)
{
H=s;
}
else
{
p=H;
L->elem[i]=x; /*插入x */
++L->len; /*表长加1 */
return 1;
}
int f(SqList *A,SqList*B)
{
SqList *As=NULL,*Bs=NULL;
int i=1,j,ms=0,ns=0;
k++;
j++;
i++;
}
else
if(A->elem[i].i<B->elem[j].i)
{/*若A当前项的行号小于B当前项的行号,则将A项放入C*/
C->elem[k].i=A->elem[i].i;
C->elem[k].j=A->elem[i].j;
C->elem[k].v=A->elem[i].v;
{
C->elem[k].i=B->elem[j].i;
C->elem[k].j=B->elem[j].j;
C->elem[k].v=B->elem[j].v;
k++;
j++;
}

数据结构(第二版)习题库章节练习题1-9章全

数据结构(第二版)习题库章节练习题1-9章全

数据结构(第二版)习题库章节练习题1-9章全数据结构(第二版)习题库章节练习题1-9章全第一章:引论引论部分为数据结构的开篇,主要介绍了数据结构的基本概念和分类。

在这一章中,我们学习了数据结构的定义、作用以及与算法的关系。

接下来,将为你详细介绍第一章的习题内容。

1. 习题1-1题目:请简述数据结构的定义和作用。

要求:通过一段简洁清晰的语言来回答问题,并给出你的理解。

答案:数据结构是计算机中存储、组织和管理数据的方式。

它旨在将数据以特定的方式进行排列,以便高效地进行存储和检索。

数据结构作为计算机科学的基础,为我们解决实际问题提供了有效的工具和方法。

2. 习题1-2题目:你认为数据结构与算法之间的关系是什么?要求:结合实际案例,详细解释数据结构与算法之间的相互依赖关系。

答案:数据结构和算法是密不可分的,它们之间存在着相互依赖的关系。

数据结构提供了算法操作的基础,而算法则对数据结构进行操作和处理。

例如,在搜索算法中,我们需要合适的数据结构来存储和组织数据,以便能够高效地进行搜索操作。

而无论是数组、链表还是树,都需要通过算法来进行增删改查等操作。

第二章:算法分析算法分析是数据结构中的重要概念,它涉及到算法的运行时间和空间效率。

在这一章中,我们将学习算法分析的基本方法和常用技巧,并通过习题来巩固所学知识。

3. 习题2-1题目:请解释渐进记号中的"O"表示什么意思。

要求:简明扼要地回答问题,并辅以例子说明。

答案:在算法分析中,"O"表示渐进上界。

它描述了算法在最坏情况下的运行时间复杂度。

例如,如果一个算法的时间复杂度为O(n),那么说明该算法的运行时间与输入规模n成正比。

即使输入规模变大,算法的运行时间也不会超过n的某个常数倍。

4. 习题2-2题目:请说明算法的平均情况分析与最坏情况分析有何区别?要求:用简洁的语言说明两种分析方法的不同之处,并给出具体的示例。

答案:算法的平均情况分析和最坏情况分析的区别在于对输入数据的预先假设。

数据结构第二版 主编殷人昆课后答案

数据结构第二版 主编殷人昆课后答案
13
2. 指出下列各算法的功能并求出其时间复杂度.
1) int Prime ( int n ) {
int i = 1 ;
int x = ( int ) sqrt ( n ) ; while ( ++ i <= x ) if ( n% i == 0) break ; if ( i > x ) return 1 ; else return 0 ; } 判断n是否是一个素数, 若是则返回1, 否则返回0, 时间 复杂度为
for ( int i = 1 ; i <= n ; i++ ) for ( int j = 1 ; j<= i ; j++ ) S; A n2 C n(n+1) B n2/2 D n(n+1)/2 3
6. 下面算法的时间复杂度为B O(n). int f ( unsigned int n ) { if ( n==0 || n==1 ) return 1 ; else return n*f ( n - 1 ) ; } A O(1) B O(n) C O(n2) D O(n!)
16
4)
int fun ( int n ) { int i = 1, s = 1 ; while ( s < n ) s += ++i ; return i ; }
求满足不等式1+2+3+...+i >= n的最小i值, 时间复杂 度为O(sqrt (n)) 17
5)
void UseFile (ifstream& inp, int c[10]) {
Quadratic InitQuadratic(float aa=0, float bb=0, float cc=0); Quadratic InitQuadratic( float aa, float bb, float cc ) { Quadratic q ; q.a = aa ; q.b = bb ; q.c = cc ; return q ; }

数据结构(第二版)课后习题答案

数据结构(第二版)课后习题答案

数据结构(第二版)课后习题答案第一章:数据结构概述数据结构是计算机科学中非常重要的一个概念,它用于组织和管理计算机内部存储的数据。

数据结构的设计直接影响到程序的运行效率和对真实世界问题的建模能力。

第二版的《数据结构》教材旨在帮助读者更好地理解和应用数据结构。

为了提高学习效果,每章节后都附有一系列习题。

本文将为第二版《数据结构》教材中的部分习题提供详细的答案和解析。

第二章:线性表2.1 顺序表习题1:请问如何判断顺序表是否为空表?答案:当顺序表的长度为0时,即为空表。

解析:顺序表是用一块连续的内存空间存储数据元素的线性结构。

当顺序表中没有元素时,长度为0,即为空表。

习题2:如何求顺序表中第i个元素的值?答案:可以通过访问顺序表的第i-1个位置来获取第i个元素的值。

解析:顺序表中的元素在内存中是连续存储的,通过下标访问元素时,需要将下标减1,因为数组是从0开始编号的。

2.2 链表习题1:请问链表中的结点包含哪些信息?答案:链表的结点一般包含两部分信息:数据域和指针域。

解析:数据域用于存储数据元素的值,指针域用于存储指向下一个结点的指针。

习题2:如何删除链表中的一个结点?答案:删除链表中的一个结点需要将其前一个结点的指针指向其后一个结点,然后释放被删除结点的内存空间。

解析:链表的删除操作相对简单,只需要通过修改指针的指向即可。

但需要注意释放被删除结点的内存空间,防止内存泄漏。

第三章:栈和队列3.1 栈习题1:如何判断栈是否为空?答案:当栈中没有任何元素时,即为空栈。

解析:栈是一种先进后出(Last In First Out,LIFO)的数据结构,栈顶指针指向栈顶元素。

当栈中没有元素时,栈顶指针为空。

习题2:请问入栈和出栈操作的时间复杂度是多少?答案:入栈和出栈操作的时间复杂度均为O(1)。

解析:栈的入栈和出栈操作只涉及栈顶指针的改变,不受栈中元素数量的影响,因此时间复杂度为O(1)。

3.2 队列习题1:请问队列可以用哪些方式实现?答案:队列可以用数组或链表来实现。

数据结构第2版习题答案

数据结构第2版习题答案

数据结构第2版习题答案第1章:引言数据结构是计算机科学中非常重要的一个领域,它关注如何以高效的方式组织和存储数据,以及如何在数据集合中进行操作和处理。

本章将回答《数据结构第2版》中的习题,帮助读者更好地理解和掌握数据结构。

第2章:算法分析习题1:算法复杂度问题描述:给定一个算法中的递归函数,分析其时间复杂度。

解答:对于递归算法的时间复杂度分析,可以使用递归树或者递推关系式来求解。

根据习题中给出的递归函数具体形式,我们可以推导出其递归关系式,并通过求解递推关系式确定时间复杂度。

习题2:渐进符号问题描述:给定两个函数f(n)和g(n),证明f(n)的渐进复杂度小于等于g(n)的渐进复杂度。

解答:为了证明f(n)的渐进复杂度小于等于g(n)的渐进复杂度,我们需要使用大O符号进行形式化的证明。

通过定义和性质的证明,可以得出结论。

第3章:线性表习题3:线性表的实现问题描述:实现一个线性表的数据结构,并给出相关操作的算法。

比如插入元素、删除元素、查找元素等。

解答:一个线性表可以通过数组或链表来实现。

我们可以定义一个包含元素和相关操作的类来表示线性表。

在插入、删除、查找元素等操作中,可以通过遍历或者索引等方式来实现。

习题4:线性表的应用问题描述:举例介绍线性表的应用场景,并分析其对应的实现方法和复杂度。

解答:线性表的应用场景非常广泛,比如数组、链表、队列、栈等。

我们可以通过具体的案例,如存储学生成绩、处理任务队列、实现表达式求值等,来说明线性表的应用和对应的实现方法。

第4章:栈和队列习题5:栈和队列的实现问题描述:实现一个栈和队列的数据结构,并给出相关操作的算法。

解答:栈和队列可以通过数组或链表来实现。

我们可以定义相应的类来表示栈和队列,并实现相关操作,如入栈、出栈、入队、出队等。

习题6:栈和队列的应用问题描述:举例介绍栈和队列的应用场景,并分析其对应的实现方法和复杂度。

解答:栈和队列的应用非常广泛,比如表达式求值、括号匹配、图的深度优先搜索等。

数据结构陈惠南主编第二版习题答案1 9章 全

数据结构陈惠南主编第二版习题答案1 9章 全

第一章绪论1.(第18页,第(5)题)确定下列各程序段的程序步,确定划线语句的执行次数,计算它们的渐近时间复杂度。

(1) i=1; k=0;do {k=k+10*i; i++;} while(i<=n-1)划线语句的执行次数为 n-1 。

(2)i=1; x=0;do{x++; i=2*i;} while (i<n);划线语句的执行次数为?logn?。

2(3) for(int i=1;i<=n;i++)for(int j=1;j<=i;j++)for (int k=1;k<=j;k++)x++;划线语句的执行次数为n(n+1)(n+2)/6 。

(4)x=n;y=0;while(x>=(y+1)*(y+1)) y++;划线语句的执行次数为??n ?。

第二章线性表1.第37页习题(2).2在类LinearList 中增加一个成员函数,将顺序表逆置,实现该函数并分析算法的时间复杂度。

不利用类SeqList 提供的操作直接实现。

template <class T>void SeqList<T>::Invert(){T e;for (int i=1;i<=length/2;i++){e=elements[i-1];elements[i-1]=elements[length-i];elements[length-i]=e;}}2.第37页习题(5)在类SingleList中增加一个成员函数,将单链表逆置运算,直接实现该函数并分析其时间复杂度。

template <class T>void SingleList<T>::invert(){Node<T> *p=first,*q;first=NULL;while (p){q=p->link; p->link=first;first=p; p=q;}}中增加一个成SingleList题)单链表中结点按元素值递增链接,在类(第 3.37页,第7 。

《数据结构(Java版)(第2版)》习题解答

《数据结构(Java版)(第2版)》习题解答

数据结构(Java版)(第2版)习题解答叶核亚编著目录第0章Java程序设计基础 (1)【习0.1】实验0.1 哥德巴赫猜想。

(1)【习0.2】实验0.2 杨辉三角形。

(1)【习0.3】实验0.3 金额的中文大写形式。

(1)【习0.4】实验0.4 下标和相等的数字方阵。

(1)【习0.5】实验0.5 找出一个二维数组的鞍点 (2)【习0.6】实验0.6 复数类。

(2)【习0.7】实验0.8 图形接口与实现图形接口的类 (2)第1章绪论 (3)【习1.1】实验1.1 判断数组元素是否已按升序排序。

(3)【习1.2】实验1.3 用递归算法求两个整数的最大公因数。

(3)第2章线性表 (5)【习2.1】习2-5 图2.19的数据结构声明。

(5)【习2.2】习2-6 如果在遍历单链表时,将p=p.next语句写成p.next=p,结果会怎样? (5)【习2.3】实验2.2 由指定数组中的多个对象构造单链表。

(5)【习2.4】实验2.2 单链表的查找、包含、删除操作详见8.2.1。

(5)【习2.5】实验2.2 单链表的替换操作。

(6)【习2.6】实验2.2 首尾相接地连接两条单链表。

(6)【习2.7】实验2.2 复制单链表。

(6)【习2.8】实验2.2 单链表构造、复制、比较等操作的递归方法。

(7)【习2.9】建立按升序排序的单链表(不带头结点)。

(8)【习2.10】实验2.6 带头结点的循环双链表类,实现线性表接口。

(10)【习2.11】实验2.5 建立按升序排序的循环双链表。

(14)第3章栈和队列 (17)【习3.1】习3-5 栈和队列有何异同? (17)【习3.2】能否将栈声明为继承线性表,入栈方法是add(0,e),出栈方法是remove(0)?为什么? (17)【习3.3】能否用一个线性表作为栈的成员变量,入栈方法是add(0,e),出栈方法是remove(0)?为什么? (17)【习3.4】能否将队列声明为继承线性表,入队方法是add(e),出队方法是remove(0)?为什么? (17)第4章串 (18)【习4.1】实验4.6 找出两个字符串中所有共同的字符。

数据结构(第二版)复习题及答案

数据结构(第二版)复习题及答案

复习题一、选择:1、数据的基本单位是( B ),在计算机中作为整体进行处理A、数据项B、数据元素C、数据对象D、数据结构2、在一个顺序表中,如果第一个元素的存储地址为100,每个元素的长度为2,则第5个元素的地址为(B )计算过程:100+(5-1)*2=108A、110B、108C、100D、1203、链表不具备的特点是(A )A、可以随机访问B、插入删除不必移动元素C、不必事先估计存储空间D、所需空间与其长度成正比4、在一个长度为n的顺序表的第i个元素前插入一个元素时,需要向后移动( A )个元素A 、n - i +1 B、n – i C、n – i – 1 D、i5、在一个单链表中,如果在P所指的结点后插入S所指结点,则执行( B )A、s ->next = p p -> next =sB、s ->next =p ->next p ->next = sC、s -> next = p -> next p = sD、p - >next = s s->next =p6、删除一个长度为n的顺序表的第i个元素,需要向前移动( B )个元素A 、n - i +1 B、n – i C、n – i – 1 D、i7、从一个具有n个结点的单链表中查找其值为x的结点,在查找成功的情况下,需要比较( D )个结点A 、n B、n /2 C、(n – 1)/2 D、(n + 1)/28、在一个单链表中,q是p 所指结点的前趋结点,如果在q和p之间插入s结点,则执行( C )A、s->next = p->next p->next =sB、p->next =s>next s->next = pC、q->next =s s->next = pD、p->next =s s->next = q9、使带头结点的单链表为空的判定条件是( B )A、head = NULLB、head -> next = = NULLC、head - >next = headD、head ! = NULL10、在一个具有n个结点的有序链表中插入一个新结点并仍然有序的时间复杂度是( B )A、O(1)B、O(n)C、O(n2)D、O(nlog2n)11、如果1,2,3依次进栈,则出栈顺序不可能是( C )A、3 2 1B、2 1 3C、3 1 2D、1 3 2解析:1 2 3分别进栈→3 2 1分别出栈1进2进→2出1出3进→ 3出1进→1出2进3进→3出2出12、非空的循环单链表head的尾结点P满足( C )A、p -> next = = NULLB、P = = NULLC、P - >next = = headD、p = = head13、建立有序单链表的时间复杂度为( C )A、O(1)B、O(n)C、O(n2)D、O(nlog2n)14、不带头结点的单链表为空的判定条件是(A )A、head = NULLB、head -> next = = NULLC、head - >next = headD、head ! = NULL15、判断链队为空的条件是( A )A、Q->front = = Q->rearB、Q->front != Q->rearC、Q->front = = (Q->rear +1)% nD、Q->front != (Q->rear +1)% n16、循环队列的头尾指针分别为front和rear,则循环队列为满的条件是( C )A、Q->front = = Q->rearB、Q->front != Q->rearC、Q->front = = (Q->rear +1)% nD、Q->front != (Q->rear +1)% n17、进队序列为1,2,3,4,进行1次出队运算后,队头结点为( B )A、1B、2C、3D、418、在一个单链表中,删除P所指结点的后继结点,应执行( A )A、p ->next = p->next ->nextB、p = p->next; p ->next = p->next ->nextC、p ->next = p ->nextD、p = p ->next ->next19、链表的优点是(C )A、便于随机存取B、花费的存储空间比顺序表少C、便于插入与删除D、数据元素的物理顺序与逻辑顺序相同20、在一个链队中,假设f和r分别为队首和队尾指针,则插入s所指结点的运算是( B )A、f->next=s;f=s;B、r->next=s;r=s;C、s->next=r;r=s;D、s->next=f;f=s;21、设高度为h的二叉树上只有度为0和度为2的结点,则此二叉树中包含的结点数至少为( B )个A、2hB、2h-1C、2h+1D、h+122、一个栈的进栈序列是1,2,3,4,则出栈序列不可能是(C )A、1 2 3 4B、4 3 2 1C、4 1 3 2D、3 2 4 123、采用邻接表存储的图的深度优先搜索遍历类似于二叉树的(A )A、先序遍历B、中序遍历C、后序遍历D、层次遍历24、从一个栈顶指针为HS的链栈中删除一个结点时,用x保存被删结点的值,则执行(D )A、x=HS; HS= HS->nextB、x=HS->data;C、HS= HS->next; x=HS->dataD、x=HS->data; HS= HS->next25、具有6个结点的无向图至少有( A )条边才能形成连通图A、5B、6C、7D、826、在链队Q中,插入S所指结点需执行的命令是( B )A、Q->front ->next =s ; f=sB、Q->rear->next=s; Q.rear=sC、s->next =Q->rear Q->rear=sD、S->next=Q->front Q->front =s;27、如果二叉树的先序遍历序列为ABDGCEFH,中序遍历序列为DGBAECHF,则后序遍历序列为( D )A、BDGCEFHAB、GDBECFHAC、BDGAECHFD、GDBEHFCA28、具有5个顶点的无向完全图有( A )条边A、10B、24C、25D、2029、采用邻接表存储的图的广度优先搜索遍历类似于二叉树的(D )A、先序遍历B、中序遍历C、后序遍历D、层次遍历30、在链队Q中,删除一个结点需执行的命令是(B )A、Q->rear = Q->front->nextB、Q->rear->next= Q->rear->next->nextC、Q->front->next = Q->front->next->nextD、Q->front= Q->rear->next31、在解决计算机与打印机之间速度不匹配问题时通常设置一个打印缓冲区,主机将要输出的数据依次写入缓冲区,打印机则从缓冲区取出数据打印,该缓冲区使用(B )结构A、堆栈B、队列C、数组D、树32、在有向图的邻接表存储结构中,顶点v在表结点中出现的次数是( B )A、顶点v的度B、顶点的出度C、顶点v的入度D、依附于顶点V的边数33、将一棵有100个结点的完全二叉树从上到下,从左到右依次对结点编号,根结点编号为1,则编号为49的结点的左孩子为(B )A、99B、98C、50D、4834、二维数组SA中,每个元素的长度为3个字节,行下标从0到7,列下标从0到9,从首地址SA开始连续存放在存储器中,该数组按列存放,元素A[4][7]的地址为(B )A、SA +141 B、SA+180 C、SA+222 D、SA+22535、数组A中,每个元素的长度是3字节,行下标i从1到8,列下标j从1到10,从首地址开始连续存放在存储器内,存放该数组至少需要的单元数是( B )。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Comparable cmp = (Comparable)element;
if (this.head==null || pareTo(this.head.data)<=0)
this.head = new Node<E>(element,this.head);//头插入
else
{
Node<E> front=null, p=this.head;
{//若已排序返回true,否则返回false
if (table==null)
return false;
for (int i=0; i<table.length-1; i++)
if (table[i]>table[i+1])
return false;
return true;
}
public static boolean isSorted(Comparable[] table)//判断对象数组是否已按升序排序
int k=1;//k是自然数,递增变化
boolean up = true;//方向向上
for (int sum=0; sum<n; sum++)//左上三角,sum表示行列的下标和
{
if (up)
for (int i=sum;i>=0;i--)
mat[i][sum-i] = k++;//k先赋值后自加
rear = rear.next;
}
}
}
【习3.2】实验2.2单链表的查找、包含、删除操作详见8.2.1。
单链表的以下查找、包含、删除等操作方法详见8.2.1顺序查找。
public Node<E> search(E element, Node<E> start) //从单链表结点start开始顺序查找指定对象
public Node<E> search(E element)//若查找到指定对象,则返回结点,否则返回null
public boolean contain(E element)//以查找结果判断单链表是否包含指定对象
public boolean remove(E element)//移去首次出现的指定对象
if (obj==null || element==null)
return false;
Node<E> p=this.head;
while (p!=null)
{
if (obj.equals(p.data))
{
p.data = element;
return true;
}
p = p.next;
}
return false;
return p.data.equals(q.data) && equals(p.next, q.next);
return false;
}
【习3.7】建立按升序排序的单链表(不带头结点)。
采用直接插入排序算法将一个结点插入到已排序的单链表中。
import dataStructure.linearList.Node;
System.out.println();
}
}
}
【习1.1】实验0.5找出一个二维数组的鞍点
【习1.2】实验0.6复数类。
【习1.3】实验0.8图形接口与实现图形接口的类
第2章
【习2.1】实验1.1判断数组元素是否已按升序排序。
程序见例1.4的SortedArray.java。
public static boolean isSorted(int[] table)//判断整数数组是否已按升序排序
}
}
第3章
【习3.1】习2-5图2.19的数据结构声明。
table数组元素为单链表,声明如下:
SinglyLinkedList<E> table[]
【习3.2】习2-6如果在遍历单链表时,将p=p.next语句写成p.next=p,结果会怎样?
使p.next指向p结点自己,改变了结点间的链接关系,丢失后继结点,如图2.1所示。
{//若已排序返回true,否则返回false
if (table==null)
return false;
for (int i=0; i<table.length-1; i++)
if (table[i].compareTo(table[i+1])>0)
return false;
return true;
}
比较两条单链表是否相等的操作也可设计为以下的递归方法:
public boolean equals(Object obj)//比较两条单链表是否相等
{
if (obj == this)
return true;
if (obj instanceof SinglyLinkedList)
{
SinglyLinkedList list = (SinglyLinkedList)obj;
else
for (int j=n-1;j>sum-n;j--)
mat[sum-j][j] = k++;
up=!up;
}
for (int i=0; i<mat.length; i++)//输出二维数组元素
{
for (int j=0; j<mat[i].length; j++)//i、j是行、列下标
System.out.print(" "+mat[i][j]);
{
p = new Node(element[i]);
p.next = create(element, i+1);
}
return p;
}
单链表的复制操作也可设计为以下的递归方法:
public SinglyLinkedList(SinglyLinkedList<E> list)//以单链表list构造新的单链表
}
【习3.4】实验2.2首尾相接地连接两条单链表。
在SinglyLinkedList单链表类中,增加替换操作方法如下。
public void concat(SinglyLinkedList list)//将指定单链表list链接在当前单链表之后
{
if (this.head==null)
this.head = list.head;
import dataStructure.linearList.SinglyLinkedList;//不带头结点的单链表类
public class SortedSinglyLinkedList<E> extends SinglyLinkedList<E>
{
public SortedSinglyLinkedList()
{
this.head = null;
if (element!=null)
this.head = create(element,0);
}
private Node<E> create(E[] element, int i)//由指定数组构造单链表,递归方法
{
Node<E>p=null;
if (i<element.length)
采用二维数组实现。二维数组中,每一条斜线上各元素下标和相等,如图0.1所示。
图1.2下标和相等的数字方阵算法描述
程序如下。
public class Upmat
{
public static void main(String args[])
{
int n=4;//阶数
int[][] mat = new int[n][n];
return gcd(b,a%b);
}
public static void main(String args[])
{
int a=12,b=18,c=24;
System.out.println("gcd("+a+","+b+","+c+")="+gcd(gcd(a,b),c));//获得3个整数最大公因数
{//复制单链表
this.head = null;
if (list!=null && list.head!=null)
{
this.head = new Node(list.head.data);
Node<E> p = list.head.next;
Node<E> rear = this.head;
while (p!=null)
{
rear.next = new Node<E>(p.data);
rear = rear.next;
p = p.next;
}
}
}
【习3.6】实验2.2单链表构造、复制、比较等操作的递归方法。
由指定数组中的多个对象构造单链表的操作也可设计为以下的递归方法:
public SinglyLinkedList(E[] element)//由指定数组中的多个对象构造单链表
{
super();
}
public boolean add(E element) //根据指定对象的大小插入在合适位置
{
if (element==null || !(element instanceof Comparable))
return false; //不能插入null或非Comparable对象
相关文档
最新文档