数据结构第二章习题课

合集下载

数据结构第二章课后答案

数据结构第二章课后答案

数据结构第二章课后答案数据结构第二章课后答案1. 线性表1.1 数组实现线性表Q1. 请说明线性表的定义,并结合数组实现线性表的特点进行解释。

线性表是由n(n≥0)个数据元素构成的有序序列,其中n表示线性表的长度。

数组实现线性表的特点是使用一组具有相同数据类型的连续存储空间存储线性表中的元素,通过下标访问和操作元素。

A1. 线性表的定义指出,线性表是由若干个数据元素组成的有序序列。

具体地,在数组实现线性表中,我们将元素存储在一组连续的内存空间中,通过下标访问和操作元素。

由于数组的存储空间具有连续性,这样的实现方式可以在O(1)的时间复杂度下进行元素的访问和修改操作。

1.2 链表实现线性表Q2. 请说明链表实现线性表的特点,并与数组实现进行比较。

链表实现线性表的特点是通过指针将线性表中的元素按照节点的形式连接起来,每个节点包含了存储的元素和指向下一个节点的指针。

与数组实现相比,链表的插入和删除操作更为高效,但是访问某个位置的元素需要从头开始遍历,时间复杂度较大。

A2. 链表实现线性表的特点是通过使用节点和指针将线性表中的元素连接起来。

每个节点中包含了一个存储的元素和指向下一个节点的指针。

链表的插入和删除操作的时间复杂度为O(1),因为只需要改变指针的指向即可。

但是,访问某个位置的元素需要从头开始遍历链表,所以时间复杂度为O(n)。

2. 栈和队列2.1 栈的定义和基本操作Q3. 请给出栈的定义和基本操作。

栈是一种特殊的线性表,它只能在表的一端进行插入和删除操作,该端称为栈顶。

栈的基本操作包括入栈(push)和出栈(pop),分别用于将元素压入栈和将栈顶元素弹出。

A3. 栈是一种特殊的线性表,它只能在表的一端进行插入和删除操作。

这个特定的一端称为栈顶,而另一端称为栈底。

栈的基本操作包括入栈(push)和出栈(pop)。

入栈操作将一个元素压入栈顶,出栈操作将栈顶元素弹出。

2.2 队列的定义和基本操作Q4. 请给出队列的定义和基本操作。

数据结构第2章习题参考答案

数据结构第2章习题参考答案

数据结构第2章习题参考答案1. 简答题1.1 什么是数据结构?数据结构是指相互之间存在一种或多种特定关系的数据元素的集合,它包括数据的逻辑结构和物理结构。

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

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

1.3 数据结构的逻辑结构有哪些?数据结构的逻辑结构包括线性结构、树形结构和图形结构。

1.4 数据结构的物理结构有哪些?数据结构的物理结构包括顺序存储结构和链式存储结构。

1.5 什么是算法?算法是指求解问题的具体步骤和方法。

1.6 算法的特性有哪些?算法应具有有穷性、确定性、可行性和输入输出性。

2. 选择题2.1 在栈的顺序存储结构中,栈的存储位置是:A. 自顶向下递增B. 自底向上递增C. 自底向上递减D. 自顶向下递减答案:D2.2 下列哪个数据结构不适合表示有父子关系的数据?A. 二叉树B. 图C. 链表D. 堆答案:D2.3 对于一棵完全二叉树,叶子节点的个数为n,则树中节点的总数为:A. 2nB. 2n + 1C. nD. n + 1答案:A2.4 假设有一个长度为10的栈,初始时栈为空,若对该栈连续执行5次入栈操作,然后执行4次出栈操作,最后执行1次入栈操作,则栈中剩余的元素个数为:A. 0B. 1C. 4D. 6答案:D3. 编程题3.1 实现一个栈数据结构的基本操作,包括入栈、出栈、获取栈顶元素和判断栈是否为空。

```Pythonclass Stack:def __init__(self):self.items = []def is_empty(self):return len(self.items) == 0def push(self, item):self.items.append(item)def pop(self):if self.is_empty():return Nonereturn self.items.pop()def peek(self):if self.is_empty():return Nonereturn self.items[-1]```3.2 实现一个队列数据结构的基本操作,包括入队、出队、获取队首元素和判断队列是否为空。

数据结构课后习题第2章

数据结构课后习题第2章

2. 指针 P 指向不带头结点的线性链表 L 的首元素的条件是( )。
A.P= =L
C.P-﹥next==L
B.L-﹥Next==P
D.P-﹥next==NULL
3. 指针 p 指向带头结点的单循环链表 L 的首元素的条件是( )。
A.P= =L
C.P-﹥next==L
B.L-﹥Next==P
D.P-﹥next==NULL
网络工程 2011 级 1 班、计算机科学与技术 2011 级 2 班《算法与数据结构》课后习题(第 2 章)
2011 级 计科 (网工)
题号
得分

【课后习题】第 2 章 线性表
班 学号:
一、判断题(如果正确,在题号前打“”,否则打“”。每题 2 分,共 10 分)

