广州大学松田学院2数据结构复习题-线性表-参考答案

合集下载

数据结构线性表2答案

数据结构线性表2答案

习题二一、选择题1.在一个长度为n的顺序表中删除第i个元素(0<i<n)时,需要向前移动( A)个元素。

A.n-i B.n-i+1 C.n-i+1 D.i+12.从一个具有n个元素的线性表中查找其值等于x的结点时,在查找成功的情况下,需平均比较(C )个元素结点。

A.n/2 B.n C.(n-1)/2 D.(n +1)/2 3.对一个具有n个元素的线性表,建立其单链表的时间复杂度为( A)。

A.O(n) B.O(1) C.O(n2)D.O(long2n)4.线性表采用链式存储时,其地址( D )。

A.必须是连续的B.一定是不连续的C.部分地址必须连续D.连续与否均可以5.在一个具有n个结点的有序单链表中插人一个新的结点,使得链表仍然有序,该算法的时间复杂度是(D )。

A.O(long2n)B.O(l)C.O(n2)D.O(n)6.线性表是(A )。

A.一个有限序列,可以为空B.一个有限序列,不可以为空C.一个无限序列,可以为空D.一个无限序列,不可以为空7.在一个长度为n的顺序表中,向第i个元素(0一1<n+1)之前捕人一个新元素时,需要向后移动( B )个元素。

A.n-i B.n-i+1 C.n-i-1 D.i+18.如果某链表中最常用的操作是取第i个结点及其前驱,则采用( D)存储方式最节省时间。

A.单链表B.双向链表C.单循环链表D.顺序表9.一个顺序存储线性表的第一个元素的存储地址是90,每个元素的长度是2,则第6个元素的存储地址是(B)。

A.98 B.100 C.102 D.10610.下列排序方法中,某一趟结束后未必能选出一个元素放在其最终位置上的是( C)。

A.堆排序B.冒泡排序C.直接插人排序D.快速排序11.对线性表进行二分查找时,要求线性表必须(C)。

A.以顺序方法存储B.以链接方法存储C.以顺序方法存储,且结点接关键字有序排列D.以链接方法存储,且结点接关键字有序排列12.在顺序存储的线性表(a1……a n)中,删除任意一个结点所需移动结点的平均移动次数为( C )A.n B.n/2 C.(n-1)/2 D.(n+l)/2 13.在线性表的下列存储结构中,读取元素花费的时间最少的是(D)。

线性表复习题答案

线性表复习题答案

线性表复习题答案线性表复习题答案线性表是数据结构中最基本的一种,它是由一组具有相同数据类型的元素组成的数据结构。

线性表的常见实现方式有顺序表和链表。

在学习线性表的过程中,掌握相关的复习题答案是非常重要的。

本文将针对线性表的复习题进行解答,帮助读者巩固对线性表的理解和掌握。

一、顺序表1. 什么是顺序表?顺序表的特点是什么?答:顺序表是用一段连续的存储单元依次存储数据元素的线性结构。

顺序表的特点是元素在物理位置上相邻,逻辑上也相邻。

2. 顺序表的存储结构是怎样的?答:顺序表的存储结构是一段连续的存储空间,可以使用数组来实现。

3. 如何实现顺序表的插入操作?答:顺序表的插入操作需要将插入位置后的元素依次后移,然后将待插入元素放入指定位置。

4. 如何实现顺序表的删除操作?答:顺序表的删除操作需要将删除位置后的元素依次前移,然后将最后一个元素删除。

5. 顺序表的查找操作有哪些?答:顺序表的查找操作包括按值查找和按位置查找。

按值查找是指根据给定的值在顺序表中查找对应的位置,按位置查找是指根据给定的位置获取对应的值。

二、链表1. 什么是链表?链表的特点是什么?答:链表是一种使用指针来实现的动态数据结构,它由一系列的节点组成。

链表的特点是元素在物理位置上不一定相邻,但逻辑上相邻。

2. 链表的存储结构是怎样的?答:链表的存储结构由节点组成,每个节点包含数据域和指针域。

数据域用于存储数据元素,指针域用于指向下一个节点。

3. 如何实现链表的插入操作?答:链表的插入操作需要创建新节点,并将新节点的指针域指向插入位置的后继节点,然后将插入位置的前驱节点的指针域指向新节点。

