数据结构线性表答案
数据结构第二章课后答案
数据结构第二章课后答案数据结构第二章课后答案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章线性表班级学号__________-姓名一、判断正误(×)1. 链表的每个结点中都恰好包含一个指针。
链表中的结点可含多个指针域,分别存放多个指针。
例如,双向链表中的结点可以含有两个指针域,分别存放指向其直接前趋和直接后继结点的指针。
(×)2. 链表的物理存储结构具有同链表一样的顺序。
链表的存储结构特点是无序,而链表的示意图有序。
(×)3. 链表的删除算法很简单,因为当删除链中某个结点后,计算机会自动地将后续的各个单元向前移动。
链表的结点不会移动,只是指针内容改变。
(×)4. 线性表的每个结点只能是一个简单类型,而链表的每个结点可以是一个复杂类型。
混淆了逻辑结构与物理结构,链表也是线性表!且即使是顺序表,也能存放记录型数据。
(×)5. 顺序表结构适宜于进行顺序存取,而链表适宜于进行随机存取。
正好说反了。
顺序表才适合随机存取,链表恰恰适于“顺藤摸瓜”(×)6. 顺序存储方式的优点是存储密度大,且插入、删除运算效率高。
前一半正确,但后一半说法错误,那是链式存储的优点。
顺序存储方式插入、删除运算效率较低,在表长为n的顺序表中,插入和删除一个数据元素,平均需移动表长一半个数的数据元素。
(×)7. 线性表在物理存储空间中也一定是连续的。
线性表有两种存储方式,顺序存储和链式存储。
后者不要求连续存放。
(×)8. 线性表在顺序存储时,逻辑上相邻的元素未必在存储的物理位置次序上相邻。
线性表有两种存储方式,在顺序存储时,逻辑上相邻的元素在存储的物理位置次序上也相邻。
(×)9. 顺序存储方式只能用于存储线性结构。
顺序存储方式不仅能用于存储线性结构,还可以用来存放非线性结构,例如完全二叉树是属于非线性结构,但其最佳存储方式是顺序存储方式。
(后一节介绍)(×)10. 线性表的逻辑顺序与存储顺序总是一致的。
理由同7。
链式存储就无需一致。
数据结构练习题线性表习题及答案
数据结构练习题线性表习题及答案精品文档第二章线性表一.名词解释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接______。
< bdsfid="75" p=""></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的存储地址为______。
数据结构线性表答案 (1)
第一章线性表2.1 描述以下三个概念的区别:头指针,头结点,首元结点(第一个元素结点)。
解:头指针是指向链表中第一个结点的指针。
首元结点是指链表中存储第一个数据元素的结点。
头结点是在首元结点之前附设的一个结点,该结点不存储数据元素,其指针域指向首元结点,其作用主要是为了方便对链表的操作。
它可以对空表、非空表以及首元结点的操作进行统一处理。
2.2 填空题。
解:(1) 在顺序表中插入或删除一个元素,需要平均移动表中一半元素,具体移动的元素个数与元素在表中的位置有关。
(2) 顺序表中逻辑上相邻的元素的物理位置必定紧邻。
单链表中逻辑上相邻的元素的物理位置不一定紧邻。
(3) 在单链表中,除了首元结点外,任一结点的存储位置由其前驱结点的链域的值指示。
(4) 在单链表中设置头结点的作用是插入和删除首元结点时不用进行特殊处理。
2.3 在什么情况下用顺序表比链表好?解:当线性表的数据元素在物理位置上是连续存储的时候,用顺序表比用链表好,其特点是可以进行随机存取。
2.4 对以下单链表分别执行下列各程序段,并画出结果示意图。
解:2.5 画出执行下列各行语句后各指针及链表的示意图。
L=(LinkList)malloc(sizeof(LNode)); P=L; for(i=1;i<=4;i++){P->next=(LinkList)malloc(sizeof(LNode)); P=P->next; P->data=i*2-1;}P->next=NULL;for(i=4;i>=1;i--) Ins_LinkList(L,i+1,i*2); for(i=1;i<=3;i++) Del_LinkList(L,i);解:2.6 已知L是无表头结点的单链表,且P结点既不是首元结点,也不是尾元结点,试从下列提供的答案中选择合适的语句序列。
a. 在P结点后插入S结点的语句序列是__________________。
数据结构考研复习题--第二章--线性表(带答案)
第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))和链接两种。
数据结构(线性表)习题与答案
数据结构(线性表)习题与答案数据结构(线性表)习题与答案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,直到遍历结束。
数据结构(C++版)课后答案 (王红梅)第2章 线性表
第 2 章线性表课后习题讲解1. 填空⑴在顺序表中,等概率情况下,插入和删除一个元素平均需移动()个元素,具体移动元素的个数与()和()有关。
【解答】表长的一半,表长,该元素在表中的位置⑵顺序表中第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的存储地址是()。
【解答】108【分析】第5个元素的存储地址=第1个元素的存储地址+(5-1)×2=108⑶设单链表中指针p 指向结点A,若要删除A的后继结点(假设A存在后继结点),则需修改指针的操作为()。
【解答】p->next=(p->next)->next⑷单链表中设置头结点的作用是()。
【解答】为了运算方便【分析】例如在插入和删除操作时不必对表头的情况进行特殊处理。
⑸非空的单循环链表由头指针head指示,则其尾结点(由指针p所指)满足()。
【解答】p->next=head【分析】如图2-8所示。
⑹在由尾指针rear指示的单循环链表中,在表尾插入一个结点s的操作序列是();删除开始结点的操作序列为()。
【解答】s->next =rear->next; rear->next =s; rear =s;q=rear->next->next; rear->next->next=q->next; delete q;【分析】操作示意图如图2-9所示:⑺一个具有n个结点的单链表,在指针p所指结点后插入一个新结点的时间复杂度为();在给定值为x的结点后插入一个新结点的时间复杂度为()。
【解答】Ο(1),Ο(n)【分析】在p所指结点后插入一个新结点只需修改指针,所以时间复杂度为Ο(1);而在给定值为x的结点后插入一个新结点需要先查找值为x的结点,所以时间复杂度为Ο(n)。
⑻可由一个尾指针唯一确定的链表有()、()、()。
【解答】循环链表,循环双链表,双链表2. 选择题⑴线性表的顺序存储结构是一种()的存储结构,线性表的链接存储结构是一种()的存储结构。
数据结构线性表课后答案
第2章线性表1.选择题(1)顺序表中第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是()。
A.110 B.108 C.100 D.120答案:B解释:顺序表中的数据连续存储,所以第5个元素的地址为:100+2*4=108。
(2)在n个结点的顺序表中,算法的时间复杂度是O(1)的操作是()。
A.访问第i个结点(1≤i≤n)和求第i个结点的直接前驱(2≤i≤n)B.在第i个结点后插入一个新结点(1≤i≤n)C.删除第i个结点(1≤i≤n)D.将n个结点从小到大排序答案:A解释:在顺序表中插入一个结点的时间复杂度都是O(n2),排序的时间复杂度为O(n2)或O(nlog2n)。
顺序表是一种随机存取结构,访问第i个结点和求第i个结点的直接前驱都可以直接通过数组的下标直接定位,时间复杂度是O(1)。
(3)向一个有127个元素的顺序表中插入一个新元素并保持原来顺序不变,平均要移动的元素个数为()。
A.8 B.63.5 C.63 D.7答案:B解释:平均要移动的元素个数为:n/2。
(4)链接存储的存储结构所占存储空间()。
A.分两部分,一部分存放结点值,另一部分存放表示结点间关系的指针B.只有一部分,存放结点值C.只有一部分,存储表示结点间关系的指针D.分两部分,一部分存放结点值,另一部分存放结点所占单元数答案:A(5)线性表若采用链式存储结构时,要求内存中可用存储单元的地址()。
A.必须是连续的B.部分地址必须是连续的C.一定是不连续的D.连续或不连续都可以答案:D(6)线性表L在()情况下适用于使用链式结构实现。
A.需经常修改L中的结点值B.需不断对L进行删除插入C.L中含有大量的结点D.L中结点结构复杂答案:B解释:链表最大的优点在于插入和删除时不需要移动数据,直接修改指针即可。
(7)单链表的存储密度()。
A.大于1 B.等于1 C.小于1 D.不能确定答案:C解释:存储密度是指一个结点数据本身所占的存储空间和整个结点所占的存储空间之比,假设单链表一个结点本身所占的空间为D,指针域所占的空间为N,则存储密度为:D/(D+N),一定小于1。
数据结构--线性表习题及答案
数据结构--线性表习题及答案第⼆章线性表⼀、选择题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个元素,需要向前移动()个元素。
数据结构(C++版)课后答案_(王红梅)第2章_线性表
⑹ 在由尾指针 rear 指示的单循环链表中,在表尾插入一个结点 s 的操作序列是( );删除开始结点的操作序列为( )。 【解答】s->next =rear->next; rear->next =s; rear =s; q=rear->next->next; rear->next->next=q->next; delete q; 【分析】操作示意图如图 2-9 所示:
⑺ 一个具有 n 个结点的单链表,在指针 p 所指结点后插入一个新结点的时间复杂度为( );在给定值为 x 的结点后 插入一个新结点的时间复杂度为( )。 【解答】Ο(1),Ο(n)
⑻ 可由一个尾指针唯一确定的链表有( )、( )、( )。 【解答】的顺序存储结构是一种( )的存储结构,线性表的链接存储结构是一种( )的存储结构。
⑻ 在具有 n 个结点的有序单链表中插入一个新结点并仍然有序的时间复杂度是( )。 A O(1) B O(n) C O(n2) D O(nlog2n) 【解答】B
⑼ 对于 n 个元素组成的线性表,建立一个有序单链表的时间复杂度是( )。 A O(1) B O(n) C O(n2) D O(nlog2n) 【解答】C 【分析】该算法需要将 n 个元素依次插入到有序单链表中,而插入每个元素需 O(n)。
数据结构第一次作业及答案--线性表
第一次作业------------线性表题目1、下列图1单链表执行R->data=P->next->data语句后,P->next->data值为A. 5B. 7C. 2D. 3题目2、在顺序表中,只要知道( ),就可在相同时间内求出任一结点的存储地址。
A. 向量大小B. 基地址和结点大小C. 结点大小D. 基地址题目3、非空的循环单链表head的尾节点(由r所指向)满足( )A. r->next=NULLB. r->next=headC. r=NULLD. r=head题目4、设线性表(a1,a2,a3···an)按顺序存储,且每个元素占有m个存储单元,则元素ai 的地址为A. LOC(a1) + i×m ,其中LOC(a1)表示元素a1的地址B. 元素ai的地址无法计算C. LOC(a1) + (i-1)×m,D. LOC(a1) + (i-2)×m题目5、在()运算中,使用顺序表比链表好。
A. 根据元素值查找B. 插入C. 根据序号查找D. 删除题目6、在一个单链表中,若P所指结点不是最后结点,在P之后插入S所指结点A. P→next=S;S→next=PB. S→next=P→next; P=SC. S→next=P→next;P→next=SD. S→next=P;P→next=S题目7、在双向循环链表的*p结点之后插入*s结点的操作是A. s->prior=p; s->next=p->next; p->next=s; p->next->prior=s;B. s->prior=p; s->next=p->next; p->next->prior=s; p->next=s;C. p->next=s; s->prior=p; p->next->prior=s; s->next=p->nextD. p->next=s; p->next->prior=s; s->prior=p; s->next=p->next题目8、单链表表示的整数数列如下图,值P->next->next->data为:A. 47B. 93C. 19D. 64题目9、在一个具有n个结点的有序单链表中插入一个新结点并仍然有序的时间复杂度是( )。
线性表答案
第二章线性表答案(总8页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--数据结构与算法上机作业第二章线性表一、选择题1、若长度为n的线性表采用顺序存储结构,在其第i个位置插入一个新的元素算法的时间复杂度为 C 。
A. O(log2n)B. O(1)C. O(n)D. O(n2)2、以下关于线性表的说法中,不正确的是 C 。
A. 线性表中的数据元素可以是数字、字符、结构等不同类型B. 线性表中包含的数据元素个数不是任意的C. 线性表中的每一个结点都有且只有一个直接前驱和直接后继D. 存在这样的线性表:表中各结点都没有直接前驱和直接后继3、在有n个结点的顺序表上做插入、删除结点运算的时间复杂度为 B 。
A. O(1)B. O(n)C. O(n2)D. O(log2n)4、等概率情况下,在有n个结点的顺序表上做插入结点操作,需平均移动的结点数目为C 。
提示:插入的位置有n+1个,移动总数为:1+2+3+……+nA. nB. (n-1)/2C. n/2D. (n+1)/25、在一个长度为n的顺序存储的线性表中查找值为x的元素时,平均查找长度(及x同元素的平均比较次数,假定查找每个元素的概率都相等)为 C 。
A. nB. n/2C. (n+1)/2D. (n-1)/26、在顺序表中,只要知道 D ,就可以求出任一结点的存储地址。
A. 基地址B. 结点大小C. 向量大小D. 基地址和结点大小7、将两个各有n个元素的有序表归并为一个有序表,其最少的比较次数是A 。
A. nB. 2n-1C. 2nD. n-18、线性表采用链表存储时其存储地址要求 D 。
A. 必须是连续的B. 部分地址必须是连续的C. 必须是不连续的D. 连续的和不连续的都可以9、下面关于线性表的描述中,错误的是 B 。
A. 线性表采用顺序存储,必须占用一片连续的存储单元B. 线性表采用顺序存储,便于进行插入和删除操作C. 线性表采用链式存储,不必占用一片连续的存储单元D. 线性表采用链式存储,便于插入和删除操作10、向具有n个结点的有序单链表中插入一个新结点并仍然有序的时间复杂度是 BA. O(1)B. O(n)C. O(n2)D. O(log2n)11、在一个带头结点的单链表HL中,若要向表头插入一个由指针p指向的结点,则执行的语句是 D 。
数据结构第二章线性表1答案
数据结构第二章线性表1答案第二部分线性表一、选择题1.关于顺序存储的叙述中,哪一条是不正确的( B )A.存储密度大B.逻辑上相邻的结点物理上不必邻接C.可以通过计算直接确定第i个结点的位置D.插入、删除操作不方便2.长度为n的单链表连接在长度为m的单链表后的算法的时间复杂度为( C )A O(n)B O(1)C O(m)D O(m+n)3.在n个结点的顺序表中,算法的时间复杂度是O(1)的操作是:( A )A 访问第i个结点(1<=i<=n)和求第i个结点的直接前趋(2<=i<=n)B 在第i个结点(1<=i<=n)后插入一个新结点C 删除第i个结点(1<=i<=n)D 将n个结点从小到大排序4.一个向量第一个元素的存储地址是100 ,每个元素的长度为2 ,则第5 个元素的地址是:( B )(A )110 ( B )108 (C )100 (D )1205.已知一个顺序存储的线性表,设每个结点需要占m个存储单元,若第一个结点的地址为da,则第i个结点的地址为:( A ) A)da+(i-1)*m B) da+i*m C) da-i*m D) da+(i+1)*m6.在具有n个结点的单链表中,实现(A )的操作,其算法的时间复杂度为O(n)。
A)遍历链表和求链表的第i个结点B)在地址为p的结点之后插入一个结点C)删除开始结点D)删除地址为p的结点的后继结点7.链表是一种采用(B )存储结构存储的线性表。
(A )顺序(B )链式( C )星式(D )网状8.线性表若采用链式存储结构时,要求内存中可用存储单元的地址:(D )(A )必须是连续的( B )部分地址必须是连续的(C )一定是不连续的( D )连续或不连续都可以9.线性表L在(B )情况下适用于使用链式结构实现。
(A)需经常修改L中的结点值(B)需不断对L进行删除插入(C)L中含有大量的结点(D)L中结点结构复杂10.在长度为n 的顺序表的第i (1≤i≤n+1) 个位置上插入一个元素,元素的移动次数为( A )A.n-i+1B.n-iC.iD.i-111.线性表是(A)。
数据结构 第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. 顺序存储方式的优点是存储密度大,且插入、删除运算效率高。
数据结构(线性表)习题与答案
1、线性表是具有n 个______ 的有限序列。
A.数据项B.字符C.数据元素D.表元素正确答案:C2、线性表是_______。
A.一个无限序列,可以为空B.一个有限序列不可以为空C.一个无限序列,不可以为空D.一个有限序列,可以为空正确答案:D3、关于线性表的正确说法是_______。
A.每一个元素都有一个前驱和一个后继元素B.除第一个元素和最后一个元素外,其余元素有且仅有一个前驱和一个后继元素C.表中元素的排序顺序必须是由小到大或者由大到小D.线性表中至少有一个元素正确答案:B4、线性表采用链表存储时,其存放各个元素的单元地址是_______。
A.连续与否均可以B.部份地址必须是连续的C.一定是不连续的D.必须是连续的5、链表不具备的特点是_______。
A.插入删除不需要挪移元素B.所需空间与其长度成正比C.不必事先估计存储空间D.可随机访问任一节点正确答案:D6、线性表的静态链表存储结构与顺序存储结构相比,优点是_______。
A.所有的操作算法实现简单B.便于利用零散的存储器空间C.便于随机存取D.便于插入和删除正确答案:D7、线性表的顺序存储结构和链式存储结构相比,优点是_______。
A.便于随机存取B.便于插入和删除C.所有的操作算法实现简单D.节省存储空间正确答案:A 8、设线性表有n 个元素,以下操作中,_______在顺序表上实现比在链表上实现效率高。
A.交换第1 个元素第2 个元素的值B.输出与给定值x 相等的元素在线性表中的符号C.输入第i ( 1<=i<=n )个元素值D.顺序输出这n 个元素的值正确答案:C9、对于一个线性表,既要求能够较快地进行插入和删除操作,又要求存储结构能够反映数据元素之间的逻辑关系,则应采用_______ 存储结构。
A.顺序B.链式C.散列D.索引正确答案:B10、设线性表中有n 个元素,以下操作,_______ 在单链表上实现要比在顺序表上实现效率高。
《数据结构》关于线性表的练习题(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.线性表是()。
简单,线性表的概念与性质,02702001 [单选题]A、一个有限序列,可以为空(正确答案)B、一个无限序列,不可以为空C、一个无限序列,可以为空D、一个无限序列,不可以为空2.在一个长度为n 的顺序表中删除第i 个元素(0<=i<=n)时,需向前挪移()个元素。
简单,线性表顺序存储实现,02702003 [单选题]A 、n-i(正确答案)B 、n-i+1C 、n-i-1D 、i3.线性表采用链式存储时,其地址()。
简单,线性表的链式存储原理,02702004 [单选题]A、必须是连续的B、一定是不连续的C、部份地址必须是连续的D、连续与否均可以(正确答案)4.从一个具有n 个结点的单链表中查找其值等于x 的结点时,在查找成功的情况下,需平均比较()个元素结点。
普通,链式存储的实现,02702005 [单选题]A 、n/2B 、nC 、(n+1)/2(正确答案)D 、(n-1)/25.在双向循环链表中p 所指的结点之后插入s 指针所指向的结点,其操作是()。
普通,循环链表实现,02702022 [单选题]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 之后的结点(若存在),则需修改指针的操作为()。
数据结构课后习题答案第二章 线性表
第二章线性表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插入到顺序表的适当位置上,以保持该表的有序性。
数据结构(线性表习题含答案)
数据结构第二章线性表习题含答案说明:顺序存储的线性表称为向量。
一,单项选择题一个向量第一个元素的地址是100,每个元素的长度为2,则第5个元素的地址是__①_B__。
A) 110 B) 108 C) 100 D) 120线性结构通常采用的两种存储结构是__①A___。
A) 顺序存储结构和链式存储结构B) 散列方式和索引方式C) 链表存储结构和数组D) 线性存储结构和非线性存储结构不带头结点的单链表head为空的判定条件是__①__A_.A) head==NULL B) head->next==NULLC) head->next==head D) head!=NULL带头结点的单链表head为空的判定条件是__①B___。
A) head==NULL B) head->next==NULLC) head->next==head D) head!=NULL非空的循环链表head的尾结点(由p所指向)满足__①_C__。
A) p->next==NULL B) p==NULLC) P->next==head D) p==head在循环双链表的p所指结点之后插入s所指结点的操作是___①_C_。
A) p->right=s; s->left=p; p->right->left=s; s->right=p->right;B) p->right=s; p->right->left=s; s->left=p; s->right=p->right;C) s->left=p; s->right=p->right; p->right=s; p->right->left=s;D) s->left=p; s->right=p->right; p->right->left=s; p->right=s;在一个单链表中,已知q所指结点是p所指结点的前驱结点,若在q和p之间插入s结点, 则执行__①c___。
数据结构(线性表)练习题与答案2
1、与单链表相比,双链表的优点之一是()。
A.插入、删除操作更简单B.可以进行随机访问C.可以省略表头指针或表尾指针D.访问前后相邻节点更方便正确答案:D解析:在双链表中可以访问任一节点的前后相邻节点,而单链表中只能访问任一节点的下一个节点。
2、带头节点的双链表L为空表时应满足()。
A.L==NULLB.L->prior==L->nextC.L->prior==NULLD.L->next==NULL正确答案:D3、在长度为n(n≥1)的双链表中插入一个节点(非尾节点)要修改()个指针域。
A.1B.2C.3D.4正确答案:D解析:需要修改插入节点的prior、next域,前驱节点的next域和后继节点的prior域。
4、对于长度为n(n≥1)的双链表L,在p所指节点之前插入一个新节点的算法的时间复杂度为()。
A. O(1)B. O(n)C. O(n2)D. O(nlog2n)正确答案:A解析:设新节点指针为q,操作是:p->prior->next=p; q->prior=p->prior; p->prior=q; q->next=p;5、在长度为n(n≥1)的双链表中删除一个节点(非尾节点)要修改()个指针域。
A.1B.2C.3D.4正确答案:B解析:需要修改前驱节点的next域和后继节点的prior域。
6、与非循环单链表相比,循环单链表的主要优点是()。
A.不再需要头指针B.已知某个节点的位置后,能够容易找到它的前驱节点C.在进行插入、删除操作时,能更好地保证链表不断开D.从表中任意节点出发都能扫描到整个链表正确答案:D解析:循环单链表中可以循环扫描,因此从表中任意节点出发都能扫描到整个链表。
7、设有带头节点的循环单链表L,当这种链表成为空链表时,有()。
A.表头节点指针域next为空B.L的值为NULLC.表头节点的指针域next与L的值相等D.表头节点的指针域next与L的地址相等正确答案:C解析:带头节点的循环单链表L成为空链表时满足L->next==L,即表头节点*L的指针域next与L的值相等,而不是表头节点*L的指针域next与L的地址相等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一章线性表描述以下三个概念的区别:头指针,头结点,首元结点(第一个元素结点)。
解:头指针是指向链表中第一个结点的指针。
首元结点是指链表中存储第一个数据元素的结点。
头结点是在首元结点之前附设的一个结点,该结点不存储数据元素,其指针域指向首元结点,其作用主要是为了方便对链表的操作。
它可以对空表、非空表以及首元结点的操作进行统一处理。
填空题。
解:(1) 在顺序表中插入或删除一个元素,需要平均移动表中一半元素,具体移动的元素个数与元素在表中的位置有关。
(2) 顺序表中逻辑上相邻的元素的物理位置必定紧邻。
单链表中逻辑上相邻的元素的物理位置不一定紧邻。
(3) 在单链表中,除了首元结点外,任一结点的存储位置由其前驱结点的链域的值指示。
(4) 在单链表中设置头结点的作用是插入和删除首元结点时不用进行特殊处理。
在什么情况下用顺序表比链表好解:当线性表的数据元素在物理位置上是连续存储的时候,用顺序表比用链表好,其特点是可以进行随机存取。
对以下单链表分别执行下列各程序段,并画出结果示意图。
解:画出执行下列各行语句后各指针及链表的示意图。
L=(LinkList)malloc(sizeof(LNode)); P=L;for(i=1;i<=4;i++){P->next=(LinkList)malloc(sizeof(LNode));P=P->next; P->data=i*2-1;}P->next=NULL;for(i=4;i>=1;i--) Ins_LinkList(L,i+1,i*2);for(i=1;i<=3;i++) Del_LinkList(L,i);解:已知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;解:a. (4) (1)b. (7) (11) (8) (4) (1)c. (5) (12)d. (9) (1) (6)已知L是带表头结点的非空单链表,且P结点既不是首元结点,也不是尾元结点,试从下列提供的答案中选择合适的语句序列。
a. 删除P结点的直接后继结点的语句序列是____________________。
b. 删除P结点的直接前驱结点的语句序列是____________________。
c. 删除P结点的语句序列是____________________。
d. 删除首元结点的语句序列是____________________。
e. 删除尾元结点的语句序列是____________________。
(1) P=P->next;(2) P->next=P;(3) P->next=P->next->next;(4) P=P->next->next;(5) while(P!=NULL) P=P->next;(6) while(Q->next!=NULL) { P=Q; Q=Q->next; }(7) while(P->next!=Q) P=P->next;(8) while(P->next->next!=Q) P=P->next;(9) while(P->next->next!=NULL) P=P->next;(10) Q=P;(11) Q=P->next;(12) P=L;(13) L=L->next;(14) free(Q);解:a. (11) (3) (14)b. (10) (12) (8) (3) (14)c. (10) (12) (7) (3) (14)d. (12) (11) (3) (14)e. (9) (11) (3) (14)已知P结点是某双向链表的中间结点,试从下列提供的答案中选择合适的语句序列。
a. 在P结点后插入S结点的语句序列是_______________________。
b. 在P结点前插入S结点的语句序列是_______________________。
c. 删除P结点的直接后继结点的语句序列是_______________________。
d. 删除P结点的直接前驱结点的语句序列是_______________________。
e. 删除P结点的语句序列是_______________________。
(1) P->next=P->next->next; (2) P->priou=P->priou->priou; (3) P->next=S; (4) P->priou=S; (5) S->next=P; (6) S->priou=P; (7) S->next=P->next; (8) S->priou=P->priou; (9) P->priou->next=P->next; (10) P->priou->next=P; (11) P->next->priou=P; (12) P->next->priou=S; (13) P->priou->next=S; (14) P->next->priou=P->priou; (15) Q=P->next; (16) Q=P->priou; (17) free(P); (18) free(Q); 解:a. (7) (3) (6) (12) b. (8) (4) (5) (13) c. (15) (1) (11) (18) d. (16) (2) (10) (18) e. (14) (9) (17) 简述以下算法的功能。
(1) StatusA(LinkedListL){()m a a A ,,1Λ=()n b b B ,,1Λ=A 'B 'A B ='='B A B A =A '≠'B A 'B 'BA <B A >A B()n a a ,,1Λ()1,,a a n Λ()m a a a A ,,,21Λ=()n b b b B ,,,21Λ=()n m m m b b b a b a C ,,,,,,,111ΛΛ+=n m ≤()m n n n a a b a b a C ,,,,,,,111ΛΛ+=n m >()n a a a L ,,,21Λ=()2431,,,,,,a a a a a L n ΛΛ=.,an)改造为(a1,a3,...,an,...,a2)Status ListChange_DuL(DuLinkList &L) { int i;DuLinkList p,q,r; p=L->next; r=L->pre; i=1; while(p!=r){ if(i%2==0){ q=p; p=p->next;// 删除结点q->pre->next=q->next;q->next->pre=q->pre;// 插入到头结点的左面q->pre=r->next->pre;r->next->pre=q;q->next=r->next;r->next=q;}else p=p->next;i++;}return OK;}设有一个双向循环链表,每个结点中除有pre,data和next三个域外,还增设了一个访问频度域freq。
在链表被起用之前,频度域freq的值均初始化为零,而每当对链表进行一次Locate(L,x)的操作后,被访问的结点(即元素值等于x的结点)中的频度域freq的值便增1,同时调整链表中结点之间的次序,使其按访问频度非递增的次序顺序排列,以便始终保持被频繁访问的结点总是靠近表头结点。
试编写符合上述要求的Locate操作的算法。
解:DuLinkList ListLocate_DuL(DuLinkList &L,ElemType e){DuLinkList p,q;p=L->next;while(p!=L && p->data!=e) p=p->next;if(p==L) return NULL;else{p->freq++;// 删除结点p->pre->next=p->next;p->next->pre=p->pre;// 插入到合适的位置q=L->next;while(q!=L && q->freq>p->freq) q=q->next;if(q==L){p->next=q->next;q->next=p;p->pre=q->pre;q->pre=p;}else{// 在q之前插入p->next=q->pre->next;q->pre->next=p;p->pre=q->pre; q->pre=p; } return p; } }在至题中,稀疏多项式采用的顺序存储结构SqPoly 定义为 typedef struct { int coef; int exp; } PolyTerm;typedef struct { //多项式的顺序存储结构 PolyTerm *data; int last; } SqPoly; 已知稀疏多项式()me m e e n x c x c x c x P +++=Λ2121,其中11≥>>>=-e e e n m m Λ,()m i c i ,,2,10Λ=≠,1≥m 。