第二章 顺序表、链表(答案)
数据结构课后习题及解析第二章
例如m的初值为20;n=7,7个人的密码依次是:3,1,7,2,4,8,4,出列的顺序为6,1,4,7,2,3,5。
第二章答案
约瑟夫环问题
约瑟夫问题的一种描述为:编号1,2,…,n的n个人按顺时针方向围坐一圈,每个人持有一个密码(正整数)。一开始任选一个报数上限值m,从第一个人开始顺时针自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有的人全部出列为止。试设计一个程序,求出出列顺序。利用单向循环链表作为存储结构模拟此过程,按照出列顺序打印出各人的编号。
9.假设有一个循环链表的长度大于1,且表中既无头结点也无头指针。已知s为指向链表某个结点的指针,试编写算法在链表中删除指针s所指结点的前趋结点。
10.已知有单链表表示的线性表中含有三类字符的数据元素(如字母字符、数字字符和其它字符),试编写算法来构造三个以循环链表表示的线性表,使每个表中只含同一类的字符,且利用原表中的结点空间作为这三个表的结点空间,头结点可另辟空间。
r=p;
}
}
r->next=L->next;
printf("请输入第一个报数上限值m(m>0):");
scanf("%d",&m);
printf("*****************************************\n");
printf("出列的顺序为:\n");
q=L;
p=L->next;
7.试分别以不同的存储结构实现线性表的就地逆置算法,即在原表的存储空间将线性表(a1, a2..., an)逆置为(an, an-1,..., a1)。
数据结构--第二章考试题库(含答案)
第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))和链接两种。
数据结构习题及答案与实验指导(线性表)2
第2章线性表线性表是一种最基本、最常用的数据结构,它有两种存储结构——顺序表和链表。
本章主要介绍线性表的定义、表示和基本运算的实现。
重点讨论了线性表的存储结构,以及在顺序、链式两种存储结构上基本运算的实现。
重点提示:●线性表的逻辑结构特征●线性表的顺序存储和链式存储两种存储结构的特点●在两种存储结构下基本操作的实现2-1 重点难点指导2-1-1 相关术语1.线性表线性表是具有相同数据类型的n(n≥0)个数据元素的有限序列,通常记为:(a1,a2,…,a n),其中n为表长,n=0时称为空表。
要点:一种逻辑结构,其数据元素属于相同数据类型,之间的关系是线性关系。
2.顺序表顺序存储的线性表。
要点:按线性表中的元素的逻辑顺序依次存放在地址连续的存储单元里,其存储特点:用物理上的相邻实现逻辑上的相邻。
3.链表用链表存储的线性表。
要点:链表是通过每个结点的链域将线性表的n个结点按其逻辑顺序链接在一起的,对每个结点的地址是否连续没有要求。
4.单链表每个结点除了数据域外还有一个指向其后继的指针域。
要点:通常将每个元素的值和其直接后继的地址作为一个结点,通过每个结点中指向后继结点的指针表示线性表的逻辑结构。
5.头指针要点:头指针是一个指针变量,里面存放的是链表中首结点的地址,并以此来标识一个链表。
如链表H,链表L等,表示链表中第一个结点的地址存放在指针变量H、L中。
通常用头指针来惟一标识一个链表。
6.头结点要点:附加在第一个元素结点之前的一个结点,头指针指向头结点。
当该链表表示一个非空的线性表时,头结点的指针域指向第一个元素结点;为空表时,该指针域为空。
7.头结点的作用要点:其作用有两个,一是使对空表和非空表的处理得到统一;二是在链表的第一个位置上的操作和在其他位置上的操作一致,无需特殊处理。
2-1-2 线性表的顺序存储1.顺序表顺序存储的线性表称为顺序表。
其特点是:用一组地址连续的存储单元来依次存放线性表的数据元素,因此数据元素的逻辑顺序和物理次序一致(这是顺序存储的核心所在)。
《数据结构》课后习题答案(第2版)
《数据结构》课后习题答案(第2版)数据结构课后习题答案(第2版)第一章:基本概念1. 什么是数据结构?数据结构是指数据元素之间的关系,以及相应的操作。
它研究如何组织、存储和管理数据,以及如何进行高效的数据操作。
2. 数据结构的分类有哪些?数据结构可以分为线性结构和非线性结构。
线性结构包括数组、链表、栈和队列;非线性结构包括树和图。
3. 什么是算法?算法是解决特定问题的一系列有序步骤。
它描述了如何输入数据、处理数据,并产生期望的输出结果。
4. 算法的特性有哪些?算法具有确定性、有限性、输入、输出和可行性这五个特性。
5. 数据结构和算法之间的关系是什么?数据结构是算法的基础,算法操作的对象是数据结构。
第二章:线性表1. 顺序表的两种实现方式是什么?顺序表可以通过静态分配或动态分配的方式实现。
静态分配使用数组,动态分配使用指针和动态内存分配。
2. 单链表的特点是什么?单链表由节点组成,每个节点包含数据和一个指向下一个节点的指针。
它的插入和删除操作效率高,但是查找效率较低。
3. 循环链表和双向链表分别是什么?循环链表是一种特殊的单链表,在尾节点的指针指向头节点。
双向链表每个节点都有一个指向前一个节点和后一个节点的指针。
4. 链表和顺序表的区别是什么?链表的插入和删除操作效率更高,但是查找操作效率较低;顺序表的插入和删除操作效率较低,但是查找操作效率较高。
第三章:栈和队列1. 栈是什么?栈是一种特殊的线性表,只能在表的一端进行插入和删除操作。
后进先出(LIFO)是栈的特点。
2. 队列是什么?队列是一种特殊的线性表,只能在表的一端进行插入操作,在另一端进行删除操作。
先进先出(FIFO)是队列的特点。
3. 栈和队列的应用有哪些?栈和队列在计算机科学中有广泛的应用,例如浏览器的前进后退功能使用了栈,操作系统的进程调度使用了队列。
4. 栈和队列有哪些实现方式?栈和队列可以使用数组或链表来实现,还有更为复杂的如双端队列和优先队列。
(完整word版)数据结构单元2练习参考答案
单元练习2一.判断题(下列各题,正确的请在前面的括号内打√;错误的打╳)(×)(1)线性表的链式存储结构优于顺序存储。
(×)(2)链表的每个结点都恰好包含一个指针域。
(√)(3)在线性表的链式存储结构中,逻辑上相邻的两个元素在物理位置上并不一定紧邻。
(×)(4)顺序存储方式的优点是存储密度大,插入、删除效率高。
(×)(5)线性链表的删除算法简单,因为当删除链中某个结点后,计算机会自动地将后续的各个单元向前移动。
(×)(6)顺序表的每个结点只能是一个简单类型,而链表的每个结点可以是一个复杂类型。
(√)(7)线性表链式存储的特点是可以用一组任意的存储单元存储表中的数据元素。
(√)(8)线性表采用顺序存储,必须占用一片连续的存储单元。
(×)(9)顺序表结构适宜于进行顺序存取,而链表适宜于进行随机存取。
(ㄨ)(10)插入和删除操作是数据结构中最基本的两种操作,所以这两种操作在数组中也经常使用。
二.填空题(1)顺序表中逻辑上相邻的元素在物理位置上必须相连。
(2)线性表中结点的集合是有限的,结点间的关系是一对一关系。
(3)顺序表相对于链表的优点是:节省存储和随机存取。
(4)链表相对于顺序表的优点是:插入、删除方便。
(5)采用顺序存储结构的线性表叫顺序表。
(6)顺序表中访问任意一个结点的时间复杂度均为O(1)。
(7)链表相对于顺序表的优点是插入、删除方便;缺点是存储密度小。
(8)在双链表中要删除已知结点*P,其时间复杂度为O(1)。
(9)在单链表中要在已知结点*P之前插入一个新结点,需找到*P的直接前趋结点的地址,其查找的时间复杂度为 O(n) 。
(10)单链表中需知道头指针才能遍历整个链表。
(11)线性表中第一个结点没有直接前趋,称为开始结点。
(12)在一个长度为n的顺序表中删除第i个元素,要移动n-i 个元素。
(13)在一个长度为n的顺序表中,如果要在第i个元素前插入一个元素,要后移n- i +1 个元素。
第2章习题(带答案)
第2章习题(带答案)1.链表不具有的特点是A.可随机访问任一个元素B.插入删除不需要移动元素C.不必事先估计存储空间D.所需空间与线性表长度成正比2.在一个具有n个结点的单链表中查找值为某的某结点,若查找成功,则平均比较个结点。
A.nB.n/2C.(n-1)/2D.(n+1)/23.在单链表中P所指结点之后插入一个元素某的主要操作语句序列是=(node某)malloc(izeof(node));、->data=某;、->ne某t=p->ne某t、p->ne某t=。
4.在单链表中查找第i个元素所花的时间与i成正比。
(√)5.在带头结点的双循环链表中,任一结点的前驱指针均不为空。
(√)6.用链表表示线性表的优点是()。
A.便于随机存取C.便于插入与删除B.花费的存储空间比顺序表少D.数据元素的物理顺序与逻辑顺序相同7.在双向链表中删除P所指结点的主要操作语句序列是p->prior->ne某t=p->ne某t;、p->ne某t->prior=p->prior;、free(p);8.下述哪一条是顺序存储结构的优点?()A.存储密度大B.插入运算方便C.删除运算方便D.可方便地用于各种逻辑结构的存储表示9.若某表最常用的操作是在最后一个结点之后插入一个结点或删除最后一个结点。
则采用()存储方式最节省运算时间。
A.单链表B.双链表C.单循环链表D.带头结点的双循环链表10.对任何数据结构链式存储结构一定优于顺序存储结构。
(某)11.对于双向链表,在两个结点之间插入一个新结点需修改的指针共4个,单链表为____2___个。
12.以下数据结构中,()是非线性数据结构A.树B.字符串C.队列D.栈13.若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用()存储方式最节省时间。
A.顺序表B.双链表C.带头结点的双循环链表D.单循环链表14.“线性表的逻辑顺序和物理顺序总是一致的。
数据结构(c语言版)课后习题答案完整版
数据结构(c语言版)课后习题答案完整版数据结构(C语言版)课后习题答案完整版一、数据结构概述数据结构是计算机科学中一个重要的概念,用来组织和存储数据,使之可以高效地访问和操作。
在C语言中,我们可以使用不同的数据结构来解决各种问题。
本文将提供完整版本的C语言数据结构的课后习题答案。
二、顺序表1. 顺序表的定义和基本操作顺序表是一种线性表,其中的元素在物理内存中连续地存储。
在C 语言中,我们可以通过定义结构体和使用指针来实现顺序表。
以下是顺序表的一些基本操作的答案:(1)初始化顺序表```ctypedef struct{int data[MAX_SIZE];int length;} SeqList;void InitList(SeqList *L){L->length = 0;}```(2)插入元素到顺序表中```cbool Insert(SeqList *L, int pos, int elem){if(L->length == MAX_SIZE){return false; // 顺序表已满}if(pos < 1 || pos > L->length + 1){return false; // 位置不合法}for(int i = L->length; i >= pos; i--){L->data[i] = L->data[i-1]; // 向后移动元素 }L->data[pos-1] = elem;L->length++;return true;}```(3)删除顺序表中的元素```cbool Delete(SeqList *L, int pos){if(pos < 1 || pos > L->length){return false; // 位置不合法}for(int i = pos; i < L->length; i++){L->data[i-1] = L->data[i]; // 向前移动元素 }L->length--;return true;}```(4)查找顺序表中的元素```cint Search(SeqList L, int elem){for(int i = 0; i < L.length; i++){if(L.data[i] == elem){return i + 1; // 找到元素,返回位置 }}return -1; // 未找到元素}```2. 顺序表习题解答(1)逆置顺序表```cvoid Reverse(SeqList *L){for(int i = 0; i < L->length / 2; i++){int temp = L->data[i];L->data[i] = L->data[L->length - 1 - i]; L->data[L->length - 1 - i] = temp;}}```(2)顺序表元素去重```cvoid RemoveDuplicates(SeqList *L){for(int i = 0; i < L->length; i++){for(int j = i + 1; j < L->length; j++){if(L->data[i] == L->data[j]){Delete(L, j + 1);j--;}}}}```三、链表1. 单链表单链表是一种常见的链式存储结构,每个节点包含数据和指向下一个节点的指针。
《数据结构》习题及答案:第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所指结点,则执行()。
数据结构(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. 描述以下三个概念的区别:头指针,头结点,首元素结点。
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是给定的两个参变量,它们的值为任意的整数)。
数据结构部分习题
数据结构部分习题一、问答题1、简述下列术语:线性表,顺序表,链表。
2、何时选用顺序表,何时选用链表作为线性表的存储结构合适?各自的主要优缺点是什么?3、在顺序表中插入和删除一个结点平均需要移动多少个结点?具体的移动次数取决于哪两个因素?4、链表所表示的元素是否有序?如有序,则有序性体现于何处?链表所表示的元素是否一定要在物理上是相邻的?二、单选题1、在表长为n的单链表中,算法时间复杂度为O(n)的操作是( )。
A. 查找单链表中第i个结点B. 在p结点之后插入一个结点C. 删除表中第一个结点D. 删除p结点的直接后继结点2、在下列链表中不能从当前结点出发访问到其余各结点的是( )。
A. 单链表B. 单循环链表C. 双向链表D. 双向循环链表3、线性表采用顺序存储时,其地址( )A.必须是连续的B.部分地址必须是连续的C.一定是不连续的D.连续与否均可以4、线性表采用链式存储结构时,其地址( )A.必须是连续的B.部分地址必须是连续的C.一定是不连续的D.连续与否均可以5、在长度为n的顺序表的第i个数据元素(1≤i≤n)之前插入一个数据元素,元素的移动次数为( )。
A. n-i+1B. n-iC. iD. i-16、对于只在表的首、尾两端进行插入操作的线性表,宜采用的存储结构为( )。
A. 顺序表B. 用头指针表示的单循环链表C. 用尾指针表示的单循环链表D. 单链表7、在需要经常查找结点的前驱与后继的场合中,使用( )比较合适。
A.单链表B.双向链表C.单循环链表D.循环链表8、在一个单链表h中,若要删除由指针q所指向结点的直接后继结点,则执行()。
A.p = q->next ; p->next = q->next;B.p = q->next ; q->next = p;C.p = q->next ; q->next = p->next;D.q->next = q->next->next; q->next = q;9、9、链表不具有的特点是()。
《数据结构及其应用》笔记含答案 第二章_线性表
第2章线性表一、填空题1、线性结构反映结点间的逻辑关系是一对一的。
2、线性结构的特点:1)只有一个首结点和尾结点2)除首尾结点外,其他结点只有一个直接前驱和一个直接后继3、线性表的顺序表示又称为顺序存储结构。
4、结点只有一个指针域的链表,称为单链表。
5、首尾相接的链表称为循环链表。
6、线性表的链式表示又称为非顺序映像。
7、指向链表中第一个结点的指针称为头指针。
8、链表中存储第一个数据元素的结点称为首元结点。
二、判断题1、线性表的逻辑顺序与存储顺序总是一致的。
(╳)2、顺序存储的线性表可以按序号随机存取。
(√)3、顺序表的插入和删除操作不需要付出很大的时间代价,因为每次操作平均只有近一半的元素需要移动。
(╳)4、线性表中的元素可以是各种各样的,但同一线性表中的数据元素具有相同的特性,因此属于同一数据对象。
(√)5、在线性表的顺序存储结构中,逻辑上相邻的两个元素在物理位置上并不一定相邻。
(╳)6、在线性表的链式存储结构中,逻辑上相邻的元素在物理位置上不一定相邻。
(√)7、线性表的链式存储结构优于顺序存储结构。
(╳)8、在线性表的顺序存储结构中,插入和删除时移动元素的个数与该元素的位置有关。
(√)9、线性表的链式存储结构是用一组任意的存储单元来存储线性表中数据元素的。
(√)10、在单链表中,要取得某个元素,只要知道该元素的指针即可,因此,单链表是随机存取的存储结构。
(╳)11、线性表的特点是每个元素都有一个前驱和一个后继。
(╳)三、单项选择题1、顺序表中第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是(B)。
A.110 B.108 C.100 D.120解释:顺序表中的数据连续存储,所以第5个元素的地址为:100+2*4=108。
2、在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个结点从小到大排序解释:在顺序表中插入一个结点的时间复杂度都是O(n2),排序的时间复杂度为O(n2)或O(nlog2n)。
数据结构(C语言版)(第2版)课后习题答案
数据结构(C语言版)(第2版)课后习题答案数据结构(C语言版)(第2版)课后习题答案1. 简介数据结构是计算机科学领域中非常重要的一门学科,它研究的是数据的组织、存储和管理方式。
本文将针对《数据结构(C语言版)(第2版)》的课后习题提供答案,帮助读者更好地理解和应用数据结构。
2. 第一章: 绪论在第一章中,主要介绍了数据结构的基本概念、分类和基本操作。
以下是部分习题的答案:2.1 习题1习题描述:什么是数据结构?答案:数据结构是指数据对象中元素之间的关系,以及对这些关系进行操作的方法和技术的集合。
2.2 习题2习题描述:数据结构的分类有哪些?答案:数据结构可以分为线性结构和非线性结构。
线性结构包括线性表、栈、队列等;非线性结构包括树、图等。
3. 第二章: 线性表第二章介绍了线性表的定义、分类和实现。
以下是部分习题的答案:3.1 习题1习题描述:什么是线性表?答案:线性表是由n个数据元素a1, a2, ..., an组成的有限序列,其中元素之间存在着一一对应的关系。
3.2 习题2习题描述:线性表的分类有哪些?答案:线性表可以分为顺序表和链表。
顺序表是用一段地址连续的存储单元一次存储线性表的所有元素,而链表是采用链式存储结构,通过每个元素存储其后继元素的地址来实现元素之间的逻辑关系。
4. 第三章: 栈与队列第三章讲解了栈和队列的定义、特性和实现。
以下是部分习题的答案:4.1 习题1习题描述:栈和队列有什么区别?答案:栈是一种后进先出的线性表,只能在表尾进行插入和删除操作;队列是一种先进先出的线性表,只能在表的一端进行插入和删除操作。
4.2 习题2习题描述:栈的应用有哪些?答案:栈在计算机科学中有广泛的应用,如函数的调用和返回、括号匹配、表达式求值等。
5. 第四章: 串第四章讲解了串的定义、模式匹配和实现。
以下是部分习题的答案:5.1 习题1习题描述:什么是串?答案:串是由零个或多个字符组成的有限序列,串中的字符个数称为串的长度。
数据结构(第二版)课后习题答案
数据结构(第二版)课后习题答案第一章:数据结构概述数据结构是计算机科学中非常重要的一个概念,它用于组织和管理计算机内部存储的数据。
数据结构的设计直接影响到程序的运行效率和对真实世界问题的建模能力。
第二版的《数据结构》教材旨在帮助读者更好地理解和应用数据结构。
为了提高学习效果,每章节后都附有一系列习题。
本文将为第二版《数据结构》教材中的部分习题提供详细的答案和解析。
第二章:线性表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章习题答案一、填空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. 顺序存储方式的优点是存储密度大,且插入、删除运算效率高。
数据结构第二章参考答案
数据结构第二章参考答案习题21. 填空题(1)在一个单链表中,已知每个结点包含data和next两个域,q所指结点是p所指结点的直接前驱,若在q和p之间插入s所指结点,则执行(___________)和(___________)操作。
答案:q->next = s; s->next = p; 或 s->next=q->next; q->next = s; (2)表长为n的顺序表,当在任何位置上插入或删除一个元素的概率相等时,插入一个元素所需移动元素的平均个数为(___________),删除一个元素需要移动元素的平均个数为(___________)。
答案:n/2 (n-1)/2(3)表长为0的线性表称为(___________)。
答案:空表(4)动态内存管理是操作系统的基本功能之一,其作用是响应用户程序对内存的(___________)和(___________)请求。
答案:申请释放(5)顺序表多采用(___________)实现的,是一种随机存取结构,对表中任意结点存取操作的时间复杂度为(___________)。
而查找链表中的结节,需要从头指针起顺着链扫描才能得到,平均时间复杂度为(___________)。
因此,若线性表的操作主要是进行查找,很少进行插入或删除操作时,采用(___________)表比较合适。
答案:数组 O(1) O(n) 顺序(6)在链表某个位置上进行插入和删除操作,只需要修改(___________)即可,而无须移动大量元素,操作的时间复杂度为(___________)。
而在顺序表中进行插入和删除操作,往往要移动大量元素,平均移动元素的数目为(___________),平均时间复杂度为(___________)。
因此,若对线性表进行频繁的插入和删除操作时,采用(___________)表相对合适。
若插入和删除主要发生在表头和表尾,则采用(___________)表更为合适。
数据结构练习题 第二章 线性表 习题及答案
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、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
A. 单链表
B. 静态链表
C.单循环链表 D. 顺序表
8. 在一个长度为 n(n>1)的单元链表上,设有头和尾两个指针,执行( B )操作与链表的长度有关.
A. 删除单链表中的第一个元素
B. 删除单链表中的最后一个元素
C. 在单链表第一个元素前插入一个新元素 D. 在单链表最后一个元素后插入一个新元素
6、向一个长度为 n 的向量的第 i 个元素(1≤i≤n+1)之前插入一个元素时,需向后移动 n-i+指向双向循环链表中的结点 X,则删除结点 X 需要执行的语句序列为
_______p->llink->rlink=p->rlink
________p->rlink->llink=p->llink______________________________________________________
11. 在 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 个结点从小到大排序
12. 向一个有 127 个元素的顺序表中插入一个新元素并保持原来顺序不变,平均要移动(
D.p->next->prior=p.
1、算法是指令的有限序列,其中每一条指令表示一个或多个操作,此外,一个算法还具有五个重要
特性,它们分别是 ___有穷性____ 、__确定性____ 、__可行性______ 、有零或多个输入和有一 或多个输出。
2、算法优劣的五个标准是正确性、可使用性、__可读性____、_健壮性_____、_高效性____。
3
( A )存储方式最节省时间。
A.顺序表 B.双链表 C.带头结点的双循环链表 D.单循环链表
4.某链表中最常用的操作是在最后一个元素之后插入一个元素和删除最后一个元素,则采用( D )
存储方式最节省运算时间。
A.单链表 B.双链表 C.单循环链表 D.带头结点的双循环链表
5. 链表不具备的特点是( A )
D.p-next=p
18.在非空循环双向链表中,在 q 所指的接点前插入一个由 p 所指结点的过程依次为:
p->next=q;p->prior=q->prior;_____________;q->prior->next=p.
A.q->next=p B.q->prior->next=p
二、填空
C.p->prior->next=p
个元素
B)
A. 8
B. 63.5
C. 63
D. 7
13. 线性表L在
情况下适用于使用链式结构实现。( B )
A. 需经常修改L中的结点值
B. 需不断对L进行删除插入
C. L中含有大量的结点
D. L中结点结构复杂
14. 非空的循环单链表 head 中,尾结点(由 p 所指向)满足(C ).
A. pnext==NULL
s->next=__p->next________;
p->next=s;
t=p->data;
p->data=__s->data___________________;
s->data=_____t___________________; 三、程序题
1、在单链表(表头指针为 head)的元素中找出最后一个值为 e 的元素,返回其指针;如果找不
一、选择
1.线形表若采用链式存储结构时,要求内存中可用存储单元的地址( D )
A.必须是连续的
B.部分地址必须是连续的
C.一定是不连续的
D.连续或不连续都可以
2.线性表是具有 n 个( C )的有限序列(n>0)。
A.表元素 B.字符 C.数据元素 D.数据项 E.信息项
3.若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用
B. p==NULL
C. pnext==head
D. p==head
15. 设指针 P 指向双链表的某一结点,则双链表结构的对称性可用( A )式来刻画。
A.p->prior->next==p->next-> prior;B.p->prior->prior==p->next-> prior;
C.p->next->next==p->prior->prior; D. p->prior->next==p->next->next;
3、数据结构被形式地定义为(D, R),其中 D 是 数据元素
的有限集合,R 是 D 上的 关系 有
限集合。
4、一个算法的效率可分为 时间 效率和 空间 效率。
5、 非 空 单 循 环 链 表 head 中 *p 是 尾 结 点 的 条 件 是 ( 指 针 head 指 向 头 结 点 )
____p->next==head_____________.
_______________(设结点中的两个指针域分别为 llink 和 rlink)。
8.设顺序线性表中有 n 个数据元素,则第 i 个位置上插入一个数据元素需要移动表中__n-i+1_____
个数据元素;删除第 i 个位置上的数据元素需要移动表中____n-i___个元素; 删除一个元素,需要
A. 可随机访问任一结点
B. 插入删除不需要移动元素
C. 不必事先估计存储空间
D. 所需空间与其长度成正比
6. 带头结点的单链表 head 为空的判定条件是( C ).
A. head==NULL
B. Head-next==NULL
C. head-next==head
D.head!=NULL
7. 如果最常用的操作是取第 i 个结点及其前驱,则采用( D )存储方式最节省时间.
16.用链表表示线性表的优点是 ( C )。
1
A.便于随机存取
B.花费的存储空间比顺序表少
C.便于插入与删除
D.数据元素的物理顺序与逻辑顺序相同
17.设单链表中指针 p 指向接点 A,接点 A 存在后继结点,若要删除结点 A 的后继结点,则需要修改
指针的操作为____A____
A.p->next=p->next->next B.p=p->next C.p=p->next->next
试比较顺序存储结构和链式存储结构的优缺点。在什么情况下用顺序表比链表好? 顺序存储结构:优点:逻辑上相邻的元素,物理上也相邻
可以实现随机访问 缺点:插入、删除元素时需要移动大量的元素 链式存储结构:优点:插入、删除元素时不需要移动元素,只需要改变一下指针域就可以了 缺点:不能够实现随机访问 顺序表适合于长度变化不大、易于事先确定其大小的线性表,当线性表的操作主要是查找时, 用顺序表比链表好
到,返回 NULL。完成以下程序。
typedef struct LinkNode
{
int data;
struct LinkNode *next;
}NODE;
NODE *search_link(Node *head,int e)
{
NODE *p,*q;
2
q=___null__________; for(p=head;______p_______;p=p->next)
if(p->data==e) __q=p___________; return q; }
2、以下函数 first_insert() 的功能在已知链表的首结点之前插入一个指定值的节点;函数 reverse_copy()的功能是按已知链表复制出一个新链表,但新链表的结点链接顺序与已知链表的结点 链接顺序相反;函数 print_link()用来输出链表中各结点的值;函数 free_link()用来释放链表全部结点 空间。 typedef struct node{ int val; struct node *next; }Node; void first_insert(Node *p,int v) { Node *q=(Node *)malloc(sizeof(Node)); q->val=v;______q->next=p__________;____________p=q__________; } Node *reverse_copy(Node *p) { Node *u; for(u=NULL;p;p=p->next) first_insert(______u, p->val__________________) return u; } void print_link(Node *p) { for(;______p__________;_____p=p->next______) printf("% d\t",p->val); printf("\n"); } void free_link(Node *p) { Node *u; while(p!=NULL) {u=p->next;free(p);____p=u___________;} } 四、简答
9. 与单链表相比,双链表的优点之一是( D ).
A. 插入、删除操作更简单
B. 可以进行随机访问
C. 可以省略表头指针或表尾指针 D. 顺序访问相邻结点更灵活
10.一个向量第一个元素的存储地址是 100,每个元素的长度为 2,则第 5 个元素的地址是( B )
A.110 B.108