4. 如何实现链表的删除操作?答:链表的删除操作需要找到待删除节点的前驱节点,将前驱节点的指针域指向待删除节点的后继节点,然后释放待删除节点的内存空间。

5. 链表的查找操作有哪些?答:链表的查找操作包括按值查找和按位置查找。

按值查找是指根据给定的值在链表中查找对应的节点,按位置查找是指根据给定的位置获取对应的节点。

数据结构课后习题答案第二章 线性表

数据结构课后习题答案第二章   线性表

第二章线性表2.1描述以下三个概念的区别:头指针,头结点,首元结点(第一个元素结点)。

并说明头指针和头结点的作用。

答:头指针是一个指针变量,里面存放的是链表中首结点的地址,并以此来标识一个链表。

如链表H,链表L等,表示链表中第一个结点的地址存放在H、L中。

头结点是附加在第一个元素结点之前的一个结点,头指针指向头结点。

当该链表表示一个非空的线性表时,头结点的指针域指向第一个元素结点,为空表时,该指针域为空。

开始结点指第一个元素结点。

头指针的作用是用来惟一标识一个单链表。

头结点的作用有两个:一是使得对空表和非空表的处理得以统一。

二是使得在链表的第一个位置上的操作和在其他位置上的操作一致,无需特殊处理。

2.2填空题1、在顺序表中插入或删除一个元素,需要平均移动(表中一半)元素,具体移动的元素个数与(表长和该元素在表中的位置)有关。

2、顺序表中逻辑上相邻的元素的物理位置(必定)相邻。

单链表中逻辑上相邻的元素的物理位置(不一定)相邻。

3、在单链表中,除了首元结点外,任一结点的存储位置由(其直接前驱结点的链域的值)指示。

4、在单链表中设置头结点的作用是(插入和删除元素不必进行特殊处理)。

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

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

2.基于时间的考虑。

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

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

2.10 Status DeleteK(SqList &a,int i,int k)//删除线性表a中第i个元素起的k个元素{if(i<1||k<0||i+k-1>a.length) return INFEASIBLE;for(count=1;i+count-1<=a.length-k;count++) //注意循环结束的条件a.elem[i+count-1]=a.elem[i+count+k-1];a.length-=k;return OK;}//DeleteK2.11设顺序表中的数据元素递增有序,试写一算法,将X插入到顺序表的适当位置上,以保持该表的有序性。

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

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

精品文档第二章线性表一.名词解释1.线性结构2.数据结构的顺序实现3.顺序表4.链表5.数据结构的链接实现6. 建表7.字符串8.串9.顺序串 10.链串二、填空题1.为了便于讨论,有时将含n(n>=0)个结点的线性结构表示成(a,a,……a),其中每n12个a代表一个______。

a称为______结点,a称为______结点,i称为a在线性表中的________ii1n或______。

对任意一对相邻结点a、a(1<=i<n),a称为a的直接______a称为a的直iii┼1i┼1┼i1i接______。

2.为了满足运算的封闭性,通常允许一种逻辑结构出现不含任何结点的情况。

不含任何结点的线性结构记为______或______。

3.线性结构的基本特征是:若至少含有一个结点,则除起始结点没有直接______外,其他结点有且仅有一个直接______;除终端结点没有直接______外,其它结点有且仅有一个直接______.4.所有结点按1对1的邻接关系构成的整体就是______结构。

5.线性表的逻辑结构是______结构。

其所含结点的个数称为线性表的______,简称______.6.表长为O的线性表称为______7.线性表典型的基本运算包括:______、______、______、______、______、______等六种。

8.顺序表的特点是______。

9.顺序表的类型定义可经编译转换为机器级。

假定每个datatype类型的变量占用k(k>=1)个内存单元,其中,b是顺序表的第一个存储结点的第一个单元的内存地址,那么,第i个结点a的存储地址为______。

i10.以下为顺序表的插入运算,分析算法,请在______处填上正确的语句。

Void insert_sqlist(sqlist L,datatype x,int i)/*将X插入到顺序表L的第i-1个位置*/{ if( st == maxsize) error(“表满”);if((i<1)||(i>st+1))error(“非法位置”);for(j=st;j>=i;j--)______;L.data[i-1]=x;st=st+1;}11.对于顺序表的插入算法insert_sqlist来说,若以结点移动为标准操作,则插入算法的最坏时间复杂性为________,量级是________。

