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

合集下载

数据结构习题及答案与实验指导(线性表)2

数据结构习题及答案与实验指导(线性表)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.顺序表顺序存储的线性表称为顺序表。

其特点是:用一组地址连续的存储单元来依次存放线性表的数据元素,因此数据元素的逻辑顺序和物理次序一致(这是顺序存储的核心所在)。

(完整word版)数据结构单元2练习参考答案

(完整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 个元素。

《数据结构》第二版严蔚敏课后习题作业参考答案(1-7章)

《数据结构》第二版严蔚敏课后习题作业参考答案(1-7章)

《数据结构》第二版严蔚敏课后习题作业参考答案(1-7章)【第一章绪论】1. 数据结构是计算机科学中的重要基础知识,它研究的是如何组织和存储数据,以及如何通过高效的算法进行数据的操作和处理。

本章主要介绍了数据结构的基本概念和发展历程。

【第二章线性表】1. 线性表是由一组数据元素组成的数据结构,它的特点是元素之间存在着一对一的线性关系。

本章主要介绍了线性表的顺序存储结构和链式存储结构,以及它们的操作和应用。

【第三章栈与队列】1. 栈是一种特殊的线性表,它的特点是只能在表的一端进行插入和删除操作。

本章主要介绍了栈的顺序存储结构和链式存储结构,以及栈的应用场景。

2. 队列也是一种特殊的线性表,它的特点是只能在表的一端进行插入操作,而在另一端进行删除操作。

本章主要介绍了队列的顺序存储结构和链式存储结构,以及队列的应用场景。

【第四章串】1. 串是由零个或多个字符组成的有限序列,它是一种线性表的特例。

本章主要介绍了串的存储结构和基本操作,以及串的模式匹配算法。

【第五章数组与广义表】1. 数组是一种线性表的顺序存储结构,它的特点是所有元素都具有相同数据类型。

本章主要介绍了一维数组和多维数组的存储结构和基本操作,以及广义表的概念和表示方法。

【第六章树与二叉树】1. 树是一种非线性的数据结构,它的特点是一个节点可以有多个子节点。

本章主要介绍了树的基本概念和属性,以及树的存储结构和遍历算法。

2. 二叉树是一种特殊的树,它的每个节点最多只有两个子节点。

本章主要介绍了二叉树的存储结构和遍历算法,以及一些特殊的二叉树。

【第七章图】1. 图是一种非线性的数据结构,它由顶点集合和边集合组成。

本章主要介绍了图的基本概念和属性,以及图的存储结构和遍历算法。

【总结】1. 数据结构是计算机科学中非常重要的一门基础课程,它关注的是如何高效地组织和存储数据,以及如何通过算法进行数据的操作和处理。

本文对《数据结构》第二版严蔚敏的课后习题作业提供了参考答案,涵盖了第1-7章的内容。

数据结构考研复习题--第二章--线性表(带答案)

数据结构考研复习题--第二章--线性表(带答案)

第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))和链接两种。

数据结构第二章作业及答案

数据结构第二章作业及答案