( ) 1. 线性表若采用顺序存储表示时所有结点之间的存储单元地址必须连续。 ( ) 2. 顺序表结构适宜于进行顺序存取,而链表适宜于进行随机存取。 ( ) 3. 如果某个数据结构的每一个元素都是最多只有一个直接前驱,则必为线性结构。 ( ) 4. 线性表的逻辑顺序与物理顺序总是一致的。 ( ) 5. 线性表的长度是指它所占存储空间的大小。
二、填空题(每空 1.5 分,共 21 分)
1. 从逻辑结构看,线性表是典型的
2. 在一个长度为 n 的向量中在第 i(1≤i≤n+1)个元素之前插入一个元素时,需向后移动
个元素,算法的时间复杂度为
3. 在一个长度为 n 的向量中删除第 i(1≤i≤n)个元素时,需向前移动
算法的时间复杂度为


4. 若长度为 n 的线性表采用链式存储结构,在其第 i 个结点前插入一个新的元素的算法的

数据结构课后习题第二章

数据结构课后习题第二章

一、选择题1. 线性表是具有n个()的有限序列。

A.数据项 B. 数据元素 C. 数据对象 D.表记录2. 以下关于线性表的说法不正确的是()。

A. 线性表中的数据元素可以是数字、字符、记录等不同类型B. 线性表中包含的数据元素个数不是任意的C. 线性表中的每个结点都有且只有一个直接前趋和直接后继D. 存在这样的线性表:表中各结点都没有直接前趋和直接后继3. 线性表的顺序存储结构是一种()的存储结构。

A. 随机存取B. 顺序存取C. 索引存取D. 散列存取4. 在顺序表中,只要知道(),就可在相同时间内求出任一结点的存储地址。

A.基地址 B. 结点大小 C. 线性表大小 D. 基地址和结点大小5. 下面关于线性表的叙述中,错误的是()。

A. 线性表采用顺序存储,必须占用一片连续的存储单元B. 线性表采用顺序存储,便于进行插入和删除操作C. 线性表采用链式存储,不必占用一片连续的存储单元D. 线性表采用链式存储,便于插入和删除操作6. 线性表采用链表存储时其存储地址要求()。

A. 必须是连续的B. 部分地址必须是连续的C. 必须是不连续的D. 连续和不连续都可以7. 一个长度为n的线性表顺序存储,向第i个元素(1<=i<=n+1)之前插入一个新元素时,需要从后向前依次后移()个元素。

A.n-i B. n-i+1 C. n-i-1 D. i8.()运算,使用顺序表比链式表好。

A. 插入B. 删除C. 根据序号查找D. 根据元素值查找9.向具有n个结点的有序单链表中插入一个新的结点并仍然有序的时间复杂度是()。

A.O(1)B.O(n)C.O(n2)D.O(㏒2n)10.在一个长度为n的顺序存储的线性表中,删除第i个元素(1<=i<=n)时,需要从前向后依次前移()个元素。

A.n-i B.n-i+1 C.n-i-1 D.i11.在一个长度为n的线性表中顺序查找值为x的元素时,平均查找长度(即x 同元素的平均比较次数,假定查找每个元素的概率都相等)为()。

数据结构第2章习题参考答案

数据结构第2章习题参考答案

数据结构第2章习题参考答案2.7习题2.7.1知识点:线性表的逻辑结构一、选择题1①线性表l=(a1,a2,…,an),下列说法正确的是(d)。

a.每个元素都有一个直接前驱和一个直接后继。

b.线性表中至少要有一个元素。

c.表诸元素的排序顺序必须就是由小到大或由小至大。

d.除第一个和最后一个元素外,其余每个元素都有一个且仅有一个直接前驱和直接后继。

2①在线性表的下列运算中,不改变数据元素之间结构关系的运算是(d)。

a.插入b.删除c.排序d.定位3①线性表就是具备n个(c)的非常有限序列(n>0)。

【清华大学1998】a.表元素b.字符c.数据元素d.数据项e.信息项二、判断题(t)1①线性表中的每个结点最多只有一个前驱和一个后继。

(f)2①线性表中的每个结点都至少存有一个前驱结点和后继结点。

(f)3①线性表就是n个数的非常有限序列。

(f)4①同一线性表的数据元素可以具有不同的特性。

(t)5①线性表的长度n就是表数据元素的个数,当n=0时,称作空表。

(t)6①线性表就是一个相当有效率的数据结构,它的长度可以根据须要快速增长或延长。

(f)7①对线性表中的数据元素就可以展开出访,无法展开填入和删掉操作方式。

2.7.2知识点:线性表的顺序存储结构一、选择题1①在一个长度为n的顺序表中,在第i个元素(1<=i<=n+1)之前插入一个新元素时需向后移动(b)个元素.a.n-1b.n-i+1c.n-i-1d.i2①若某线性表中最常用的操作方式就是挑第i个元素和打听第i个元素的前趋元素,则使用(d)存储方式最节省时间。

a.单链表b.双链表c.单向循环d.顺序表3②一个数组第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是(b)a.110b.108c.100d.1204①下列哪一条就是顺序存储结构的优点(a)。

【北方交通大学2001】a.存储密度小b.填入运算便利c.删除运算方便d.可方便地用于各种逻辑结构的存储表示5③若长度为n的线性表使用顺序存储结构,在其第i个边线填入一个新元素的算法的时间复杂度为(c)(1<=i<=n+1)。

