《数据结构》习题及答案:第2章线性表(第1次更新2012-3)

合集下载

数据结构第二章参考答案

数据结构第二章参考答案

数据结构第二章参考答案1. 线性表线性表是数据结构中最基本的一种结构,在实际应用中广泛使用。

它是一个有序的数据元素序列,其中每个元素都有唯一的前驱和后继,除了第一个元素没有前驱,最后一个元素没有后继。

2. 顺序存储结构顺序存储结构是线性表最简单的一种实现方式。

它利用一段连续的存储空间依次存储线性表的元素,存储位置是连续的。

在顺序存储结构中,插入和删除操作需要移动大量元素,因此效率较低。

3. 链式存储结构链式存储结构通过指针将线性表的各个元素链接起来。

每个元素都包含一个数据域和一个指针域,数据域用于存储数据元素,指针域用于存储下一个元素的地址。

在链式存储结构中,插入和删除操作只需要修改指针,效率较高。

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

栈的特点是后进先出,即最后插入的元素最先被删除。

栈的应用场景包括函数调用、表达式求值等。

5. 队列队列也是一种特殊的线性表,它允许在表的一端(队尾)插入元素,在另一端(队首)删除元素。

队列的特点是先进先出,即最先插入的元素最先被删除。

队列的应用场景包括进程调度、打印队列等。

6. 递归递归是一种解决问题的方法,通过调用自身来解决规模较小的子问题。

在数据结构中,递归广泛应用于树和图的操作中。

递归需要注意递归的边界条件和递归的停止条件,以避免无限递归的问题。

7. 树树是一种非线性的数据结构,它由n个节点组成,这些节点通过边连接起来。

树的特点是每个节点最多有一个父节点,但可以有多个子节点。

树的应用场景包括文件系统、组织结构等。

8. 二叉树二叉树是一种特殊的树结构,每个节点最多有两个子节点。

二叉树的遍历有三种方式:前序遍历(根-左-右)、中序遍历(左-根-右)和后序遍历(左-右-根)。

二叉树的应用场景包括查找、排序等。

9. 查找算法查找算法是在数据集合中寻找特定元素的过程。

常用的查找算法有顺序查找、二分查找、哈希查找等。

不同的查找算法有不同的时间复杂度和空间复杂度,对于不同规模的数据集合有不同的效率。

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

数据结构练习题 第二章  线性表 习题及答案
和________。
14.以下为顺序表的定位运算,分析算法,请在________处填上正确的语句。
int locate_sqlist(sqlist L,datatype X)
/*在顺序表L中查找第一值等于X的结点。若找到回传该结点序号;否则回传0*/
{________;
while((i≤st)&&(L.data[i-1]!=X))i++;
L.data[i-1]=x;
st=st+1;
}
11.对于顺序表的插入算法insert_sqlist来说,若以结点移动为标准操作,则插入算法的最坏时间复杂性为________,量级是________。插入算法的平均时间复杂性为________,平均时间复杂性量级是________。
12.以下为顺序表的删除运算,分析算法,请在________处填上正确的语句。
4.所有结点按1对1的邻接关系构成的整体就是______结构。
5.线性表的逻辑结构是______结构。其所含结点的个数称为线性表的______,简称______.
6.表长为O的线性表称为______
7.线性表典型的基本运算包括:______、______、______、______、______、______等六种。
void delete_sqlist(sqlist L,int i) /*删除顺序表L中的第i-1个位置上的结点*/
{if((i<1)||(i>st))error(“非法位置”);
for(j=i+1;j=st;j++)________;
st=st-1;
}
13.对于顺序表的删除算法delete_sqlist来说,若以结点移动为标准操作,最坏情况时________其平均时间复杂性及其量级分别为________,和________间复杂性及其量级分别是

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

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

第二章线性表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插入到顺序表的适当位置上,以保持该表的有序性。

数据结构考研试题精选及答案第2章 线性表答案

数据结构考研试题精选及答案第2章  线性表答案

第2章线性表部分答案解释如下。

1、头结点并不“仅起”标识作用,并且使操作统一。

另外,头结点数据域可写入链表长度,或作监视哨。

4.两种存储结构各有优缺点,应根据实际情况选用,不能笼统说哪一个好。

7.集合中元素无逻辑关系。

9.非空线性表第一个元素无前驱,最后一个元素无后继。

13.线性表是逻辑结构,可以顺序存储,也可链式存储。

三.填空题1.顺序 2.(n-1)/2 3.py->next=px->next; px->next=py4 .n-i+15.主要是使插入和删除等操作统一,在第一个元素之前插入元素和删除第一个结点不必另作判断。

另外,不论链表是否为空,链表指针不变。

