数据结构习题-第2章
数据结构课后习题及解析第二章

例如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))和链接两种。
数据结构第二章习题(1)

B. 单链表
C. 双链表
D. 单循环链表
3.具有线性结构的数据结构是( )。
A. 图
B. 树
C. 广义表
D. 栈
4.在一个长度为 n 的顺序表中,在第 i 个元素之前插入一个新元素时,需向后移动( )
个元素。
A. n-i
B. n-i+1
C. n-i-1
5.非空的循环单链表 head 的尾结点 p 满足( )。
A. n-i
B. n-i+1
C. n-i-1
D. i+1
10.线性表是n个( )的有限序列。
A. 表元素
B. 字符 C. 数据元素 D. 数据项
11.从表中任一结点出发,都能扫描整个表的是( )。
A. 单链表
B. 顺序表
C. 循环链表
D. 静态链表
12.在具有n个结点的单链表上查找值为x的元素时,其时间复杂度为( )。
A. q->next=s->next;s->next=p; B. s->next=p;q->next=s->next;
C. p->next=s->next;s->next=q; D. s->next=q;p->next=s->next; 24.在以下的叙述中,正确的是( )。
A. 线性表的顺序存储结构优于链表存储结构 B. 线性表的顺序存储结构适用于频繁插入/删除数据元素的情况
A. p->next=p->next->next;
B. p=p->next;p->next=p->next->next;
C. p =p->next;
数据结构习题

A.找不到
B.查找时间复杂度为O(1)
C.查找时间复杂度为O(n)
D.查找结点的次数约
为n
(14)等概率情况下,在有n个结点的顺序表上做插入结点运算,需平均移动结点的数目
为( )。
A.n
B.(n-1)/2
C. n/2
D.(n+1)
/2
(15)在下列链表中不能从当前结点出发访问到其余各结点的是(
(11)L是线性表,已知LengthList(L)的值是5,经DelList(L,2)运算后,
LengthList(L)的值是( )。
A.2
B.3
C.4
D.5
(12)单链表的示意图如下:
L
ABCDΛ
指向链表Q结点的前趋的指针是(
)。
A.L
B.P
C.Q
D.R
(13)设p为指向单循环链表上某结点的指针,则*p的直接前驱( )。
结点。
(12) 在一个长度为n的顺序表中删除第i个元素,要移动
个元
素。
(13) 在一个长度为n的顺序表中,如果要在第i个元素前插入一个元素,要后移 个
元素。
(14) 在无头结点的单链表中,第一个结点的地址存放在头指针中,而其它结点的存储
地址存放在
结点的指针域中。
(15) 当线性表的元素总数基本稳定,且很少进行插入和删除操作,但要求以最快速度
)。
A.双向链表
B.单循环链表 C.单链表
D.双向循
环链表
(16)在顺序表中,只要知道(
),就可以求出任一结点的存储地址。
A.基地址
B.结点大小
C. 向量大小
D.基地址和结点大小
(17)在双链表中做插入运算的时间复杂度为( )。
数据结构课后习题第2章