数据结构第二章课后答案

数据结构第二章课后答案

数据结构第二章课后答案数据结构第二章课后答案==========================================2.1 题目1:什么是线性表?线性表的特点有哪些?答案:线性表是由n个数据元素组成的有限序列,其中n为表的长度,线性表具有以下特点:1.除第一个元素外,每个元素均有一个直接前驱元素;2.除最后一个元素外,每个元素均有一个直接后继元素;3.线性表具有唯一的一个始元素和终元素。

2.2 题目2:什么是顺序存储结构?顺序存储结构有什么特点?答案:顺序存储结构是指用一组地质连续的存储单元依次存储线性表的数据元素,顺序存储结构具有以下特点:1.线性表的元素在计算机中是连续存储的,可以通过下标直接访问元素;2.插入和删除操作需要移动大量元素,效率较低;3.存储空间需要预先分配大小,固定不变。

2.3 题目3:什么是链式存储结构?链式存储结构有什么特点?答案:链式存储结构是指线性表的元素在计算机内存中非连续存储,而是通过每个元素中的指针起来的结构,链式存储结构具有以下特点:1.线性表的元素在内存中可以是非连续存储,节省存储空间;2.插入和删除操作只需要修改指针,效率较高;3.需要额外的指针域存储信息,增加了存储空间开销。

2.8 题目8:请解释迷宫问题的基本思路。

答案:迷宫问题的基本思路是使用回溯算法,即从某个位置开始进行深度优先搜索,逐步尝试各种可能的路径,直到找到一条通路或者遍历完所有可能的路径。

基本步骤如下:1.选择一个起始位置,并将其标记为已访问;2.检查当前位置的四周是否有未访问的相邻位置;3.如果有未访问的相邻位置,选择其中一个位置继续深度搜索;4.如果所有相邻位置都被访问过或者当前位置是死胡同,回溯到上一个位置;5.重复步骤2-4,直到找到通路或者遍历完所有路径。

附件:无法律名词及注释:1.版权:指对文字、图像、音乐等作品享有法律保护的权利,未经作者许可不得使用;2.知识产权:指人们创造的智力成果所享有的权益,包括专利权、商标权、著作权等;3.公平使用:指在特定情况下,可以在不获得版权所有人许可的情况下使用作品的一定范围。

数据结构 课后习题 第2章

数据结构 课后习题 第2章

一、名词解释1.线性表2.顺序表3.单链表4.循环单链表5.循环双向链表二、选择题1.用单链表方式存储的线性表,存储每个结点需要两个域,一个是数据域,另一个是_________A.当前结点的所在地址B.后继结点的所在地址C.空指针域D.空闲域2.不带头结点的单链表head为空的判定条件是__________A.head==NULLB.head→next==NULLC.head→next==headD.head!=NULL3.带头结点的单链表head为空的判定条件是__________A.head==NULLB.head→next==NULLC.head→next==headD.head!=NULL4.一个顺序表的第一个元素的存储地址是100,每个元素的长度为5,则第7个元素的地址是____________A. 130B. 125C. 120D. 1355.非空的循环单链表head的尾结点(由p所指向)满足____________A.p→next==NULLB.p==NULLC.p→next==headD.p==head6.设线性链表中结点的结构为(data, next),已知指针q所指结点是指针结点p的直接前驱,若在q与p之间插入结点s,则应执行_________操作A.s→next=p→next; p→next=s;B.q→next=s; s→next=p;C.p→next=s→next; s→next=p;D.p→next=s; s→next=q;7.设线性链表中结点的结构为(data, next),已知指针p所指结点不是尾结点,若在p之后插入结点s,则应执行_____操作A.s→next=p; p→next=s;B.s→next=p→next; p→next=s;C.s→next=p→next; p=s;D.p→next=s; s→next=p;8.设线性链表中结点的结构为(data, next),若想删除结点p的直接后继,则应执行______A.p→next=p→next→next;B.p=p→next; p→next= p→next→nextC.p→next=p→next;D.p=p→next→next;9.p指向线性链表中L的某一个结点,则在线性链表的表尾插入结点s的语句序列是_________A.while(p→next != NULL) p=p→next; p→next=s; s→next=NULL;B.while(p != NULL) p=p—next; p→next=s; s→next=NULL;C.while(p→next != NULL) p=p→next; s→next=p; p→next=NULL;D.while(p!=NULL) p=p→next→next; p→next=s; s→next=p→next;三、填空题1.按顺序存储方法存储的线性表称为________,按链式存储方法存储的线性表称为________。

数据结构课后习题与解析第二章

数据结构课后习题与解析第二章

第二章习题1. 描述以下三个概念的区别:头指针,头结点,首元素结点。

2. 填空:(1)在顺序表中插入或删除一个元素,需要平均移动元素,具体移动的元素个数与有关。

(2)在顺序表中,逻辑上相邻的元素,其物理位置相邻。

在单链表中,逻辑上相邻的元素,其物理位置相邻。

(3)在带头结点的非空单链表中,头结点的存储位置由指示,首元素结点的存储位置由指示,除首元素结点外,其它任一元素结点的存储位置由指示。