6.O(1),O(n) 7.单链表,多重链表,(动态)链表,静态链表8.f->next=p->next; f->prior=p; p->next->prior=f; p->next=f;9.p^.prior s^.prior^.next10.指针 11.物理上相邻指针 12.4 213.从任一结点出发都可访问到链表中每一个元素。

14.u=p->next; p->next=u->next; free(u); 15.L->next->next==L 16.p->next!=null17.L->next==L && L->prior==L 18.s->next=p->next;p->next=s; 19.(1) IF pa=NIL THEN return(true);(2) pb<>NIL AND pa^.data>=pb^.data(3) return(inclusion(pa,pb));(4) pb:=pb^.next;(5) return(false);非递归算法:(1)pre:=pb; (2) pa<>NIL AND pb<>NIL AND pb^.data>=pa^.data (3)pa:=pa^.next; pb:=pb->next;(4)pb:=pre^.next;pre:=pb;pa:=pa^.next;(5)IF pa=NIL THEN return(true) ELSE return(false);[注]:本题是在链表上求模式匹配问题。

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

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

一、选择题1、用单链表方式存储的线性表,存储每个结点需要两个域,一个是数据域,另一个是()A、当前结点所在的地址域B、指针域C、空指针域D、空闲域2、不带头结点的单链表head为空的判断条件是()A、head==NULLB、head->next==NULLC、head->data==NULLD、head!=NULL3、在一个单链表中,已知q所指结点是p所指结点的前驱结点,若在p和q之间插入s结点,则执行()A、s->next=p; q->next=s;B、p->next=s->next; s->next=p;C、q->next=s->next; s->next=p;D、p->next=s; s->next=q;4、在一个具有n个结点的有序单链表中插入一个新结点并仍然有序的时间复杂度是()A、O(1)B、O(n)C、O(n2)D、O(nlog2n)5、一个单链表中,若删除p所指结点的后续结点,则执行()A、p->next=p->next->next;B、p=p->next; p->next=p->next->next;C、p->next=p;D、p=p->next->next;6、已知一个顺序存储的基本线性表,设每个结点需占m个存储单元,若第一个结点的地址为d1,则第i个结点的地址为()A、d1+(i-1)*mB、d1+i*mC、d1-i*mD、d1+(i+1)*m7、在n个结点的顺序表中,算法的时间复杂度是O(1)的操作是()A、访问第i个结点(1<=i<=n)和求第i个结点的直接前驱(2<=i<=n)B、在第i个结点后插入一个新结点(1<=i<=n)C、删除第i个结点(1<=i<=n)D、将n个结点从小到大排序8、下面给出的算法段是要把一个q所指新结点作为非空双向链表中的p所指结点的前驱结点插入到该双向链表中,能正确完成要求的算法段是()A、q->next=p; q->prior=p->prior; p->prior=q; p->prior->next=q;B、p->prior=q; q->next=p; p->prior->next=q; q->prior=p->prior;C、q->prior=p->prior; q->next=p; p->prior->next=q; p->prior=q;D、以上都不对9、在循环双链表的p所指结点之后插入s所指结点的操作是()A、p->next=s; s->prior=p; p->next->prior=s; s->next=p->next;B、p->next=s; p->next->prior=s; s->prior=p; s->next=p->next;C、s->prior=p; s->next=p->next; p->next=s; p->next->prior=s;D、s->prior=p; p->next->prior=s; s->next=p->next; p->next=s;10、从具有n个结点的单链表中查找其值等于x结点时,在查找成功的情况下,需平均比较()个结点。

《数据结构基础教程》习题及解答

《数据结构基础教程》习题及解答

《数据结构基础教程》习题及解答数据结构基础教程习题及解答第一章:数据结构简介1.1 什么是数据结构?数据结构是指相互之间存在一种或多种特定关系的数据元素的集合,包括数据的逻辑结构、物理结构和数据元素之间的运算。

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

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

1.4 数据结构的主要目标是什么?数据结构的主要目标是提高数据的存储效率和运算效率。

第二章:线性表2.1 线性表的定义线性表是由n(≥0)个数据元素组成的有限序列。

线性表是一种常见的数据结构,常用的实现方式包括数组和链表。

2.2 线性表的顺序存储结构线性表的顺序存储结构是将线性表中的元素存储在连续的存储空间中,通过元素在内存中的物理位置来表示元素之间的关系。

2.3 线性表的链式存储结构线性表的链式存储结构是通过指针将线性表中的元素连接在一起,每个元素包括数据域和指针域。

2.4 线性表的基本操作包括初始化线性表、插入元素、删除元素、查找元素等。

第三章:栈与队列3.1 栈的定义与特性栈是一种具有后进先出特性的线性表,只允许在一端进行插入和删除操作,被称为栈顶。

3.2 栈的顺序存储结构和链式存储结构栈的顺序存储结构和链式存储结构与线性表的存储结构类似,不同之处在于栈只允许在一端进行插入和删除操作。