8
解答(续):
(2) 插入操作基本步骤: 1) 若i不合法或表L已满,算法结束并返回 ERROR;否则转2) 2) 将第i个元素及之后的所有元素均后移一个位置 3) 将新元素写入空出的位置; 4) 表长+1
9
解答(续):
插入操作算法(算法2.4 ):
Status ListInsert_Sq(SqList &L, int i , ElemType e) { //在顺序线性表L中第i个位置之前插入新的元素e, // i的合法值为1≤i≤ListLength_Sq(L)+1 if (i<1||i>L.length+1)return ERROR; //i值不合法 if (L.length>=L.listsize) { //当前存储空间已满,重新分配空间 newbase=(ElemType*)realloc(L. elem, (L.listsize+LISTINCREMENT)*sizeof (ElemType)); if (!newbase)exit(OVERFLOW); //存储分配失败 L. elem=newbase; //新基址 L.listsize+=LISTINCREMENT; //增加存储容量 } q=&(L.elem[i-1]); //q为插入位置 for (p=&(L. elem[L.length-1]); p>=q ; --p) *(p+1) = *p; //插入位置及之后的元素右移 *q=e; //插入e ++L.length; //表长增1 return OK; }//ListInsert_Sq
15
4.若某线性表最常用的操作是存取任一指定序号的元素和在最 后进行插入和删除运算,则利用( )存储方式最节省时间。 A.顺序表 B.双向链表 C.带头结点的双向循环链表 1 D.循环链表

第2章线性表练习题答案

第2章线性表练习题答案

第2章线性表练习题答案一、填空1. 向一个长度为n的向量的第i个元素(1≤i≤n+1)之前插入一个元素时,需向后移动n-i+1 个元素。

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

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

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

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

二、判断正误(×)1. 链表的每个结点中都恰好包含一个指针。

答:错误。

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

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

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

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

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

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

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

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

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

错,正好说反了。

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

错,前一半正确,但后一半说法错误,那是链式存储的优点。

顺序存储方式插入、删除运算效率较低,在表长为n的顺序表中,插入和删除一个数据元素,平均需移动表长一半个数的数据元素。

(×)7. 线性表在物理存储空间中也一定是连续的。

错,线性表有两种存储方式,顺序存储和链式存储。

数据结构单元2 同步训练及答案

单元2 同步训练及参考答案同步训练一、单项选择题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.一个顺序表第一个元素的存储地址是100,每个元素的存储长度为4,则第5个元素的地址是()。

A.110 B.116 C.100 D.120 7.一个长度为n的顺序表中,在第i(1≤i≤n+1)个元素的位置上插入一个新元素时,需要向后移动个元素。

A.n-i B.n-i+1 C.n-i-1 D.i8.一个长度为n的顺序表中,删除第i(1≤i≤n)个元素时,需要向前移动()个元素。

A.n-i B.n-i+1 C.n-i-1 D.i9.在一个长度为n的顺序表中插入一个结点需平均移动()个结点。

A.(n+1)/2 B.n/2 C.(n-1)/2 D.n10.在一个长度为n的顺序表中删除一个结点需平均移动()个结点。

A.(n+1)/2 B.n/2 C.(n-1)/2 D.n11.在()情况下应当选择顺序表作为数据的存储结构。

A.对线性表的主要操作为插入操作B.对线性表的主要操作为插入操作和删除操作C.线性表的表长变化较大D.对线性表的主要操作为存取线性表的元素12.下列算法实现在顺序表L的第i(1≤i≤L->length+1)个结点的位置上插入值为t的元素,其中ListSize为顺序表L的容量,表中第1个结点的数据存放在数组元素L->data[0]中。

数据结构练习题(含答案)


B. head->next= =NULL
C. head->next= =head
D. head!=NULL
9. 非空的循环单链表head的尾结点(由p所指向)满足____。
A. p->next= =NULL
B. p= =NULL
C. p->next= =hቤተ መጻሕፍቲ ባይዱad
D. p= =head
10. 在双向循环链表的p所指结点之后插入s所指结点的操作是
C. s->next=p->next; p=s;
C. p->next=s; s-
>next=p;
13.
在一个单链表中,若删除p所指结点的后续结点,则执行
____。
A. p->next= p->next->next; B. p= p->next; p->next=
p->next->next;
C. p->next= p->next;
>right->left=s;
D. s->left=p; s->right=p->right; p->right->left=s;
p->right=s;
11. 在一个单链表中,已知q所指结点是p所指结点的前驱结点,若
在q和p之间插入s结点,则执行____。
A. s->next=p->next; p->next=s; B. p->next=s->next;
且只有
个前驱结点;最后一个结点
后续结点,其余每个结
点有且只有
个后续结点。
3. 在树形结构中,树根结点没有

《数据结构及其应用》笔记含答案 第二章_线性表

第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)。