数据结构(线性表)习题与答案

数据结构(线性表)习题与答案

数据结构(线性表)习题与答案数据结构(线性表)习题与答案1. 线性表的定义线性表是一种常用的数据结构,它由一系列元素组成,并且每个元素具有前驱和后继关系。

线性表可以通过顺序存储或链式存储来实现。

2. 线性表的实现方式2.1 顺序存储顺序存储是利用数组来实现线性表的一种方式。

数组的每个元素可以存储一个数据项,通过下标可以快速访问和操作其中的元素。

2.2 链式存储链式存储是通过节点之间的指针关联来实现线性表的一种方式。

每个节点包含数据域和指针域,指针域指向下一个节点。

3. 线性表的基本操作3.1 初始化线性表初始化线性表需要给表头节点分配内存空间,并将头节点的指针域置为空。

3.2 插入元素在线性表的某个位置插入元素,需要先找到插入位置的前一个节点,然后将新节点插入到该位置。

调整节点之间的指针关联即可完成插入操作。

3.3 删除元素删除线性表中的某个元素,需要找到待删除元素的前一个节点,然后将该节点的指针指向待删除节点的下一个节点,释放待删除节点的内存空间即可。

3.4 查找元素查找线性表中某个元素的位置,可以从表头节点开始逐个比较节点的数据域,直到找到目标元素或者遍历结束。

4. 线性表的习题与答案4.1 习题1已知线性表L中的元素按非递减顺序排列,设计一个算法,将元素x插入到L中,保持L的有序性。

解答:1) 从表头节点开始,顺序遍历节点的数据域,找到第一个大于等于x的节点的前一个节点,记为p。

2) 创建新的节点node,将x赋值给node的数据域。

3) 将node的指针域指向p的下一个节点。

4) 将p的指针域指向node。

5) 插入完成。

4.2 习题2已知线性表L中的元素按递减顺序排列,设计一个算法,删除L中所有大于x的元素。

解答:1) 从表头节点开始,顺序遍历节点的数据域,找到第一个小于等于x的节点的前一个节点,记为p。

2) 将p的指针域指向p的下一个节点,删除p的后继节点。

3) 重复执行步骤2,直到遍历结束。

数据结构第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.下述哪一条是顺序存储结构的优点?()【北方交通大学2001 一、4(2分)】A.存储密度大B.插入运算方便C.删除运算方便D.可方便地用于各种逻辑结构的存储表示2.下面关于线性表的叙述中,错误的是哪一个?()【北方交通大学2001 一、14(2分)】A.线性表采用顺序存储,必须占用一片连续的存储单元。

B.线性表采用顺序存储,便于进行插入和删除操作。

C.线性表采用链接存储,不必占用一片连续的存储单元。

D.线性表采用链接存储,便于插入和删除操作。

3.线性表是具有n个()的有限序列(n>0)。

【清华大学1998 一、4(2分)】A.表元素B.字符C.数据元素D.数据项E.信息项4.若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用()存储方式最节省时间。

【哈尔滨工业大学2001 二、1(2分)】A.顺序表B.双链表C.带头结点的双循环链表D.单循环链表5.某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用()存储方式最节省运算时间。

【南开大学2000 一、3】A.单链表B.仅有头指针的单循环链表C.双链表D.仅有尾指针的单循环链表6.设一个链表最常用的操作是在末尾插入结点和删除尾结点,则选用( )最节省时间。

A. 单链表B.单循环链表C. 带尾指针的单循环链表D.带头结点的双循环链表【合肥工业大学2000 一、1(2分)】7.若某表最常用的操作是在最后一个结点之后插入一个结点或删除最后一个结点。

则采用()存储方式最节省运算时间。