3.3 栈的应用栈在表达式求值、函数调用和递归等场景中有广泛应用。

3.4 队列的定义与特性队列是一种具有先进先出特性的线性表,允许在一端插入元素,在另一端删除元素。

3.5 队列的顺序存储结构和链式存储结构队列的顺序存储结构和链式存储结构与线性表的存储结构类似,不同之处在于队列允许在一端插入元素,在另一端删除元素。

3.6 队列的应用队列在模拟排队系统、操作系统进程调度等场景中有广泛应用。

第四章:树与二叉树4.1 树的基本概念树是由n(≥0)个节点组成的有限集合,其中有一个称为根节点,除了根节点之外的其余节点被分为m(m≥0)个互不相交的集合,每个集合本身又是一棵树。

《数据结构》吕云翔编著第2章线性表习题解答

《数据结构》吕云翔编著第2章线性表习题解答

数据结构第二章习题解答一、单选题1.在一个长度为n的顺序存储线性表中,向第i个元素(1≤i≤n+1)之前插入一个新元素时,需要从后向前依次后移(B)个元素。

A、n-iB、n-i+1C、n-i-1D、i2.在一个长度为n的顺序存储线性表中,删除第i个元素(1≤i≤n+1)时,需要从前向后依次前移(A)个元素。

A、n-iB、n-i+1C、n-i-1D、i3. 在一个长度为n的线性表中顺序查找值为x的元素时,在等概率情况下,查找成功时的平均查找长度(即需要比较的元素个数)为( C )。

A. nB. n/2C. (n+1)/2D. (n-1)/24.在一个长度为n的线性表中,删除值为x的元素时需要比较元素和移动元素的总次数为(C )。

A. (n+1)/2B. n/2C. nD. n+15. 在一个顺序表的表尾插入一个元素的时间复杂度为(B )。

A. O(n)B. O(1)C. O(n*n)D. O(log2n)6.若一个结点的引用为p,它的前驱结点的引用为q,则删除p的后继结点的操作为(B )。

A. p=p.next.nextB. p.next=p.next.nextC. q.next=p.nextD. q.next=q.next.next8. 假定一个多项式中x的最高次幂为n,则在保存所有系数项的线性表表示中,其线性表长度为(A )。

A. n+1B. nC. n-1D. n+2二、填空题1.对于当前长度为n的线性表,共包含有________多个插入元素的位置,共包含有________多个删除元素的位置。

(答案n+1 n)2.若经常需要对线性表进行表尾插入和删除运算,则最好采用________存储结构,若经常需要对线性表进行表头插入和删除运算,则最好采用________存储结构。

(答案:顺序链式)3.由n个元素生成一个顺序表,若每次都调用插入算法把一个元素插入到表头,则整个算法的时间复杂度为________,若每次都调用插入算法把一个元素插入到表尾,则整个算法的时间复杂度为________。

数据结构习题及答案 (2)

数据结构习题及答案 (2)

第二章线性表一、选择题1.一个线性表第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是( )(A)110 (B)108(C)100 (D)120参考答案:B2. 向一个有127个元素的顺序表中插入一个新元素并保持原来顺序不变,平均要移动()个元素。

(A)64(B)63 (C)63.5 (D)7参考答案:C3.线性表采用链式存储结构时,其地址()。

(A) 必须是连续的 (B) 部分地址必须是连续的(C) 一定是不连续的 (D) 连续与否均可以参考答案:D4. 在一个单链表中,若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;参考答案:B5.在一个单链表中,若删除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;参考答案:A6.下列有关线性表的叙述中,正确的是()(A)线性表中的元素之间隔是线性关系(B)线性表中至少有一个元素(C)线性表中任何一个元素有且仅有一个直接前趋(D)线性表中任何一个元素有且仅有一个直接后继参考答案:A7.线性表是具有n个()的有限序列(n≠0)(A)表元素(B)字符(C)数据元素(D)数据项参考答案:C二、判断题1.线性表的链接存储,表中元素的逻辑顺序与物理顺序一定相同。

()2.如果没有提供指针类型的语言,就无法构造链式结构。

()3.线性结构的特点是只有一个结点没有前驱,只有一个结点没有后继,其余的结点只有一个前驱和后继。

《数据结构》吕云翔编著第2章线性表习题解答

《数据结构》吕云翔编著第2章线性表习题解答

《数据结构》吕云翔编著第2章线性表习题解答数据结构第2章线性表习题解答一、习题解答1. 假设有一个线性表L={a1, a2, ..., an},设计一种算法,将线性表的所有元素逆置。

解答:可以使用两个指针i和j,分别指向线性表的第一个元素和最后一个元素,然后交换这两个指针所指向的元素,接着i向后移动一个单位,j向前移动一个单位,再次交换他们所指向的元素。