数据结构习题(1-7)答案

第一章绪论一. 选择题1.BD 2.CA 3.B 4.C 5.A 6.D 7.A 8.A 9.A 10.C 二. 解答题第二章线性表一. 选择题1.A 2.B 3.A 4.D 5.A 6.C 7.A 8.B 9.A二.填空题1..物理位置相邻指针2..直接前驱直接后继3.顺序链式三. 算法设计题1.①int count(Linklist h,int x){int num=0;Linknode *p;p=h->next;while(p&&p->data<=x)//p指针向后移动,直至p指向第一个值大于x的结点p=p->next;while(p)if(p->next&&p->data==p->next->data)//若p没有指向链表中同一数值的最后一个结点,则向后移动p=p->next;else//若p指向数值相同的结点中的最后一个,则num加1,p指针后移,继续执行while循环{num++;p=p->next;}return num;}②void delevenl(Linklist &h,int x){Linknode *p,*r;p=h->next;r=h;while(p&&p->data<x){if(p->data%2==0){r->next=p->next;free(p);p=r->next;}else{r=p;p=p->next;}}}2.void converse(Linklist &h){Linknode *p,*q;p=h->next;h->next=NULL;while(p){q=p->next;p->next=h->next;h->next=p;p=q;}}3.void decompose(Linklist La,Linklist &Lb,Linklist &Lc) {Linknode *p;Lc=(Linknode *)malloc(sizeof(Linknode));Lc->next=NULL;p=La->next;Lb=La;Lb->next=NULL;while(p){La=p->next;if(p->data>0){p->next=Lc->next;Lc->next=p;}else{p->next=Lb->next;Lb->next=p;}p=La;}}4.int subset(LinkList la, LinkList lb){ LinkNode * pa,*pb;pa=la->next;while(pa){ pb=lb->next;while(pb&&(pb->data!=pa->data)) pb=pb->next;if(!pb) return 0;pa=pa->next;}return 1;}算法时间复杂度O(A.Length*B.Length)5.void priorset(DuLinkList &la){ p=la;q=la->next;while(q!=la){q->prior=p; p=q;q=q->next;} q->prior=p;}第三章栈和队列一. 选择题1.C C 2.C 3.B 4.D 5.C 6.A 7.C 8.D二. 解答题1栈底栈底2//双向栈类型定义#define STACK_SIZE 100;Typedef struct {SElemType * base_one, * base_two;//栈底指针SElemType * top_one, * top_two;//栈顶指针int stacksize;} SqStack;Status InitStack ( SqStack &S) {//初始化双向栈S.base_one=S.top_one=( SElemType *)malloc(STACK_SIZE * sizeof(SElemType));//第一个栈底和栈顶指向数组起点S.base_two=S.top_two=S.base_one +STACK_SIZE-1;// 第二个栈底和栈顶指向数组终点S.stacksize= STACK_SIZE ;return OK;}//InitStackStatus Push ( SqStack &S, int i, SElemType e){//入栈操作,i=0时将e存入前栈,i=1时将e存入后栈if( S.top_two < S.top_one) return OVERFLOW;//栈满,不考虑追加空间if( i = = 0 )*S.top_one++ = e;else*S.top_two-- = e;return OK;}//PushSElemType Pop ( SqStack &S, int i){//出栈操作,i=0出前栈,i=1出后栈if( i==0 ) {if ( S.top_one==S.base_one) return ERROR;S.top_one--; e=*S.top_one;}else {if ( S.top_two==S.base_two) return ERROR;S.top_two++; e=*S.top_two;}return e;}//Pop2.#define M 3struct Stack{Qelemtype data[M];int top;};struct Queue{Stack s1;Stack s2;};void InitQueue(Queue &Q)//初始化队列{Q.s1.top=0;Q.s2.top=0;}int IsEmpty(Queue &Q)//判断队列是否为空{if(Q.s1.top==0&&Q.s2.top==0)return 1;if(Q.s2.top==0&&Q.s1.top!=0){while(Q.s1.top!=0)Q.s2.data[Q.s2.top++]=Q.s1.data[--Q.s1.top];}return 0;}int IsFull(Queue &Q){if(Q.s1.top==M&&Q.s2.top!=0)return 1;if(Q.s1.top==M&&Q.s2.top==0){while(Q.s1.top!=0)Q.s2.data[Q.s2.top++]=Q.s1.data[--Q.s1.top];return 0;}if(Q.s1.top!=M)return 0;}void InQueue(Queue &Q,Qelemtype e) {if(IsFull(Q)){cout<<"OVERFLOW"<<endl;return;}Q.s1.data[Q.s1.top++]=e;}void DeQueue(Queue &Q,Qelemtype &e) {if(IsEmpty(Q)){cout<<"UNDERFLOW"<<endl;return;}e=Q.s2.data[--Q.s2.top];}3.(1)不能(2)可以原因略4.struct QueueNode{Qelemtype data;QueueNode *next;};struct LinkQueue{QueueNode *rear;};void InitQueue(LinkQueue &Q) //置空队{Q.rear=new QueueNode;Q.rear->next=Q.rear;}int EmptyQueue(LinkQueue Q) //判队空{return Q.rear==Q.rear->next;}void EnQueue(LinkQueue &Q, Qelemtype e)//元素入队{QueueNode *p;//新建一个结点,并置其值为ep=new QueueNode;p->data=e;//将结点插入队列末尾p->next=Q.rear->next;Q.rear->next=p;//修改队尾指针Q.rear=p;}void DeQueue(LinkQueue &Q,Qelemtype &e) //元素出队{QueueNode *p;if (EmptyQueue(Q)) //若队中无元素,则无法执行出队操作{cout<<"error"<<endl;return;}p=Q.rear->next->next; //让p指向队头元素e=p->data;if(p==Q.rear)//如队中只有一个元素,则要rear指向头结点,头结点的next指针指向自身{Q.rear=Q.rear->next;Q.rear->next=Q.rear;}else //若队中不只一个元素,则删除p所指向的结点。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{ 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.顺序表是线性表的 ( )
①链式存储结构 ②顺序存储结构 ③ 索引存储结构 ④ 散列存储结构
5.对于顺序表,以下说法错误的是 ( )
①顺序表是用一维数组实现的线性表,数组的下标可以看成是元素的绝对地址
②顺序表的所有存储结点按相应数据元素间的逻辑关系决定的次序依次排列
Void insert_sqlist(sqlistL,datatypex,inti)
/*将X插入到顺序表L的第i-1个位置*/
{if( st == maxsize) error(“表满”);
if((i<1)||(i>st+1))error(“非法位置”);
for(j=st;j>=i;j--)______;
GET(L,i)可通过输出________实现。
17.线性表的常见链式存储结构有________、________和________。
18.单链表表示法的基本思想是用________表示结点间的逻辑关系。
19.所有结点通过指针的链接而组织成________。
20.为了便于实现各种运算,通常在单链表的第一个结点之前增设一个类型相同的结点,称为________,其它结点称为________。
38.通常将链串中每个存储结点所存储的字符个数称为______。当结点大小大于1时,链串的最后一个结点的各个数据域不一定总能全被字符占满,此时,应在这些未用的数据域里补上______。
三、单向选择题
1.对于线性表基本运算,以下结果是正确的是 ( )
①初始化INITIATE(L),引用型运算,其作用是建立一个空表L=Ф
③顺序表的特点是:逻辑结构中相邻的结点在存储结构中仍相邻
④顺序表的特点是:逻辑上相邻的元素,存储在物理位置也相邻的单元中
6.对顺序表上的插入、删除算法的时间复杂性分析来说,通常以( )为标准操作
①条件判断 ②结点移动
③算术表达式 ④赋值语句
7.对于顺序表的优缺点,以下说法错误的是 ( )
①无需为表示结点间的逻辑关系而增加额外的存储空间
第二章 线性表
一.名词解释
1.线性结构 2.数据结构的顺序实现 3.顺序表 4.链表5.数据结构的链接实现
6.建表7.字符串8.串9.顺序串 10.链串
二、填空题
1.为了便于讨论,有时将含n(n>=0)个结点的线性结构表示成(a1,a2,……an),其中每个ai代表一个______。a1称为______结点,an称为______结点,i称为ai在线性表中的________或______。对任意一对相邻结点ai、ai┼1(1<=i<n),ai称为ai┼1的直接______ai┼1称为ai的直接______。
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.以下为顺序表的删除运算,分析算法,请在________处填上正确的语句。
33.在单链表中若在每个结点中增加一个指针域,所含指针指向前驱结点,这样构成的链表中有两个方向不同的链,称为______。
34.C语言规定,字符串常量按______处理,它的值在程序的执行过程中是不能改变的。而串变量与其他变量不一样,不能由______语句对其赋值。
35.含零个字符的串称为______串,用______表示。其他串称为______串。任何串中所含______的个数称为该串的长度。
p->next=q;
________________;
scanf(“%f”,&x);
}
________________;
return(head);
}
此算法的量级为________________。
31.除单链表之外,线性表的链式存储结构还有_________和_________等。
32.循环链表与单链表的区别仅仅在于其尾结点的链域值不是_________,而是一个指向_________的指针。
21.在单链表中,表结点中的第一个和最后一个分别称为________和________。头结点的数据域可以不存储________,也可以存放一个________或________。
22.单链表INITIATE(L)的功能是建立一个空表。空表由一个________和一个________组成。
23.INITIATE()的功能是建立一个空表。请在________处填上正确的语句。
8.顺序表的特点是______。
9.顺序表的类型定义可经编译转换为机器级。假定每个datatype类型的变量占用k(k>=1)个内存单元,其中,b是顺序表的第一个存储结点的第一个单元的内存地址,那么,第i个结点ai的存储地址为______。
10.以下为顺序表的插入运算,分析算法,请在______处填上正确的语句。
}
28.以下为单链表的插入运算,分析算法,请在____处填上正确的语句。
voidinsert_lklist(lklist head,datatype x,int i)
/*在表head的第i个位置上插入一个以x为值的新结点*/
{ p=find_lklist(head,i-1);
if(p==NULL)error(“不存在第i个位置”);
⑤插入INSERT(L,X,i),加工型运算。其作用是在线性表L的第i+1个位置上增加一个以X为值的新结点
⑥删除DELETE(L,i), 引用型运算.其作用是撤销线性表L的第i个结点Ai
2.线性结构中的一个结点代表一个 ( )
① 数据元素 ② 数据项 ③ 数据 ④ 数据结构
3.顺序表的一个存储结点仅仅存储线性表的一个 ( )
30.以下为单链表的建表算法,分析算法,请在____处填上正确的语句。
lklist create_lklist2() /*直接实现的建表算法。*/
{ head=malloc(size);
p=head;
scanf(“%f”,&x);
while(x!=’$’)
{ q=malloc(size);
q->data=x;
/*求表head中第一个值等于x的结点的序号。不存在这种结点时结果为0*/
{p=head;j=0;
while(________________________________){p=p->next;j++;}
if (p->data==x) return(j);
else return(0);
}
27.以下为单链表的删除运算,分析算法,请在____处填上正确的语句。
{ ininiate_lklist(head);
i=1;
scanf(“%f”,&x);
while(x!=’$’)
{________________;
________________;
scanf(“%f”,&x);
}
return性约等于____________,其量级为____________。
{________;
j=0;
while(p->next!=NULL)
{________________;
j++;
}
return(j);/*回传表长*/
}
25.以下为单链表按序号查找的运算,分析算法,请在____处填上正确的语句。
pointer find_lklist(lklist head,int i)
相关文档
最新文档