【北京理工大学2000 一、1(2分)】A.单链表B.双链表C.单循环链表D.带头结点的双循环链表8. 静态链表中指针表示的是(). 【北京理工大学2001 六、2(2分)】A.内存地址B.数组下标C.下一元素地址D.左、右孩子地址9. 链表不具有的特点是()【福州大学1998 一、8 (2分)】A.插入、删除不需要移动元素B.可随机访问任一元素C.不必事先估计存储空间D.所需空间与线性长度成正比10. 下面的叙述不正确的是()【南京理工大学1996 一、10(2分)】A.线性表在链式存储时,查找第i个元素的时间同i的值成正比B. 线性表在链式存储时,查找第i个元素的时间同i的值无关C. 线性表在顺序存储时,查找第i个元素的时间同i 的值成正比D. 线性表在顺序存储时,查找第i个元素的时间同i的值无关11. 线性表的表元存储方式有((1))和链接两种。

《数据结构》关于线性表的练习题(PPT内含答案)

《数据结构》关于线性表的练习题(PPT内含答案)

C.插入删除时不需移动元素
D.所需空间与线性表成正比
7.在( B )的运算中,使用顺序表比链表好。
A.插入
B.根据序号查找
C.删除
D.根据元素查找
8.在单链表指针为p的结点之后插入指针为s的结点,正确 的操作是( B )。
A.p->next=s;s->next=p->next;
B.s->next=p->next;p->next=s;
9.若对一个线性表经常进行查找操作,而很少进行插入和 删除操作时,则采用 顺序 存储结构为宜,相反,若经 常进行的是插入和删除操作时,则采用 链式 存储结构 为宜。
习题2
三、判断题 1.线性表的链式存储结构优于顺序存储结构。( F ) 2.链表的每个结点都恰好包含一个指针域。 ( F ) 3.在线性表的链式存储结构中,逻辑上相邻的两个元素在
B.循环链表和单向链表
C.循环链表
15.对具有n个结点的线性表进行插入或删除操作, 所需的算法时间复杂度为( D )。
A.O(n2) C.O(log2n)
B.O(nlog2n) D.O(n)
习题2
二、填空题
1.线性表L=(a1,a2,…,an)采用顺序存储,假定删除 表中任意元素的概率相同,则删除一个元素平均 需要移动元素的个数是 (n-1)/2 。
习题2
5.链表相对于顺序表的优点是插入、删除方便;缺点是存 储密度 小 。
6.链式存储的特点是利用 指针 来表示数据元素之间的 逻辑关系。
7.在双向链表中,每个结点有两个指针域,一个指向其 前驱结点,另一个指向其 后继 结点。
8.在一个双链表中,设指针p是指向该表中待删除的结点, 则需要执行的操作为: p->pre->next=p->next 。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2数据结构复习题(线性表)一.判断题(下列各题,正确的请在前面的括号内打√;错误的打╳)(×)(1)线性表的链式存储结构优于顺序存储。

(×)(2)链表的每个结点都恰好包含一个指针域。

(√)(3)在线性表的链式存储结构中,逻辑上相邻的两个元素在物理位置上并不一定紧邻。

(×)(4)顺序存储方式的优点是存储密度大,插入、删除效率高。

(×)(5)线性链表的删除算法简单,因为当删除链中某个结点后,计算机会自动地将后续的各个单元向前移动。

(×)(6)顺序表的每个结点只能是一个简单类型,而链表的每个结点可以是一个复杂类型。

(√)(7)线性表链式存储的特点是可以用一组任意的存储单元存储表中的数据元素。

(√)(8)线性表采用顺序存储,必须占用一片连续的存储单元。

(×)(9)顺序表结构适宜于进行顺序存取,而链表适宜于进行随机存取。

(ㄨ)(10)插入和删除操作是数据结构中最基本的两种操作,所以这两种操作在数组中也经常使用。

二.填空题(1)顺序表中逻辑上相邻的元素在物理位置上必须相连。

(2)线性表中结点的集合是有限的,结点间的关系是一对一关系。

(3)顺序表相对于链表的优点是:节省存储和随机存取。

(4)链表相对于顺序表的优点是:插入、删除方便。

(5)采用顺序存储结构的线性表叫顺序表。

(6)(7)链表相对于顺序表的优点是插入、删除方便;缺点是存储密度(8)在双链表中要删除已知结点*P(9)在单链表中要在已知结点*P之前插入一个新结点,需找到*P的直接前趋结点的地址,其查找的时间复杂度为 O(n) 。

(10)单链表中需知道头指针才能遍历整个链表。