依次类推,直到i和j指针相遇为止。

这样就完成了线性表的逆置。

2. 设线性表L={a1, a2, ..., an},设计一个算法,删除其中所有值为x 的元素。

解答:可以使用一个指针i遍历线性表,当遇到一个元素值等于x 时,将该元素删除,同时将后面的元素依次前移一位。

直到整个线性表遍历完毕。

3. 设有两个线性表LA={a1, a2, ..., am}和LB={b1, b2, ..., bn},其中元素递增有序排列。

设计一个算法,将LA和LB合并成一个新的线性表LC,且元素递增有序排列。

解答:可以使用两个指针i和j分别指向LA和LB的第一个元素,并且使用一个指针k指向LC的最后一个元素。

比较LA[i]和LB[j]的大小,将较小的元素插入到LC的末尾,然后相应指针后移一位,直到其中一个指针到达对应线性表的末尾。

最后,将剩余的元素插入到LC的末尾,即可得到合并后的线性表LC。

4. 设线性表L={a1, a2, ..., an},设计一个算法,找出其中最大的元素以及最大元素的位置。

解答:可以使用一个变量max记录当前遍历到的最大元素,初始化为L[0],同时使用变量position记录最大元素的位置,初始值也为0。

然后遍历整个线性表,若遇到L[i]大于max,则更新max为L[i],同时更新position为i。

遍历完毕后,max就是最大元素,position就是最大元素的位置。

5. 在线性表L={a1, a2, ..., an}中,设计一个算法,找出倒数第k个位置上的元素。

《数据结构》习题及答案:第2章 线性表(第1次更新2012-3)

《数据结构》习题及答案:第2章 线性表(第1次更新2012-3)

第2章线性表一、选择题1.表长为N 的顺序表,当在任何位置上插入或删除一个元素的概率相等时,插入一个元素所需移动元素的平均次数为(),删除一个元素需要移动的元素个数为()。

【**,★】A. (N-1)/2B. NC. N+1D. N-1E. N/2F. (N+1)/2G. (N-2)/22.线性表是具有N 个()的有限序列。

【*】A、表元素B、字符C、数据元素D、数据项E、信息3.“线性表的逻辑顺序和物理顺序总是一致的。

”这个结论是()。

【*】A、正确的B、错误的C、不一定,与具体结构有关。

4.线性表采用链式存储结构时,要求内存中可用存储单元的地址()。

【*,★】A、必须是连续的B、部分地址必须是连续的C、一定是不连续的D、连续或不连续都可以。

5.带头结点的单链表为空的判定条件是()。

【*】A、head==NULLB、head->next==NULLC、head->next==headD、head!=NULL6.不带头结点的单链表head 为空的判定条件是()。

【*】A、head==NULLB、head->next==NULLC、head->next==headD、head!=NULL7.非空的循环单链表head 的尾结点P 满足()。

(注:带头结点)【*】A、P->NEXT=NULLB、p=NULLC、p->next==headD、p==head8.在一个具有n 个结点的有序单链表中插入一个新结点并仍然有序的时间复杂度是()。

【*,★】A、O(1)B、O(n)C、O(n2)D、O(nlog2n)9.在一个单链表中,若删除P 所指结点的后继结点,则执行()。

【*,★】A、p->next=p->next->nextB、p=p->next;p->next=p->next->nextC、p->next=p->next;D、p=p->next->next;10.在一个单链表中,若在P所指结点之后插入S所指结点,则执行()。

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

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

数据结构课后习题答案第二章线性表线性表是数据结构中最基本、最常用的一种数据结构,它按照线性的顺序存储数据元素,具有访问方便、插入和删除操作简单等特点。

第二章的习题主要涉及线性表的基本概念、顺序表、链表以及线性表的应用等内容。

以下是对第二章习题的详细解答。

1. 题目:给定一个具有n(1≤n≤10)个整数的一个线性表,设计一个时间复杂度为O(n)的算法,判断其中是否存在相同的元素。

解答:我们可以基于哈希表实现该算法。

首先创建一个哈希表,用于存储每个整数对应的出现次数。

然后遍历线性表中的每个元素,将其作为键,出现次数作为值存入哈希表中。

在遍历的同时,判断当前元素是否已经在哈希表中存在,若存在则说明存在相同的元素,算法结束;若不存在,则继续遍历下一个元素。

最终,如果遍历完所有元素都没有找到相同的元素,则可以得出结论线性表中不存在相同的元素。

2. 题目:设计一个算法,将一个线性表L(已知长度为n)中所有元素逆置。

解答:我们可以使用两个指针,一个指向线性表的首元素,另一个指向线性表的尾元素,然后交换两个指针所指向的元素,然后将指针向中间移动,继续进行交换操作,直到两个指针相遇为止。