3.已知L是无表头结点的单链表,且P结点既不是首元素结点,也不是尾元素结点。

按要求从下列语句中选择合适的语句序列。

a. 在P结点后插入S结点的语句序列是:。

b. 在P结点前插入S结点的语句序列是:。

c. 在表首插入S结点的语句序列是:。

d. 在表尾插入S结点的语句序列是:。

供选择的语句有:(1)P->next=S;(2)P->next= P->next->next;(3)P->next= S->next;(4)S->next= P->next;(5)S->next= L;(6)S->next= NULL;(7)Q= P;(8)while(P->next!=Q) P=P->next;(9)while(P->next!=NULL) P=P->next;(10)P= Q;(11)P= L;(12)L= S;(13)L= P;4. 设线性表存于a(1:arrsize)的前elenum个分量中且递增有序。

试写一算法,将X插入到线性表的适当位置上,以保持线性表的有序性。

5. 写一算法,从顺序表中删除自第i个元素开始的k个元素。

6. 已知线性表中的元素(整数)以值递增有序排列,并以单链表作存储结构。

试写一高效算法,删除表中所有大于mink且小于maxk的元素(若表中存在这样的元素),分析你的算法的时间复杂度(注意:mink和maxk是给定的两个参变量,它们的值为任意的整数)。

数据结构第二章课后答案

数据结构第二章课后答案

数据结构第二章课后答案第二章课后答案2·1·理论问题1·什么是数据结构?答:数据结构是指在计算机中存储、组织和管理数据的方式。

它包括了数据的逻辑结构、存储结构和操作方法。

2·逻辑结构和存储结构的关系是什么?答:逻辑结构是指数据之间的逻辑关系,它是从逻辑上描述数据元素之间的关系。

存储结构是指数据在计算机内部的具体存储方式,它是从物理上描述数据元素在计算机内部的存储关系。

逻辑结构与存储结构之间是相互依赖的关系,逻辑结构决定存储结构,而存储结构又反过来影响逻辑结构。

3·请解释顺序存储结构和链式存储结构。

答:顺序存储结构是指将数据元素存储在一块连续的存储空间中,元素的物理地质是连续的。

链式存储结构是将数据元素存储在任意的存储单元中,通过指针相互连接。

4·什么是抽象数据类型(ADT)?答:抽象数据类型(ADT)是指一个数学模型以及定义在该模型上的一组操作。

它只关心数据对象的定义和操作,而不考虑其在计算机内部的表示和运算过程。

5·ADT的特点有哪些?答:(1)封装性:ADT将数据对象的定义和操作封装在一起,只对外界提供有限的操作接口。

(2)数据抽象:ADT关注数据的逻辑结构,而忽略了具体的存储结构和实现细节。

(3)信息隐藏:ADT将数据对象的内部细节隐藏起来,只通过接口暴露给外部使用者。

2·2·应用问题1·请举例描述数据结构的应用场景。

答:(1)栈:在程序设计中,栈常用于实现函数的调用和返回,追踪程序的执行过程。

(2)队列:在操作系统中,队列被广泛应用于任务调度,比如处理作业、进程管理等。

(3)二叉树:在搜索算法中,二叉树常用于实现快速查找、排序和最优化问题。

(4)图:在社交网络中,图被用来表示好友关系、消息传播等复杂的关系网络。

2·描述数组和链表的特点及其应用场景。

答:数组是一种顺序存储结构,它可以随机访问任何一个元素,但插入和删除元素的操作效率较低。

数据结构第二章习题课

数据结构第二章习题课

1、试描述头指针、头结点、开始结点的区别、并说明头指针和头结点的作用。

答:开始结点是指链表中的第一个结点,也就是没有直接前趋的那个结点。

链表的头指针是一指向链表开始结点的指针(没有头结点时),单链表由头指针唯一确定,因此单链表可以用头指针的名字来命名。

头结点是我们人为地在链表的开始结点之前附加的一个结点。

有了头结点之后,头指针指向头结点,不论链表否为空,头指针总是非空。

而且头指针的设置使得对链表的第一个位置上的操作与在表其他位置上的操作一致(都是在某一结点之后)。

2、何时选用顺序表、何时选用链表作为线性表的存储结构为宜?答:在实际应用中,应根据具体问题的要求和性质来选择顺序表或链表作为线性表的存储结构,通常有以下几方面的考虑:1) 基于空间的考虑。

当要求存储的线性表长度变化不大,易于事先确定其大小时,为了节约存储空间,宜采用顺序表;反之,当线性表长度变化大,难以估计其存储规模时,采用动态链表作为存储结构为好。

2) 基于时间的考虑。

若线性表的操作主要是进行查找,很少做插入和删除操作时,采用顺序表做存储结构为宜;反之,若需要对线性表进行频繁地插入或删除等操作时,宜采用链表做存储结构。

并且,若链表的插入和删除主要发生在表的首尾两端,则采用尾指针表示的单循环链表为宜。

3、在顺序表中插入和删除一个结点需平均移动多少个结点?具体的移动次数取决于哪两个因素?答:在等概率情况下,顺序表中插入一个结点需平均移动n/2个结点,删除一个结点需平均移动(n-1)/2个结点。