(11)性表中第一个结点没有直接前趋,称为开始结点。

(12)在一个长度为n的顺序表中删除第i个元素,要移动n-i 个元素。

(13)在一个长度为n的顺序表中,如果要在第i个元素前插入一个元素,要后移n- i +1 个元素。

(14)在无头结点的单链表中,第一个结点的地址存放在头指针中,而其它结点的存储地址存放在前趋结点的指针域中。

(15)当线性表的元素总数基本稳定,且很少进行插入和删除操作,但要求以最快速度存取线性表中的元素时,应采用顺序存储结构。

(16)在线性表的链式存储中,元素之间的逻辑关系是通过指针决定的。

(17)在双向链表中,每个结点都有两个指针域,它们一个指向其前趋结点,另一个指向其后继结点。

(18)对一个需要经常进行插入和删除操作的线性表,采用链式存储结构为宜。

(19)双链表中,设p是指向其中待删除的结点,则需要执行的操作为:p->prior->next=p->next 。

(20)在如图所示的链表中,若在指针P所在的结点之后插入数据域值为a和b的两个结点,则可用下列两个语句: S->next->next=P->next; 和P->next=S;来实现该操作。

三.选择题(1)在具有n个结点的单链表中,实现( A )的操作,其算法的时间复杂度都是O(n)。

A.遍历链表或求链表的第i个结点B.在地址为P的结点之后插入一个结点C.删除开始结点D.删除地址为P的结点的后继结点(2)设a、b、c为三个结点,p、10、20分别代表它们的地址,则如下的存储结构称为( B )。

A.循环链表 B.单链表C.双向循环链表 D.双向链表(3)单链表的存储密度( C )。

A.大于1 B.等于1 C.小于1 D.不能确定(4)已知一个顺序存储的线性表,设每个结点占m个存储单元,若第一个结点的地址为B,则第i个结点的地址为( A )。

A. B+(i-1)*m B.B+i*m C. B-i*m D. B+(i+1)*m(5)在有n个结点的顺序表上做插入、删除结点运算的时间复杂度为( B )。

A.O(1) B.O(n)C.O(n2) D.O(log2n)(6)设Llink、Rlink分别为循环双链表结点的左指针和右指针,则指针P所指的元素是双循环链表L的尾元素的条件是( D )。

A.P== L B.P->Llink== L C.P== NULL D.P->Rlink==L(7)两个指针P和Q,分别指向单链表的两个元素,P所指元素是Q所指元素前驱的条件是( B )。

A.P->next==Q->next B.P->next== Q C.Q->next== P D.P== Q(8)用链表存储的线性表,其优点是( C )。

A.便于随机存取B.花费的存储空间比顺序表少C.便于插入和删除D.数据元素的物理顺序与逻辑顺序相同(9)在单链表中,增加头结点的目的是( C )。

A.使单链表至少有一个结点B.标志表中首结点的位置C.方便运算的实现D.说明该单链表是线性表的链式存储结构(10)下面关于线性表的叙述中,错误的是( D )关系。

A.顺序表必须占一片地址连续的存储单元B.顺序表可以随机存取任一元素C.链表不必占用一片地址连续的存储单元D.链表可以随机存取任一元素(11)L是线性表,已知LengthList(L)的值是5,经DelList(L,2)运算后,LengthList(L)的值是( C )。

A.2 B.3 C.4 D.5(12)单链表的示意图如下:L指向链表Q 结点的前趋的指针是( B )。

A .LB .PC .QD .R(13)设p 为指向单循环链表上某结点的指针,则*p 的直接前驱( C )。

A .找不到B .查找时间复杂度为O (1)C .查找时间复杂度为O (n )D .查找结点的次数约为n(14)等概率情况下,在有n 个结点的顺序表上做插入结点运算,需平均移动结点的数目为( C )。

A .nB .(n-1)/2C . n/2D .(n+1)/2 (15)在下列链表中不能从当前结点出发访问到其余各结点的是( C )。

A .双向链表B .单循环链表C .单链表D .双向循环链表(16)在顺序表中,只要知道( D ),就可以求出任一结点的存储地址。

A .基地址B .结点大小C . 向量大小D .基地址和结点大小(17)在双链表中做插入运算的时间复杂度为( A )。