通过这样的操作,就可以将线性表中所有元素逆置。

3. 题目:设计一个算法,将一个顺序表L的所有元素逆置,并将逆置后的顺序表存放到一个新的顺序表中。

解答:首先创建一个新的顺序表R,将L中的元素逆序遍历并依次插入到R中即可实现逆置。

具体过程为,遍历L中的每个元素,依次将其插入到R的首位置。

经过遍历后,R中的元素顺序和L中的元素顺序完全相反,即实现了逆置操作。

4. 题目:设计一个算法,删除一个单链表中所有值为x的节点。

解答:我们可以使用两个指针,一个指向当前节点,另一个指向当前节点的前一个节点。

遍历链表时,判断当前节点的值是否为x,若是,则将当前节点的前一个节点的指针指向当前节点的下一个节点,然后删除当前节点。

若不是,则继续遍历下一个节点。

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

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

数据结构--线性表习题及答案第⼆章线性表⼀、选择题1、若长度为n的线性表采⽤顺序存储结构,在其第i个位置插⼊⼀个新元素算法的时间复杂度()。

A. O(log2n)B.O(1)C. O(n)D.O(n2)2、若⼀个线性表中最常⽤的操作是取第i个元素和找第i个元素的前趋元素,则采⽤()存储⽅式最节省时间。

A. 顺序表B. 单链表C. 双链表D. 单循环链表3、具有线性结构的数据结构是()。

A. 图B. 树C. ⼴义表D.栈4、在⼀个长度为n的顺序表中,在第i个元素之前插⼊⼀个新元素时,需向后移动()个元素。

A. n-iB. n-i+1C. n-i-1D. i5、⾮空的循环单链表head的尾结点p满⾜()。

A. p->next==headB. p->next==NULLC. p==NULLD. p==head6、链表不具有的特点是()。

A. 可随机访问任⼀元素B. 插⼊删除不需要移动元素C. 不必事先估计存储空间D. 所需空间与线性表长度成正⽐7、在双向循环链表中,在p指针所指的结点后插⼊⼀个指针q所指向的新结点,修改指针的操作是()。

A. p->next=q;q->prior=p;p->next->prior=q;q->next=q;B. p->next=q;p->next->prior=q;q->prior=p;q->next=p->next;C. q->prior=p;q->next=p->next;p->next->prior=q;p->next=q;D. q->next=p->next;q->prior=p;p->next=q;p->next=q;8、线性表采⽤链式存储时,结点的存储地址()。

A. 必须是连续的B. 必须是不连续的C. 连续与否均可D. 和头结点的存储地址相连续9、在⼀个长度为n的顺序表中删除第i个元素,需要向前移动()个元素。

数据结构 课后习题 第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.按顺序存储方法存储的线性表称为________,按链式存储方法存储的线性表称为________。

中国农业大学_821数据结构_《数据结构》习题(2)

中国农业大学_821数据结构_《数据结构》习题(2)

第2章线性表一、回答题1. 线性表的两种存储结构各有哪些优缺点?2. 对于线性表的两种存储结构,如果有n个线性表同时并存,并且在处理过程中各表的长度会动态发生变化,线性表的总数也会自动改变,在此情况下,应该选用哪种存储结构,为什么?3. 对于线性表的两种存储结构,如果线性表的总数基本稳定,并且很少进行插入和删除操作,但是要求以最快的速度存取线性表中的元素,那么应该选用哪种存储结构?试说明理由。

二、填空题1. 已知L是无头结点的单链表,且p结点既不是第一个结点,也不是最后一个结点,试从下列提供的语句中选出合适的语句序列:(1) 在p结点之后插入s结点:(2) 在p结点之前插入s结点:(3) 在单链表L首插入s结点:(4) 在单链表L后插入s结点:提供的语句:①p->next = s;② p ->next = p ->next ->next; ③ p ->next = s ->next; ④ s ->next = p ->next; ⑤ s ->next = L; ⑥ s ->next = p; ⑦ s ->next = NULL; ⑧ q = p;⑨ while ( p ->next ! = q ) p = p ->next ; ⑩ while ( p ->next ! = NULL ) p = p ->next ; p = q; p = L; L = s; L = p;2. 已知p 结点是某双向链表的中间结点,试从下列提供的语句中选出合适的语句序列。

(1) 在p 结点之后插入s 结点: (2) 在p 结点之前插入s 结点: (3) 删除p 结点的直接后继结点: (4) 删除p 结点的直接前驱结点:提供的语句:① p ->next = p ->next ->next; ② p ->prior = p ->prior ->prior; ③ p ->next = s; ④ p ->prior = s;11 12 13 14⑤ s ->next = p; ⑥ s ->prior = p; ⑦ s ->next = p ->next; ⑧ s ->prior = p ->prior; ⑨ p ->prior ->next = p ->next; ⑩ p ->prior ->next = p; p ->next ->prior = p; p ->next ->prior = s; p ->prior ->next = s; p ->next ->prior = p ->prior; q = p ->next; q = p ->prior; delete p; delete q;3. 在顺序表中插入或删除一个数据元素,需要平均移动个元素,具体移动的元素个数与有关。