具体的移动次数取决于顺序表的长度n以与需插入或删除的位置i。

i 越接近n则所需移动的结点数越少。

4、为什么在单循环链表中设置尾指针比设置头指针更好?答:尾指针是指向终端结点的指针,用它来表示单循环链表可以使得查找链表的开始结点和终端结点都很方便,设一带头结点的单循环链表,其尾指针为rear,则开始结点和终端结点的位置分别是rear->next->next 和rear, 查找时间都是O(1)。

数据结构第2章习题答案

数据结构第2章习题答案

第2章习题答案●习题2-11.79 62 34 57 26 482.26 34 48 57 62 793.48 56 57 62 79 344.56 57 79 345.26 34 39 48 57 62●习题2-31.ElemType delete_min(List &L){ int i,len,min;ElemType e;if(Emptylist(L){printf(‘线性表为空!\n’); exit(1);}len=LenthList(L);min=1;for(i=2;i〈=len;i++)if(GetList(L,min)〉GetList(L,i))min=i;e= GetList(L,min);DeleteList(L,e,min);InsertList(L,GetList(L,LenthList(L)),min);return e;}2。

bool delete_st(ListTyle &L,ElemType s,ElemType t) {int i;ElemType e;if(Emptylist(L){ printf(‘线性表为空!\n’); return false;}i=1;while(i〈=LenthList(L)){If(GetList(L,i)>=s&&GetList(L,i)<=t)DeleteList(L,e,i);elsei++;}return ture;}void MergeList(List La ,List Lb ,List &Lc ) {InitList(Lc);int i=j=1 , k=0, La_len , Lb_len;ElemType a , b;La_len = LenthList (La); Lb_len=LenthList (Lb);While (( i<=La_len)&& (j<=Lb_len )){a=GetList(La ,i );b=GetList( Lb , j );if (a〈=b ){ InsertList (Lc ,a, ++k ) ;++i ; }else { InsertList ( Lc , b ,++k ) ;++j ; }}while (i〈=La_len){ a=GetList( La ,i++ ) ; InsertList ( Lc ,a, ++k ); }while (j〈=Lb_len ){ b=GetList(Lb , j++ ) ;InsertList ( Lc , b,++k );}}//MergeList习题2—42。

(完整版)数据结构课后习题及解析第二章

(完整版)数据结构课后习题及解析第二章

第二章习题1.描述以下三个概念的区别:头指针,头结点,首元素结点。

2.填空:(1)在顺序表中插入或删除一个元素,需要平均移动元素,具体移动的元素个数与有关。

(2)在顺序表中,逻辑上相邻的元素,其物理位置相邻。

在单链表中,逻辑上相邻的元素,其物理位置相邻。

(3)在带头结点的非空单链表中,头结点的存储位置由指示,首元素结点的存储位置由指示,除首元素结点外,其它任一元素结点的存储位置由指示。

3.已知L是无表头结点的单链表,且P结点既不是首元素结点,也不是尾元素结点。

按要求从下列语句中选择合适的语句序列。

a. 在P结点后插入S结点的语句序列是:。

b. 在P结点前插入S结点的语句序列是:。

c. 在表首插入S结点的语句序列是:。

d. 在表尾插入S结点的语句序列是:。

供选择的语句有:(1)P->next=S;(2)P->next= P->next->next;(3)P->next= S->next;(4)S->next= P->next;(5)S->next= L;(6)S->next= NULL;(7)Q= P;(8)while(P->next!=Q) P=P->next;(9)while(P->next!=NULL) P=P->next;(10)P= Q;(11)P= L;(12)L= S;(13)L= P;4.设线性表存于a(1:arrsize)的前elenum个分量中且递增有序。

试写一算法,将X插入到线性表的适当位置上,以保持线性表的有序性。

5.写一算法,从顺序表中删除自第i个元素开始的k个元素。

6.已知线性表中的元素(整数)以值递增有序排列,并以单链表作存储结构。

试写一高效算法,删除表中所有大于mink且小于maxk的元素(若表中存在这样的元素),分析你的算法的时间复杂度(注意:mink和maxk是给定的两个参变量,它们的值为任意的整数)。

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

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

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

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

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

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

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

第二章:线性表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:请问队列可以用哪些方式实现?答案:队列可以用数组或链表来实现。

数据结构练习题 第二章 线性表 习题及答案

数据结构练习题 第二章  线性表 习题及答案
{ p=head;j=0;
while(________________)
{ p=p->next; j++; }
if(i==j) return(p);
else return(NULL);
}
26.以下为单链表的定位运算,分析算法,请在____处填上正确的语句。
int locate_lklist(lklist head,datatype x)
if(________)return(i);
else return(0);
}
15.对于顺序表的定位算法,若以取结点值与参数X的比较为标准操作,平均时间复杂性量级为________。求表长和读表元算法的时间复杂性为________。
16.在顺序表上,求表长运算LENGTH(L)可通过输出________实现,读表元运算
36.当且仅当两个串的______相等并且各个对应位置上的字符都______时,这两个串相等。一个串中任意个连续字符组成的序列称为该串的______串,该串称为它所有子串的______串。
37.串的顺序存储有两种方法:一种是每个单元只存一个字符,称为______格式,另一种是每个单元存放多个字符,称为______格式。
2.为了满足运算的封闭性,通常允许一种逻辑结构出现不含任何结点的情况。不含任何结点的线性结构记为______或______。
3.线性结构的基本特征是:若至少含有一个结点,则除起始结点没有直接______外,其他结点有且仅有一个直接______;除终端结点没有直接______外,其它结点有且仅有一个直接______.
① 数据元素 ② 数据项 ③ 数据 ④ 数据结构
4.顺序表是线性表的 ( )
①链式存储结构 ②顺序存储结构 ③ 索引存储结构 ④ 散列存储结构

数据结构(1-2-3章)课后题答案解析

数据结构(1-2-3章)课后题答案解析
西北大学可视化技术研究所
q=p; p=p->next; b->next=q; q->next=B; b=b->next; } else {//分出其他字符结点 q=p; p=p->next; c->next=q; q->next=C; c=c->next; } } }//结束
西北大学可视化技术研究所
A.双向链表
B.双向循环链表
C.单向循环链表 D.顺序表
(4)下列选项中, D 项是链表不具有的特点。
A.插入和删除运算不需要移动元素
B.所需要的存储空间与线性表的长度成正比
C.不必事先估计存储空间大小
D.可以随机访问表中的任意元素
西北大学可视化技术研究所
(5)在链表中最常用的操作是删除表中最后一个结点和 在最后一个结点之后插入元素,则采用 C 最 节省时间。
西北大学可视化技术研究所
8.假设两个按元素值递增有序排列的线性 表A和B,均以单链表作为存储结构,请 编写算法,将A表和B表归并成一个按元 素值递减有序排列的线性表C,并要求利 用原表(即A表和B表的)结点空间存放 表C。
西北大学可视化技术研究所
算法描述:要求利用现有的表A和B中的结 点空间来建立新表C,可通过更改结点的next 域来重新建立新的元素之间的线性关系。为保 证新表递减有序可以利用头插法建立单链表的 方法,只是新建表中的结点不用malloc,而只 需要从A和B中选择合适的点插入到新表C中即 可。
西北大学可视化技术研究所
1.3填空题: (1)变量的作用域是指 变量的有效范围 (2)抽象数据类型具有 数据抽象 、 信息隐 蔽 的特点。 (3)一种抽象类型包括 数据对象 、 结构 关系 和 基本操作 。

数据结构第二章习题

数据结构第二章习题

第2章线性表一、单项选择题1.线性表是具有n个_________的有限序列。

A.表元素B.字符C.数据元素D.数据项2.线性表是_________。

A.一个有限序列,可以为空B.一个有限序列,不可以为空C.一个无限序列,可以为空D.一个无限序列,不可以为空3.线性表采用链表存储时,其地址_________。

A.必须是连续的B.一定是不连续的C.部分地址必须是连续的D.连续与否均可以4.链表不具备的特点是_________。

A.可随机访问任一结点B.插入删除不需要移动元素C.不必事先估计存储空间D.所需空间与其长度成正比5.设线性表有n个元素,以下操作中,_________在顺序表上实现比在链表上实现效率更高。

A.输出第i(1≤i≤n)个元素值B.交换第1个元素与第2个元素的值C.顺序输出这n个元素的值D.输出与给定值x相等的元素在线性表中的序号6.设线性表中有2n个元素,以下操作中,_________在单链表上实现要比在顺序表上实现效率更高。

A.删除指定的元素B.在最后一个元素的后面插入一个新元素C.顺序输出前k个元素D.交换第i个元素和第2n-i-1个元素的值(i=0,1…,n-1)7.如果最常用的操作是取第i个结点及其前驱,则采用_________存储方式最节省时间。

A.单链表B.双链表C.单循环链表D.顺序表8.与单链表相比,双链表的优点之一是_________。

A.插入和删除操作更简单B.可以进行随机访问C.可以省略表头指针或表尾指针D.访问前后相邻结点更灵活9.带头结点的单链表L为空的判定条件是_________。

A.L= =NULL B.L->next= =NULLC.L->next= =L D.L!=NULL10.在一个具有n 个结点的有序单链表中插入一个新结点并仍然保持有序的时间复杂度是_________。

A.O(1) B.O(n)C.O(n2) D.O(nlog2n)11.在一个长度为n(n>1)的带头结点的单链表h上,另设有尾指针r(指向尾结点),执行_________操作与链表的长度有关。

数据结构(C语言版)习题及答案第二章

数据结构(C语言版)习题及答案第二章

数据结构(C语⾔版)习题及答案第⼆章习题2.1选择题1、线性表的顺序存储结构是⼀种(A)的存储结构,线性表的链式存储结构是⼀种(B)的存储结构。

A、随机存取B、顺序存取C、索引存取D、散列存取2、对于⼀个线性,既要求能够进⾏较快的插⼊和删除,⼜要求存储结构能够反映数据元素之间的逻辑关系,则应该选择(B)。

A、顺序存储⽅式B、链式存储⽅式C、散列存储⽅式D、索引存储⽅式3、已知,L是⼀个不带头结点的单链表,p指向其中的⼀个结点,选择合适的语句实现在p结点的后⾯插⼊s结点的操作(B)。

A、p->next=s ; s->next=p->next ;B、s->next=p->next ; p->next=s ;C、p->next=s ; s->next=p ;D、s->next=p ; p->next=s ;4、单链表中各结点之间的地址( C D)。

A、必须连续B、部分地址必须连续C、不⼀定连续D、连续与否都可以5、在⼀个长度为n的顺序表中向第i个元素(0A、n-iB、n-i+1C、n-i-1D、i2.2填空题1、顺序存储的长度为n的线性表,在任何位置上插⼊和删除操作的时间复杂度基本上都⼀样。

插⼊⼀个元素⼤约移动表中的(n/2)个元素,删除⼀个元素时⼤约移动表中的((n-1)/2)个元素。

2、在线性表的顺序存储⽅式中,元素之间的逻辑关系是通过(物理顺序)来体现的;在链式存储⽅式,元素之间的逻辑关系是通过(指针)体现的。

3、对于⼀个长度为n的单链表,在已知的p结点后⾯插⼊⼀个新结点的时间复杂度为(o(1)),在p结点之前插⼊⼀个新结点的时间复杂度为(o(n)),在给定值为e的结点之后插⼊⼀个新结点的时间复杂度为(o(n))。

4、在双向链表中,每个结点包含两个指针域,⼀个指向(前驱)结点,另⼀个指向(后继)结点。

5、对于循环链表来讲,逐个访问各个结点的结束判断条件是(设P为指向结点的指针,L为链表的头指针,则p->next= =L)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1、试描述头指针、头结点、开始结点的区别、并说明头指针和头结点的作用。

答:开始结点是指链表中的第一个结点,也就是没有直接前趋的那个结点。

链表的头指针是一指向链表开始结点的指针(没有头结点时),单链表由头指针唯一确定,因此单链表可以用头指针的名字来命名。

头结点是我们人为地在链表的开始结点之前附加的一个结点。

有了头结点之后,头指针指向头结点,不论链表否为空,头指针总是非空。

而且头指针的设置使得对链表的第一个位置上的操作与在表其他位置上的操作一致(都是在某一结点之后)。

2、何时选用顺序表、何时选用链表作为线性表的存储结构为宜?答:在实际应用中,应根据具体问题的要求和性质来选择顺序表或链表作为线性表的存储结构,通常有以下几方面的考虑:1) 基于空间的考虑。

当要求存储的线性表长度变化不大,易于事先确定其大小时,为了节约存储空间,宜采用顺序表;反之,当线性表长度变化大,难以估计其存储规模时,采用动态链表作为存储结构为好。

2) 基于时间的考虑。