A .O (1)B .O (n )C .O (n 2) D .O (log 2n ) (18)链表不具备的特点是( A )。

A .随机访问B .不必事先估计存储空间C .插入删除时不需移动元素D .所需空间与线性表成正比 (19)以下关于线性表的论述,不正确的为( C )。

A .线性表中的元素可以是数字、字符、记录等不同类型B .线性顺序表中包含的元素个数不是任意的C .线性表中的每个结点都有且仅有一个直接前趋和一个直接后继D .存在这样的线性表,即表中没有任何结点 (20)在( B )的运算中,使用顺序表比链表好。

A .插入B .根据序号查找C . 删除D .根据元素查找四.下述算法的功能是什么?(1) (2)解:(1)返回结点*p 的直接前趋结点地址。

(2)交换结点*p 和结点*q (p 和q 的值不变)。

五. 程序填空1.已知线性表中的元素是无序的,并以带表头结点的单链表作存储。

试写一算法,删除表中所有大于min ,小于max 的元素,试完成下列程序填空。

ListNode *Demo1(LinkList L,ListNode *p){ // L 是有头结点的单链表ListNode *q=L->next;While (q && q->next!=p)q=q->next;if (q)return q; elseError(“*p not in L”);} void Demo2(ListNode *p,ListNode *q) { // p,*q 是链表中的两个结点 DataType temp; temp=p->data; p->data=q->data; q->data=temp; }V oid delete (lklist head; datatype min, max){ q=head->next;while (p!=NULL){ if ((p->data<=min ) | | (p->data>=max ){q=p; p=p->next ; }else{ q->next=p->next ;delete (p) ;p=q->next ; }}}2.在带头结点head的单链表的结点a之后插入新元素x,试完成下列程序填空。

struct node{ elemtype data;node *next;};void lkinsert (node *head, elemtype x){ node *s, *p;s= new node ;s->data= x ;p=head->next;while (p!=NULL) && ( p->data!=a )____p=p->next ;if (p==NULL)cout<< " 不存在结点a! ";else {_____s->next=p->next______;___ p->next=s __________;}}六.程序设计题1.写一个对单循环链表进行遍历(打印每个结点的值)的算法,已知链表中任意结点的地址为P 。

2.对给定的带头结点的单链表L,编写一个删除L中值为x的结点的直接前趋结点的算法。

3.将一个顺序表中从第i个结点开始的k个结点删除。

4.已知一个单链表,编写一个函数从单链表中删除自第i个结点起的k个结点。

5.有—个单链表(不同结点的数据域值可能相同),其头指针为head,编写一个函数计算值域为x的结点个数。

6.有两个循环单链表,链头指针分别为head1和head2,编写一个函数将链表head1链接到链表head2,链接后的链表仍是循环链表。

1.解:void Show(ListNode *P){ ListNode *t=P;do{ printf ("%c",t->data);t=t->rear;}while (t!=P);}2.解:void delete(ListNode *L){ ListNode *p=L,*q;if (L->next->data==X){ printf (“值为x的结点是第一个结点,没有直接前趋结点可以删除”);return;}for (;p->next->data!=X; q=p; p=p->next); // 删除指针p所指向的结点q->next=p->next;delete p;}3.解(校对一下,或换一题)void Del(SeqList *L,int i,int k){ int j=i-1+k;for (j=0;j<k;j++){ L->data[i-1+j]=L->data[i+k-2+j];if (i+k-2+j>L->last)break;}}void Del(SeqList *L,int i,int k){ int j=i-1+k;if (j>L->last){ printf(“超出范围!”)return;}for (j=0;j<L->last-i;j++)L->data[i-1+j]=L->data[i+k-2+j];}4.解:void Del(node *head,int i,int k){node *p,*q;int j;if (i==1)for (j=1;j<=k;j++) // 删除前k个元素{p=head; // p指向要删除的结点head=head->next;delete p;}else{p=head;for (j=1;j<=i-2;j++)p=p->next; // p指向要删除的结点的前一个结点for (j=1;j<=k;j++){q=p->next; // q 指向要删除的结点p->next=q->next;delete q;}}} 佟1985.解:本题是遍历单链表的每个结点,每遇到一个结点,结点个数加1,结点个数存储在变量n中。

相关文档
最新文档