数据结构 第2章线性表 习题 答案

数据结构 第2章线性表  习题  答案

第2章线性表参考答案一、填空1. 【严题集2.2①】在顺序表中插入或删除一个元素,需要平均移动表中一半元素,具体移动的元素个数与表长和该元素在表中的位置有关。

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

3. 向一个长度为n的向量的第i个元素(1≤i≤n+1)之前插入一个元素时,需向后移动n-i+1 个元素。

4. 向一个长度为n的向量中删除第i个元素(1≤i≤n)时,需向前移动n-i 个元素。

5. 在顺序表中访问任意一结点的时间复杂度均为 O(1),因此,顺序表也称为随机存取的数据结构。

6. 【严题集2.2①】顺序表中逻辑上相邻的元素的物理位置必定相邻。

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

7. 【严题集2.2①】在单链表中,除了首元结点外,任一结点的存储位置由其直接前驱结点的链域的值指示。

8.在n个结点的单链表中要删除已知结点*p,需找到它的前驱结点的地址,其时间复杂度为O(n)。

二、判断正误(在正确的说法后面打勾,反之打叉)( × )1. 链表的每个结点中都恰好包含一个指针。

答:错误。

链表中的结点可含多个指针域,分别存放多个指针。

例如,双向链表中的结点可以含有两个指针域,分别存放指向其直接前趋和直接后继结点的指针。

( × )2. 链表的物理存储结构具有同链表一样的顺序。

错,链表的存储结构特点是无序,而链表的示意图有序。

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

错,链表的结点不会移动,只是指针内容改变。

( × )4. 线性表的每个结点只能是一个简单类型,而链表的每个结点可以是一个复杂类型。

错,混淆了逻辑结构与物理结构,链表也是线性表!且即使是顺序表,也能存放记录型数据。

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

错,正好说反了。

顺序表才适合随机存取,链表恰恰适于“顺藤摸瓜”( × )6. 顺序存储方式的优点是存储密度大,且插入、删除运算效率高。

《数据结构》教材课后习题+答案

《数据结构》教材课后习题+答案

《数据结构》教材课后习题+答案数据结构第一章介绍数据结构是计算机科学中重要的概念,它涉及到组织和存储数据的方法和技术。

数据结构的选择对于算法的效率有着重要的影响。

本教材为读者提供了丰富的课后习题,以帮助读者巩固所学知识并提高解决问题的能力。

下面是一些选定的习题及其答案,供读者参考。

第二章线性表习题一:给定一个顺序表L,编写一个算法,实现将其中元素逆置的功能。

答案一:算法思路:1. 初始化两个指针i和j,分别指向线性表L的首尾两个元素2. 对于L中的每一个元素,通过交换i和j所指向的元素,将元素逆置3. 当i>=j时,停止逆置算法实现:```pythondef reverse_list(L):i, j = 0, len(L)-1while i < j:L[i], L[j] = L[j], L[i]i += 1j -= 1```习题二:给定两个线性表A和B,编写一个算法,将线性表B中的元素按顺序插入到线性表A中。

答案二:算法思路:1. 遍历线性表B中的每一个元素2. 将B中的元素依次插入到A的末尾算法实现:```pythondef merge_lists(A, B):for element in B:A.append(element)```第三章栈和队列习题一:编写一个算法,判断一个表达式中的括号是否匹配。

表达式中的括号包括小括号"()"、中括号"[]"和大括号"{}"。

答案一:算法思路:1. 遍历表达式中的每一个字符2. 当遇到左括号时,将其推入栈中3. 当遇到右括号时,判断栈顶元素是否与其匹配4. 当遇到其他字符时,继续遍历下一个字符5. 最后判断栈是否为空,若为空则表示括号匹配算法实现:```pythondef is_matching(expression):stack = []for char in expression:if char in "([{":stack.append(char)elif char in ")]}":if not stack:return Falseelif (char == ")" and stack[-1] == "(") or (char == "]" and stack[-1] == "[") or (char == "}" and stack[-1] == "{"):stack.pop()else:return Falsereturn not stack```习题二:利用两个栈实现一个队列。

(完整版) 《数据结构》教材课后习题+答案

(完整版) 《数据结构》教材课后习题+答案

第1章绪论习题1.简述下列概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型。

2.试举一个数据结构的例子,叙述其逻辑结构和存储结构两方面的含义和相互关系。