若线性表的操作主要是进行查找,很少做插入和删除操作时,采用顺序表做存储结构为宜;反之,若需要对线性表进行频繁地插入或删除等操作时,宜采用链表做存储结构。

并且,若链表的插入和删除主要发生在表的首尾两端,则采用尾指针表示的单循环链表为宜。

3、在顺序表中插入和删除一个结点需平均移动多少个结点?具体的移动次数取决于哪两个因素?答:在等概率情况下,顺序表中插入一个结点需平均移动n/2个结点,删除一个结点需平均移动(n-1)/2个结点。

具体的移动次数取决于顺序表的长度n以及需插入或删除的位置i。

i 越接近n则所需移动的结点数越少。

4、为什么在单循环链表中设置尾指针比设置头指针更好?答:尾指针是指向终端结点的指针,用它来表示单循环链表可以使得查找链表的开始结点和终端结点都很方便,设一带头结点的单循环链表,其尾指针为rear,则开始结点和终端结点的位置分别是rear->next->next 和rear, 查找时间都是O(1)。

若用头指针来表示该链表,则查找终端结点的时间为O(n)。

5、在单链表、双链表和单循环链表中,若仅知道指针p指向某结点,不知道头指针,能否将结点*p从相应的链表中删去?若可以,其时间复杂度各为多少?答:我们分别讨论三种链表的情况。