2. 指针 P 指向不带头结点的线性链表 L 的首元素的条件是( )。
A.P= =L
C.P-﹥next==L
B.L-﹥Next==P
D.P-﹥next==NULL
3. 指针 p 指向带头结点的单循环链表 L 的首元素的条件是( )。
A.P= =L
C.P-﹥next==L
B.L-﹥Next==P
D.P-﹥next==NULL
网络工程 2011 级 1 班、计算机科学与技术 2011 级 2 班《算法与数据结构》课后习题(第 2 章)
2011 级 计科 (网工)
题号
得分
一
【课后习题】第 2 章 线性表
班 学号:
一、判断题(如果正确,在题号前打“”,否则打“”。每题 2 分,共 10 分)
二
( ) 1. 线性表若采用顺序存储表示时所有结点之间的存储单元地址必须连续。 ( ) 2. 顺序表结构适宜于进行顺序存取,而链表适宜于进行随机存取。 ( ) 3. 如果某个数据结构的每一个元素都是最多只有一个直接前驱,则必为线性结构。 ( ) 4. 线性表的逻辑顺序与物理顺序总是一致的。 ( ) 5. 线性表的长度是指它所占存储空间的大小。
二、填空题(每空 1.5 分,共 21 分)
1. 从逻辑结构看,线性表是典型的
2. 在一个长度为 n 的向量中在第 i(1≤i≤n+1)个元素之前插入一个元素时,需向后移动
个元素,算法的时间复杂度为
3. 在一个长度为 n 的向量中删除第 i(1≤i≤n)个元素时,需向前移动
算法的时间复杂度为
。
。
4. 若长度为 n 的线性表采用链式存储结构,在其第 i 个结点前插入一个新的元素的算法的
数据结构习题及答案 (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.线性结构的特点是只有一个结点没有前驱,只有一个结点没有后继,其余的结点只有一个前驱和后继。
数据结构第二章作业及答案

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.循环链表
数据结构课后习题与解析第二章

第二章习题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、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第2章线性结构
一、选择题
1. 顺序存储结构的优点是()
A.存储密度大 B.插入运算方便
C.删除运算方便 D.可用于各种逻辑结构的存储表示
2. 下面关于线性表的叙述中,错误的是()
A.线性表采用顺序存储,必须占用一片连续的存储单元。
B.线性表采用顺序存储,便于进行插入和删除操作。
C.线性表采用链接存储,不必占用一片连续的存储单元。
D.线性表采用链接存储,便于插入和删除操作。
3.线性表是具有n个()的有限序列(n>0)。
A.表元素 B.字符 C.数据元素 D.数据项
4.若某线性表最常用的操作是存取任一指定序号的元素和在线性表的最后进行插入和删除元素,则利用()存储方式最节省时间。
A.顺序表 B.双链表 C.带头结点的双循环链表 D.单循环链表5. 某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则
采用()存储方式最节省运算时间。
A.单链表B.仅有头指针的单循环链表
C.双向链表D.仅有尾指针的单循环链表
6. 对于一个头指针为head的带头结点的单链表,判定该链表为空表的条件是()。
A.head==NULL B.head→next==NULL
C.head→next==head D.head!=NULL
7. 链表不具有的特点是()
A.插入、删除不需要移动元素 B.可随机访问任一元素
C.不必事先估计存储空间 D.所需空间与链表长度成正比
8. 下面的叙述正确的是()
A.线性表在链式存储时,查找第i个元素的时间同i的值成正比
B. 线性表在链式存储时,查找第i个元素的时间同i的值无关
C. 线性表在顺序存储时,查找第i个元素的时间同i 的值成正比
D. 线性表在顺序存储时,查找第i个元素的时间同该元素的大小有关
9. 对于顺序存储的线性表,访问结点和增加、删除结点的时间复杂度分别为()。
A.O(n),O(n) B. O(n),O(1) C. O(1),O(n) D. O(1),O(1)
10.非空的循环单链表head的指向尾结点的指针变量p满足()。
A.p->link=head B.p->link=NULL C.p=NULL D.p=head
11. 若长度为n的线性表采用顺序存储结构,在第i个位置插入一个元素的算法的时间复杂度为()(1<=i<=n+1)。
A. O(0)
B. O(1)
C. O(n)
D. O(n2)
12.在单链表指针为p的结点之后插入指针为s的结点,正确的操作是()。
A.p->next=s; s->next=p->next; B. s->next=p->next; p->next=s; C.p->next=s; p->next=s->next; D. p->next=s->next; p->next=s;
13. 利用双向链表作线性表的存储结构的优点是()。
A. 便于插入和删除操作
B. 提高按关系查找数据元素的速度
C. 节省存储空间
D. 便于销毁结构,释放存储空间
14. 若长度为n的非空顺序表,在表的第i个位置插入一个新元素,i的合法值是()。
A. 1≤i≤n
B.1≤i≤n+1
C. 0≤i≤n-1
D. 0≤i≤n
15.已知L是带头结点的单链表,则删除首元结点的语句是()。
A. L=L->next;
B. L->next=L;
C. L=L->next->next;
D. L->next=L->next->next;
16. 已知单链表A的长度为m,单链表B的长度为n,若将B链接在A的末尾,在没有尾指针的情况下,算法的时间复杂度为()。
A. O(1)
B. O(n)
C. O(m)
D. O(m+n)
* 17.设一个链表最常用的操作是在末尾插入结点和删除尾结点,则选用( )最节省时间。
A. 单链表
B.单循环链表
C. 带尾指针的单循环链表
D.带头结点的双循环链表
二、填空题
1. 在一个长度为n的顺序表中第i个元素(1≤i≤n)之前插入一个元素时,需向后移动_ ___个元素。
2. 当线性表的元素总数基本稳定,且很少进行插入和删除操作,但要求以最快的速度存取线性表中的元素时,应采用____ _存储结构。
3. 对于一个有n个结点的单链表,在给定值为x的结点后插入一个新结点的时间复杂度为__ ____。
4.根据链式存储结构中每一个结点包含的指针个数,可以将线性链表分成_ __和多重链表。
5.链接存储的特点是利用__ _来表示数据元素之间的逻辑关系。
6. 顺序存储结构是通过_ __表示元素之间的关系的;链式存储结构是通过_______表示元素之间的关系的。
7. 循环单链表的最大优点是:__ ___。
8. 带头结点的单循环链表L,L为空表的条件是:__ ___。
三、判断题
1. 对任何数据结构链式存储结构一定优于顺序存储结构。
( )
2. 线性表采用链表存储时,结点和结点内部的存储空间可以是不连续的。
( )
3. 顺序存储方式插入和删除时效率太低,因此它不如链式存储方式好。
( )
4. 所谓静态链表就是一直不发生变化的链表。
( )
5. 线性表的特点是每个元素都有一个前驱和一个后继。
( )
6. 取线性表的第i个元素的时间同i的大小有关。
( )
7. 线性表只能用顺序存储结构实现。
( )
8. 顺序存储结构的主要缺点是不利于插入或删除操作。
( )
四、简答题
1. 对于线性表中的插入操作,分别写出在顺序存储结构下和链式存储结构下的时间复杂度。
2. 线性结构的特点是什么?
3.说明在线性表的链式存储结构中,头指针与头结点之间的根本区别;头结点与首元结点的关系。
4. 在单链表和双向链表中,能否从当前结点出发访问到任何一个结点?
*5. 顺序表在插入或删除元素时一般需要移动元素,如果想不移动多个元素就实现插入和删除,应该如何处理?
五、算法题
1、利用线性表的基本操作(见教材P19),实现在线性表A中删除在线性表B中出现的元素。
2、编写算法,将一个有n个非零元素的线性表A拆分成两个线性表,其中大于零的元素存放线性表B中,小于零的元素存放在线性表C中。
3、分别基于线性表的顺序存储结构和链式存储结构(带头结点),实现以下操作:
(1) 从线性表中删除具有给定值x的所有元素。
(2) 从线性表中删除其值在有给定值s与t之间的所有元素,其中要求s<=t ,若s或t 不合理,或线性表为空,则显示出错信息并退出程序。
(3) 假设线性表的元素按递增顺序排列,删除表中所有大于s且小于t的所有元素(若存在这样的元素),其中要求s<=t ,若s或t不合理,或线性表为空,则显示出错信息并退出程序。
(4) 假设线性表的元素按递增顺序排列,删除表中所有值重复的元素,即使表中无重复元素,例如:A={ 1, 3, 5, 5, 8, 9, 9, 12},删除后A={ 1, 3, 5, 8, 9, 12}
*4、设有一个不带头结点的单链表,编写递归算法实现以下操作:
(1) 求链表中的结点个数
(2) 求链表中的最大整数(设链表结点的数据域中存放的是整型数据)。