3.简述逻辑结构的四种基本关系并画出它们的关系图。

4.存储结构由哪两种基本的存储方法实现?5.选择题(1)在数据结构中,从逻辑上可以把数据结构分成()。

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.栈6.试分析下面各程序段的时间复杂度。

(1)x=90; y=100;while(y>0)if(x>100){x=x-10;y--;}else x++;(2)for (i=0; i<n; i++)for (j=0; j<m; j++)a[i][j]=0;(3)s=0;for i=0; i<n; i++)for(j=0; j<n; j++)s+=B[i][j];sum=s;(4)i=1;while(i<=n)i=i*3;(5)x=0;for(i=1; i<n; i++)for (j=1; j<=n-i; j++)x++;(6)x=n; //n>1y=0;while(x≥(y+1)* (y+1))y++;(1)O(1)(2)O(m*n)(3)O(n2)(4)O(log3n)(5)因为x++共执行了n-1+n-2+……+1= n(n-1)/2,所以执行时间为O(n2)(6)O(n)第2章线性表1.选择题(1)一个向量第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是()。

《数据结构》第二章线性表习题及参考答案

《数据结构》第二章线性表习题及参考答案

《数据结构》第二章线性表习题一、单项选择题1. 线性表是________。

A.一个有限序列,可以为空B.一个有限序列,不可以为空C.一个无限序列,可以为空D.一个无限序列,不可以为空2. 在一个长度为n的顺序表中删除第i个元素(0<=i<=n)时,需向前移动个元素。

A.n-i B.n-i+l C.n-i-1 D.i3. 线性表采用链式存储时,其地址________。

A.必须是连续的B.一定是不连续的C.部分地址必须是连续的D.连续与否均可以4. 从一个具有n个结点的单链表中查找其值等于x的结点时,在查找成功的情况下,需平均比较________个元素结点。

A.n/2 B.n C.(n+1)/2 D.(n-1)/25. 在双向循环链表中,在p所指的结点之后插入s指针所指的结点,其操作是____。

A. p->next=s; s->prior=p;p->next->prior=s; s->next=p->next;B. s->prior=p; s->next=p->next;p->next=s; p->next->prior=s;C. p->next=s; p->next->prior=s;s->prior=p; s->next=p->next;D. s->prior=p; s->next=p->next;p->next->prior=s; p->next=s;6. 设单链表中指针p指向结点m,若要删除m之后的结点(若存在),则需修改指针的操作为________。

A.p->next=p->next->next; B.p=p->next; C.p=p->next->next; D.p->next=p;7. 在一个长度为n的顺序表中向第i个元素(0< i<n+l )之前插入一个新元素时,需向后移动______个元素。

数据结构课后习题(第2章)