1) 单链表。

当我们知道指针p指向某结点时,能够根据该指针找到其直接后继,但是由于不知道其头指针,所以无法访问到p指针指向的结点的直接前趋。

因此无法删去该结点。

2) 双链表。

由于这样的链表提供双向链接,因此根据已知结点可以查找到其直接前趋和直接后继,从而可以删除该结点。

其时间复杂度为O(1)。

3) 单循环链表。

根据已知结点位置,我们可以直接得到其后相邻的结点位置(直接后继),又因为是循环链表,所以我们可以通过查找,得到p结点的直接前趋。

因此可以删去p所指结点。

其时间复杂度应为O(n)。

6、下述算法的功能是什么?LinkList Demo(LinkList L){ // L是无头结点单链表ListNode *Q,*P;if(L&&L->next){Q=L;L=L->next;P=L;while (P->next) P=P->next;P->next=Q; Q->next=NULL;}return L;}// Demo答:该算法的功能是:将开始结点摘下链接到终端结点之后成为新的终端结点,而原来的第二个结点成为新的开始结点,返回新链表的头指针。

7、不带头结点的单链表head为空的判定条件是()。

A、head=NULLB、head->next=NULLC、head->next=headD、head!=NULL8、在一单链表中,已知q所指的结点是p所指结点的前驱结点,若在q和p之间插入s结点,则执行()。

A、s->next=p->next;p->next=s;B、p->next=s->next;s->next=p;C、q->next=s;s->next=p;D、p->next=s;s->next=q;9、在一个单链表中,若p所指的结点不是最后结点,在p之后插入s结点,则执行()。

A、s->next=p;p->next=s;B、s->next=p->next;p->next=s;C、s->next=p->next;p=s;D、p->next=s;s->next=p;10、在一个单链表中,若删除p所指结点的后续结点,则执行()。

A、p->next=p->next->next;B、p=p->next;p->next=p->next->next;C、p->next=p->next;D、p=p->next->next;11、从一个具有n个结点的单链表中查找其值等于x结点时,在查找成功的情况下,需要平均比较()个结点?A、nB、n/2C、(n-1)/2D、(n+1)/212、在一个具有n个结点的有序单链表中插入一个新结点并仍然有序的时间复杂度是()。

A、O(1)B、O(n)C、O(n2)D、O(nlog2n)13、给定有n个元素的向量,建立一个有序单链表的时间复杂度是()。

A、O(1)B、O(n)C、O(n2)D、O(nlog2n)14、带有一个头结点的单链表head为空的条件是.15、对于一个具有n个结点的单链表,在已知p所指结点之后插入一个新结点的时间复杂度为;在给定值为x的结点后插入一个新结点的时间复杂度是。

16、设顺序表L是一个非递减有序表,试写一算法,将x插入L中,并使L仍是一个有序表。

解:因已知顺序表L是递增有序表,所以只要从头找起找到第一个比它大(或相等)的结点数据,把x插入到这个结点所在的位置就是了。

算法如下:void InsertIncreaseList(Sqlist *L,Datatype x){ int i;for( i=0;i<L->length && L->data[i]<x;i++);//查找并比较,分号不能少ListInsert (*L,i,x); // 调用顺序表插入函数}// InsertIncreaseList17、设顺序表L是一个递减有序表,试写一算法,将x插入其后仍保持L的有序性。

解:与上题相类似,只要从头找到第一个比x小(或相等)的结点数据,在这个位置插入就可以了。

算法如下:void InsertDecreaseList(Sqlist *L,Datatype x){ int i;for (i=0;i<L->length && L->data[i]>x;i++); //查找ListInsert(*L,i,x); // 调用顺序表插入函数}// InsertDecreaseList18、写一算法在单链表上实现线性表的ListLength(L)运算。

解:求单链表长只能用遍历的方法了,从头数到尾。

算法如下:int ListLength( LinkList L ){ int len=0; ListNode *p;p=L; //设该表有头结点while (p->next){ p=p->next;len++;}return len;}// ListLength19、已知L1和L2分别指向两个单链表的头结点,且已知其长度分别为m和n。

试写一算法将这两个链表连接在一起,请分析你的算法的时间复杂度。

解:算法如下:LinkList Link( LinkList L1 , LinkList L2 ){//将两个单链表连接在一起ListNode *p, *q;p=L1; q=L2;while ( p->next ) p=p->next; //查找终端结点p->next = q->next ; //将L2的开始结点链接在L1之后return L1 ;}// LinkList Link分析:本算法的主要操作时间花费在查找L1的终端结点上,与L2的长度无关,所以本算的法时间复杂度为:m+1=O(m)20、删除带头结点单链表L中的元素x。

解:算法如下:Void delete(LinkList &L,ElemType x){ p=L->next; pre=L;while(p){ if(p->data=x) { pre->next=p->next; free(p); p=pre->next; }else { pre=p; p=p->next; }}}//delete21、已知:A=(a1,a2,……,a n-1,a n) B=(b1,b2,……,b n-1,b n)均为顺序表,试编写一个比较A、B 大小的算法。

解:算法目标是分析两表的大小,所以不应破坏原表。

表的大小指的是“词典顺序”,而非表的长度。

基本操作为:同步比较两个表中相应的数据元素。

假设:int compare(SqList La,SqList Lb)循环条件:(i<=La.Length)&&( i<=Lb.Length)主要操作为:if (La.elem[i]==Lb.elem[i]) i++;else if (La.elem[i]<Lb.elem[i]) return -1;else return 1;循环结束时可能有三种情况:●(i> La.Length)&&( i>Lb.Length) return 0;●(i<=La.Length)&&(i>Lb.Length) return 1;●(i>La.Length)&&(i<=Lb.Length) return -1;22、删除有序表中所有其值大于minval且小于maxval的数据元素。

解:while(p&&p->data<=minval) { pre=p; p=p->next; }if (p){ while (p&&p->data<maxval) p=p->next;q=pre->next; pre->next=p;while(q!=p) //q==p时,删除的为一个元素{ s=q; q=q->next; free(s); } //释放中间结点23、写一算法将单链表中值重复的结点删除,使所得结果表中各结点值均不相同。

相关文档
最新文档