数据结构课后习题(第2章)
int countx(LinkListhead,ElemType x)
{LinkListp;int n=0;

while (p!=NULL)
{ if (p->data= =x)


}
return(n);
}
【课后习题】第2章 线性表(参考答案)
一、判断题(如果正确,在题号前打“”,否则打“”。每题2分,共10分)
( ) 4.线性表的逻辑顺序与物理顺序总是一致的。
( ) 5.线性表的长度是指它所占存储空间的大小。
二、填空题(每空1.5分,共21分)
1.从逻辑结构看,线性表是典型的。
2.在一个长度为n的向量中在第i(1≤i≤n+1)个元素之前插入一个元素时,需向后移动个元素,算法的时间复杂度为。
3.在一个长度为n的向量中删除第i(1≤i≤n)个元素时,需向前移动个元素,算法的时间复杂度为。
A.P= =LB.P= =NULLC.P-﹥next==LD.P-﹥prior==L
6.在一个具有n个结点的有序单链表中插入一个新结点,并使插入后仍然有序,则该操作的时间复杂性量级为()。
A.0(1)B.0(n)C.0(nlog2n)D.0(n2)
7.顺序存储的线性表(a1,a2,…an),在任一结点前插入一个新结点时所需移动结点的平均次数为()。
p=L;j=0;
while((p<>p->next)&&(j<i-1)){p=p->next;j++;}
if(((p==L)&&(i<>1))||(j>i-1)) return ERROR;
p=p->next;
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
B、p->rlink=s;p->rlink->llink=s;s->llink=p;s->rlink=p->rlink;
C、s->llink=p;s->rlink=p->rlink;p->rlink=s;p->rlink->llink=s;
D、s->llink=p;s->rlink=p->rlink;p->rlink->llink=s;p->rlink=s;
在一个单链表中,若在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;
在一个单链表中,已知q是p的前趋结点,若q和p之间插入结点
A、表元素B、字符C、数据元素
D、数据项
E、信息
),删
线性表的逻辑顺序和物理顺序总是一致的。 ”这个结论是(
B、错误的C、不一定,与具体结构有关。
线性表采用链式存储结构时,要求内存中可用存储单元的地址(
A、必须是连续的B、部分地址必须是连续的
A、正确的
C一定是不连续的
D、连续或不连续都可以。
带头结点的单链表为空的判定条件是(
章 线性表
选择题
表长为N的顺序表,当在任何位置上插入或删除一个元素的概率相等时,插入一个元素所需移动元素的平均次数为( 除一个元素需要移动的元素个数为()【**,★】
A. (N-1)/2 B. N C. N+1 D. N-1 E. N/2 F. (N+1)/2 G. (N-2)/2
线性表是具有N个( )的有限序列。【 * 】
C、q->llink=p->rlink;q->rlink=p;p->llink->rlink=q;p->llink=q;
D、以上都不对
13.如上题结点结构,如在此非空循环双向链表的结点p之后插入结点s的操作序列是( )。【 ** 】
A、p->rlink=s;s->llink=p;p->rlink->llink=s;s->rlink=p->rlink;
16.非空线性表L=(a1,a2,…,ai,…,an),下列说法正确的是()【*】
A、每个元素都有一个直接前驱和直接后继
B、线性表中至少要有一个元素
C表中诸元素的排列顺序必须是由小到大或由大到小的
D、除第一个元素和最后一个元素外其余每个元素都有一个且仅有一个直接前驱和直接后继
17.顺序表是线性表的()【**,★】
A、不再需要头指针了
B、已知某个结点的位置后,能够容易找到它的直接前趋
C在进行插入、删除运算时,能更好地保证链表不断开
D、从表中任一结点出发都能扫描到整个链表
23.在线性表的下列存储结构中,读取元素花费时间最少的是()【*,★】
A、s->next=p->next;p->next=s;
B、p->next=s->next;s->next=p;
s,则执行()。【*】
C、q->next=s;s->next=p;
D、p->next=s;s->next=q;
假设双链表结点的类型如下:【
*,★】
typedef struct linknode{
所指结点的后继结点,则执行( )。【
C、p->next==head
)。【*,★】
A、O(1) B、O(n)
在一个单链表中,若删除P
*,★】
A、p->next=p->next->next
B、p=p->next;p->next=p->next->next
D、p=p->next->next;
C、p->next=p->next;
//数据域
}bnode;
现将一个q所指新结点作为非空双向链表中的p所指结点的前趋结点插入到该双链表中,能正确完成此要求的语句段是
A、q->rlink=p;q->llink=p->llink;p->llink=q;p->llink->rlink=q;
B、p->llink=q;q->rlink=p;p->llink->rlink=q;q->llink=p->llink
D、顺序表的特点是:逻辑上相邻的元素,存储在物理位置也相邻的单元中
19.对顺序表上的插入、删除算法的时间复杂性分析来说,通常以()为标准操作。【 *】
A、插入操作B、结点移动C、算术表达式D、删除操作
20.对于顺序表的优缺点,以下说法错误的是()【 *】
A、无需为表示结点间的逻辑关系而增加额外的存储空间
14.在一个长度为n的单链表上,设有头和尾两个指针,执行()操作与链表的长度有关。【**,★】
A、删除单链表中的第一个元素
B、删除单链表中最后一个元素
C在单链表第一个元素前插线性结构中的一个结点代表一个( )【 * 】
A、数据元素B、数据项C、数据D、数据结构
A、head==NULL
C、head->next==head
不带头结点的单链表head
A、head==NULL
C、head->next==head
)。【*】
)。【*,★】
)。【*】
B、head->next==NULL
D、head!=NULL
为空的判定条件是(
)。【*】
B、head->next==NULL
A、链式存储结构B、顺序存储结构
C索引存储结构D、散列存储结构
18.对于顺序表,以下说法错误的是()【*,★】
A、顺序表是用一维数组实现的线性表,数组的下标可以看成是元素的绝对地址
B、顺序表的所有存储结点按相应数据元素间的逻辑关系决定的次序依次排列
C顺序表的特点是:逻辑结构中相邻的结点在存储结构中仍相邻
D、head!=NULL
第2
一、
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
的尾结点P满足( ) (注:带头结点)【 *】
A、P->NEXT=NULL
B、p=NULL
D、p==head
在一个具有n个结点的有序单链表中插入一个新结点并仍然有序的时间复杂度是(2
C、O(n)D、O(nlog2n)
B、可以方便地随机存取表中的任一结点
C插入和删除运算较方便
D、由于顺序表要求占用连续的空间,存储分配只能预先进行(静态分配)
21.若某线性表中最常用的操作是取第i个元素和找第i个元素的前趋元素,则采用( )存储方式最节省时间。【 *】
A、顺序表B、单链表C、双链表D、单循环链表
22.循环链表主要优点是()【 *】
相关文档
最新文档