第二章线性表习题解答

合集下载

数据结构习题及答案 (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.1 试描述头指‎针、头结点、开始结点的‎区别、并说明头指‎针和头结点‎的作用。

答:始结点是指‎链表中的第‎一个结点,也就是没有‎直接前趋的‎那个结点。

链表的头指‎针是一指向‎链表开始结‎点的指针(没有头结点‎时),单链表由头‎指针唯一确‎定,因此单链表‎可以用头指‎针的名字来‎命名。

头结点是我‎们人为地在‎链表的开始‎结点之前附‎加的一个结‎点。

有了头结点‎之后,头指针指向‎头结点,不论链表否‎为空,头指针总是‎非空。

而且头指针‎的设置使得‎对链表的第‎一个位置上‎的操作与在‎表其他位置‎上的操作一‎致(都是在某一‎结点之后)。

2.2 何时选用顺‎序表、何时选用链‎表作为线性‎表的存储结‎构为宜?答:在实际应用‎中,应根据具体‎问题的要求‎和性质来选‎择顺序表或‎链表作为线‎性表的存储‎结构,通常有以下‎几方面的考‎虑:1.基于空间的‎考虑。

当要求存储‎的线性表长‎度变化不大‎,易于事先确‎定其大小时‎,为了节约存‎储空间,宜采用顺序‎表;反之,当线性表长‎度变化大,难以估计其‎存储规模时‎,采用动态链‎表作为存储‎结构为好。

2.基于时间的‎考虑。

若线性表的‎操作主要是‎进行查找,很少做插入‎和删除操作‎时,采用顺序表‎做存储结构‎为宜;反之,若需要对线‎性表进行频‎繁地插入或‎删除等的操‎作时,宜采用链表‎做存储结构‎。

并且,若链表的插‎入和删除主‎要发生在表‎的首尾两端‎,则采用尾指‎针表示的单‎循环链表为‎宜。

2.3 在顺序表中‎插入和删除‎一个结点需‎平均移动多‎少个结点?具体的移动‎次数取决于‎哪两个因素‎?答:在等概率情‎况下,顺序表中插‎入一个结点‎需平均移动‎n/2个结点。

删除一个结‎点需平均移‎动(n-1)/2个结点。

具体的移动‎次数取决于‎顺序表的长‎度n以及需‎插入或删除‎的位置i。

i 越接近n‎则所需移动‎的结点数越‎少。

2.4 为什么在单‎循环链表中‎设置尾指针‎比设置头指‎针更好?答:尾指针是指‎向终端结点‎的指针,用它来表示‎单循环链表‎可以使得查‎找链表的开‎始结点和终‎端结点都很‎方便,设一带头结‎点的单循环‎链表,其尾指针为‎rear,则开始结点‎和终端结点‎的位置分别‎是rear‎->next->next 和rear, 查找时间都‎是O(1)。

第2章线性表习题解析(答)

第2章线性表习题解析(答)

第二章线性表练习题一、选择题1.线性表是具有n个的有限序列。

A、表元素B、字符C、数据元素D、数据项E、信息项2.线性表的静态链表存储结构与顺序存储结构相比优点是。

A、所有的操作算法实现简单B、便于随机存储C、便于插入和删除D、便于利用零散的存储器空间3.若长度为n的线性表采用顺序存储结构,在其第i个位置插入一个新元素算法的时间复杂度为。

A、O(log2n)B、O(1)C、O(n)D、O(n2)4.(1)静态链表既有顺序存储的特点,又有动态链表的优点。

所以,它存取表中第i个元素的时间与i无关;(2)静态链表中能容纳元素个数的最大数在定义时就确定了,以后不能增加;(3)静态链表与动态链表在元素的插入、删除上类似,不需做元素的移动。

以上错误的是。

A、(1)、(2)B、(1)C、(1)、(2)、(3)D、(2)6.在双向链表存储结构中,删除p所指的结点时须修改指针。

A、p->next->prior=p->prior; p->prior->next=p->next;B、p->next=p->next->next;p->next->prior=p;C、p->prior->next=p;p->prior=p->prior->prior;D、p->prior=p->next->next;p->next=p->prior->prior;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.将两个各有n个元素的有序表归并成一个有序表,其最少的比较次数是。

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

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

一、选择题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结点时,在查找成功的情况下,需平均比较()个结点。

第2章 线性表习题参考答案

第2章 线性表习题参考答案

习题二参考答案一、选择题1.链式存储结构的最大优点是( D )。

A.便于随机存取B.存储密度高C.无需预分配空间D.便于进行插入和删除操作2.假设在顺序表{a0,a1,……,a n-1}中,每一个数据元素所占的存储单元的数目为4,且第0个数据元素的存储地址为100,则第7个数据元素的存储地址是( D )。

A.106B. 107C.124D.1283.在线性表中若经常要存取第i个数据元素及其前趋,则宜采用( A )存储方式。

A.顺序表B. 带头结点的单链表C.不带头结点的单链表D. 循环单链表4.在链表中若经常要删除表中最后一个结点或在最后一个结点之后插入一个新结点,则宜采用( C )存储方式。

A.顺序表B. 用头指针标识的循环单链表C. 用尾指针标识的循环单链表D. 双向链表5.在一个单链表中的p和q两个结点之间插入一个新结点,假设新结点为S,则修改链的java语句序列是( D )。

A.s.setNext(p); q.setNext(s);B. p.setNext(s.getNext()); s.setNext(p);C. q.setNext(s.getNext()); s.setNext(p);D. p.setNext(s); s.setNext(q);6.在一个含有n个结点的有序单链表中插入一个新结点,使单链表仍然保持有序的算法的时间复杂度是( C )。

A.O(1)B. O(log2n)C. O(n)D. O(n2)7.要将一个顺序表{a0,a1,……,a n-1}中第i个数据元素a i(0≤i≤n-1)删除,需要移动( B )个数据元素。

A.iB. n-i-1C. n-iD. n-i+18.在带头结点的双向循环链表中的p结点之后插入一个新结点s,其修改链的java语句序列是( D )。

A.p.setNext(s); s.setPrior(p); p.getNext().setPrior(s);s.setNext(p.getPrior());B.p.setNext(s); p.getNext().setPrior(s); s.setPrior(p);s.setNext(p.getNext());C.s.setPrior(p); s.setNext(p.getNext()); p.setNext(s);p.getNext().setPrior(s);D.s.setNext(p.getNext()); s.setPrior(p); p.getNext().setPrior(s);p.setNext(s);9.顺序表的存储密度是( B ),而单链表的存储密度是( A )。

第2章线性表习题参考答案

第2章线性表习题参考答案
一、选择题
1.D
2.B
3.B
4.B
5.B
6.B
7.D
8.B
9.C
10.B
11.C
12.C
13.B
14.D
15.A
16.B
17.B
18.C
19.A
20.C
21.D
22.A
23.A
24.A
二、填空题
1.首元素其直接前驱结点的链域的值
2.HL→next =NULL;HL=HL→next
3.有限、一对一
4.O(1)随机存取
若用头指针来表示该链表,则查找终端结点的时间为O(n)。
五、编程题
1.解答:由于在单链表中只给出一个头指针,所以只能用遍历的方法来数单链表中的结点个数了。算法如下:
int ListLength ( LinkList L )
{
int len=0 ;
ListNode *p;
p=L; //设该表有头结点
while ( p->next )
int i;
for (i=0;i<=L->length/2;i++)//L->length/2为整除运算
{temp = L->data[i]; //交换数据
L -> data[ i ] = L -> data[ L -> length-1-i];
L -> data[ L -> length - 1 - i ] = temp;
p=p->next;
}
return min;
}
3.int searchmax(linklist l)
{int max;

数据结构习题及答案 (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所指结点,则执行()。

第2章 线性表习题及参考答案

第2章 线性表习题及参考答案

第二章线性表习题一判断题1.线性表的逻辑顺序与存储顺序总是一致的。

2.顺序存储的线性表可以按序号随机存取。

3.顺序表的插入和删除操作不需要付出很大的时间代价,因为每次操作平均只有近一半的元素需要移动。

4.线性表中的元素可以是各种各样的,但同一线性表中的数据元素具有相同的特性,因此是属于同一数据对象。

5.在线性表的顺序存储结构中,逻辑上相邻的两个元素在物理位置上并不一定紧邻。

6.在线性表的链式存储结构中,逻辑上相邻的元素在物理位置上不一定相邻。

7.线性表的链式存储结构优于顺序存储结构。

8.在线性表的顺序存储结构中,插入和删除时,移动元素的个数与该元素的位置有关。

9.线性表的链式存储结构是用一组任意的存储单元来存储线性表中数据元素的。

10.在单链表中,要取得某个元素,只要知道该元素的指针即可,因此,单链表是随机存取的存储结构。

二单选题 (请从下列A,B,C,D选项中选择一项)1.线性表是( ) 。

(A) 一个有限序列,可以为空;(B) 一个有限序列,不能为空;(C) 一个无限序列,可以为空;(D) 一个无序序列,不能为空。

2.对顺序存储的线性表,设其长度为n,在任何位置上插入或删除操作都是等概率的。

插入一个元素时平均要移动表中的()个元素。

(A) n/2 (B) n+1/2 (C) n -1/2 (D) n3.线性表采用链式存储时,其地址( ) 。

(A) 必须是连续的;(B) 部分地址必须是连续的;(C) 一定是不连续的;(D) 连续与否均可以。

4.用链表表示线性表的优点是()。

(A)便于随机存取 (B)花费的存储空间较顺序存储少(C)便于插入和删除 (D)数据元素的物理顺序与逻辑顺序相同5.某链表中最常用的操作是在最后一个元素之后插入一个元素和删除最后一个元素,则采用( )存储方式最节省运算时间。

(A)单链表 (B)双链表 (C)单循环链表 (D)带头结点的双循环链表6.循环链表的主要优点是( )。

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

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

数据结构--线性表习题及答案第⼆章线性表⼀、选择题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章线性表⼀选择题1.下述哪⼀条是顺序存储结构的优点?( A )A.存储密度⼤ B.插⼊运算⽅便 C.删除运算⽅便 D.可⽅便地⽤于各种逻辑结构的存储表⽰2.下⾯关于线性表的叙述中,错误的是哪⼀个?( B )A.线性表采⽤顺序存储,必须占⽤⼀⽚连续的存储单元。

B.线性表采⽤顺序存储,便于进⾏插⼊和删除操作。

C.线性表采⽤链接存储,不必占⽤⼀⽚连续的存储单元。

D.线性表采⽤链接存储,便于插⼊和删除操作。

3.线性表是具有n个( C )的有限序列(n>0)。

A.表元素 B.字符 C.数据元素 D.数据项 E.信息项4.若某线性表最常⽤的操作是存取任⼀指定序号的元素和在最后进⾏插⼊和删除运算,则利⽤( A )存储⽅式最节省时间。

A.顺序表 B.双链表 C.带头结点的双循环链表 D.单循环链表5.某线性表中最常⽤的操作是在最后⼀个元素之后插⼊⼀个元素和删除第⼀个元素,则采⽤( D )存储⽅式最节省运算时间。

A.单链表 B.仅有头指针的单循环链表 C.双链表D.仅有尾指针的单循环链表6.设⼀个链表最常⽤的操作是在末尾插⼊结点和删除尾结点,则选⽤( D )最节省时间。

A. 单链表B.单循环链表C. 带尾指针的单循环链表D.带头结点的双循环链表7.若某表最常⽤的操作是在最后⼀个结点之后插⼊⼀个结点或删除最后⼀个结点。

则采⽤( D )存储⽅式最节省运算时间。

A.单链表 B.双链表 C.单循环链表 D.带头结点的双循环链表8. 静态链表中指针表⽰的是( BC ).A.内存地址 B.数组下标 C.下⼀元素地址D.左、右孩⼦地址9. 链表不具有的特点是( C )A.插⼊、删除不需要移动元素 B.可随机访问任⼀元素C.不必事先估计存储空间 D.所需空间与线性长度成正⽐10. 下⾯的叙述不正确的是( BC )A.线性表在链式存储时,查找第i个元素的时间同i的值成正⽐表4s→供选择的答案:A.连续B.单向链接C.双向链接D.不连接E.循环链接F.树状G.⽹状H.随机I.顺序J.顺序循环12.(1) 静态链表既有顺序存储的优点,⼜有动态链表的优点。

线性表答案

线性表答案

第二章线性表答案(总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答案

(A )需经常修改L 中的结点值 (E )需不断对L 进行删除插入第二部分线性表、选择题1 •关于顺序存储的叙述中,哪一条是不正确的 (B )A. 存储密度大B. 逻辑上相邻的结点物理上不必邻接C. 可以通过计算直接确定第i 个结点的位置D. 插入、删除操作不方便2.长度为n 的单链表连接在长度为 m 的单链表后的算法的时间复杂度为(C )A 0( n )B 0(1)C 0(m )D 0(m+n )3 .在n 个结点的顺序表中,算法的时间复杂度是0(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 )7 .链表是一种采用( B )存储结构存储的线性表。

(A )顺序 (B )链式 (C )星式 (D )网状8 .线性表若采用链式存储结构时,要求内存中可用存储单兀的地址:(D )(A )必须是连续的 (B )部分地址必须是连续的 (C )一定是不连续的(D )连续或不连续都可以9 .线性表L 在_ ( B )情况下适用于使用链式结构实现。

A ) da+(i-1)*mB ) da+i*m6.在具有n 个结点的单链表中,实现(A )遍历链表和求链表的第i 个结点C )删除开始结点 C ) da-i*mD ) da+(i+1)*mA )的操作,其算法的时间复杂度为 0(n )。

B )在地址为p 的结点之后插入一个结点D ) 删除地址为p 的结点的后继结点10.在长度为n 的顺序表的第i(1 < i < n+1)个位置上插入一个兀素,兀素的移动次数为( A )A.n-i+1B.n-iC.iD.i-1.线性表是( A )。

数据结构 第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. 顺序存储方式的优点是存储密度大,且插入、删除运算效率高。

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

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

第2章线性表一、单项选择题1.B2.A3.C4.C5.C6.B7.B8..A9.D10. B11. B12.B13.C二、判断题(在各题后填写“√”或“×”)1. 链表中的头结点仅起到标识的作用。

(× )2.线性表采用链表存储时,结点和结点内部的存储空间可以是不连续的。

( √ ) 3.顺序存储方式插入和删除时效率太低,因此它不如链式存储方式好。

( × )4. 对任何数据结构链式存储结构一定优于顺序存储结构。

(× )5. 所谓静态链表就是一直不发生变化的链表。

( × )6. 线性表的特点是每个元素都有一个前驱和一个后继。

( × )7. 循环链表不是线性表. ( × )8. 线性表只能用顺序存储结构实现。

( × )9. 线性表就是顺序存储的表。

( × )10. 链表是采用链式存储结构的线性表,进行插入、删除操作时,在链表中比在顺序存储结构中效率高。

(√ )三、填空题1.必定不一定2.头指针头结点指针域前驱结点指针域3.双向链表4. nO(n)n/2O(n)5.. 单链表循环链表双向链表6.指针7.(n-1)/28.py->next=px->next; px->next=py9. 4 210. i=1; i≤st11.(1)L->next=null ∥置空链表,然后将原链表结点逐个插入到有序表中(2)p!=null ∥当链表尚未到尾,p为工作指针(3)q!=null ∥查p结点在链表中的插入位置,这时q是工作指针。

(4)p->next=r->next ∥将p结点链入链表中(5)r->next=p ∥r是q的前驱,u是下个待插入结点的指针。

四、应用题1. 在线性表的链式存储结构中,头指针指链表的指针,若链表有头结点则是链表的头结点的指针,头指针具有标识作用,故常用头指针冠以链表的名字。

第二章_线性表(参考答案)

第二章_线性表(参考答案)

第二章线性表一、填空题1、数据逻辑结构包括线性结构、树型结构、图型结构这三种类型,树形结构和图形结构合称为非线性结构。

2、在线性结构中,第一个结点没有前驱结点,其余每个结点有且只有个前驱结点,最后一个结点没有后续结点,其余每个结点有且只有一个后续结点。

3、在顺序表中插入或删除一个元素,需要平均移动一半元素,具体移动的元素个数与插入或删除的位置有关。

4、在顺序表中,逻辑上相邻的元素,其物理位置一定相邻。

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

5、在带头结点的非空单链表中,头结点的存储位置由头指针指示,首元素结点的存储位置由头结点的next域指示,除首元素结点外,其它任一元素结点的存储位置由其直接前趋结点的next域指示。

6、阅读下列算法,并补充所缺内容。

void purge_linkst( ListNode *& la ){// 从头指针为 la 的有序链表中删除所有值相同的多余元素,并释放被删结点空间ListNode *p,*q;if(la==NULL) return;q=la; p = la->link;while (p){if (p && ___(1)p->data!=q->data___) {q=p; p = p->link;}else{q->link= ___(2)p->link___;delete(p);p=___(3)q->link___;}}//while}// purge_linkst二、选择题1、在数据结构中,从逻辑上可以把数据结构分成 C。

A、动态结构和静态结构B、紧凑结构和非紧凑结构C、线性结构和非线性结构D、内部结构和外部结构2、线性表的逻辑顺序与存储顺序总是一致的,这种说法 B。

A、正确B、不正确3、线性表若采用链式存储结构时,要求内存中可用存储单元的地址D。

A、必须是连续的B、部分地址必须是连续的C、一定是不连续的D、连续或不连续都可以4、在以下的述叙中,正确的是B。

第二章习题解答

第二章习题解答

2.24 void reverse_merge(LinkList &A,LinkList &B,LinkList &C)//把元素递增排列的链表A和B合并为C,且C中元素递减排列,使 用原空间 { pa=A->next;pb=B->next;pre=NULL; //pa和pb分别指向A,B的当前元素 while(pa||pb) { if(pa->data<pb->data||!pb) { pc=pa;q=pa->next;pa->next=pre;pa=q; //将A的元素插入新表 } else { pc=pb;q=pb->next;pb->next=pre;pb=q; //将B的元素插入新表 } pre=pc; } C=A;A->next=pc; //构造新表头 }//reverse_merge 分析:本算法的思想是,按从小到大的顺序依次把A和B的元素插入新表的头部pc处,最后处理A或B的剩余元素. 2.25 void SqList_Intersect(SqList A,SqList B,SqList &C)//求元素递增排列的线性表A和B的元素的交集并存入C中 { i=1;j=1;k=0; while(A.elem[i]&&B.elem[j]) { if(A.elem[i]<B.elem[j]) i++; if(A.elem[i]>B.elem[j]) j++; if(A.elem[i]==B.elem[j]) { C.elem[++k]=A.elem[i]; //当发现了一个在A,B中都存在的元素, i++;j++; //就添加到C中 } }//while }//SqList_Intersect

第二章线性表习题及答案

第二章线性表习题及答案

第二章线性表习题及答案一、根底知识题2.1 试描述头指针、头结点、开场结点的区别、并说明头指针和头结点的作用。

答:始结点是指链表中的第一个结点,也就是没有直接前趋的那个结点。

链表的头指针是一指向链表开场结点的指针(没有头结点时),单链表由头指针唯一肯定,因此单链表可以用头指针的名字来命名。

头结点是咱们人为地在链表的开场结点之前附加的一个结点。

有了头结点以后,头指针指向头结点,无论链表否为空,头指针老是非空。

而且头指针的设置使得对链表的第一个位置上的操作与在表其他位置上的操作一致(都是在某一结点以后)。

2.2 何时选用顺序表、何时选用链表作为线性表的存储构造为宜?答:在实际应用中,应按照具体问题的要求和性质来选择顺序表或链表作为线性表的存储构造,通常有以下几方面的考虑:1.基于空间的考虑。

当要求存储的线性表长度转变不大,易于事前肯定其大小时,为了节约存储空间,宜采用顺序表;反之,当线性表长度转变大,无法计算其存储规模时,采用动态链表作为存储构造为宜。

2.基于时间的考虑。

假设线性表的操作主如果进展查找,很少做插入和删除操作时,采用顺序表做存储构造为宜;反之,假设需要对线性表进展频繁地插入或删除等的操作时,宜采用链表做存储构造。

而且,假设链表的插入和删除主要发生在表的首尾两头,那么采用尾指针表示的单循环链表为宜。

2.3 在顺序表中插入和删除一个结点需平均移动多少个结点?具体的移动次数取决于哪两个因素?答:在等概率情况下,顺序表中插入一个结点需平均移动n/2个结点。

删除一个结点需平均移动(n-1)/2个结点。

具体的移动次数取决于顺序表的长度n和需插入或删除的位置i。

i越接近n那么所需移动的结点数越少。

2.4 为何在单循环链表中设置尾指针比设置头指针更好?答:尾指针是指向终端结点的指针,用它来表示单循环链表可使得查找链表的开场结点和终端结点都很方便,设一带头结点的单循环链表,其尾指针为rear,那么开场结点和终端结点的位置别离是rear->next->next 和rear, 查找时间都是O(1)。

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

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

《数据结构》第二章线性表习题一、单项选择题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 )之前插入一个新元素时,需向后移动______个元素。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
int i,m; m=0 for( i=0; i<L->length; i++)
if(L-> items[i] = =Value ) m=m+1; else L-> items[i-m]=L-> items[i]; L->length=L->length-m; //修改线性表的长度 }
为什么函数返回类型要设成Status呢?只是泛指一个类 型,如 typedef int Status;为了以后更改返回值做准备, 比如你可以改一下#define float Status,这样就都成了 返回浮点了
}
s->next=s->next->next;//删除最大结点 }
算法
时间复杂度为O(n)
Void invesqlist(Sqlist *L) { /*将顺序表(a1,a2,…,an)逆置为(an,an-
1,…,a1)*/
int temp,i,j,m=(L->length -1)/2; for (i=0;i<=m;i++)
{ j= length -1 -i; temp=L->items [ i ]; //对换
items [i+1]中,表长length加1。
算法:
– SqList *InsertOrderSqList(Sqlist *L,DataType x)
– { //顺序表L中的元素依值递增有序,本算法将x插 入其中适当位置,以保持有序性。
– int i;
– if(L->length==LISTSIZE-1) printf("表已满");
L->items [ i ]=L->items [ j ];
L->items [ j ]=temp;
}
2、设有一顺序表,请编写一算法求第i个 元素的后继结点的值。
解题思路:通过数组下标找到第i+1个元素,如果没 有越界,就返回值。
– Status Successor(Sqlist *L,i)
– { //求第i个元素的后继结点的值
解题思路分析: 要利用原表的存储空间将顺序表(a1,a2,…,an)逆置 为(an,an-1,…,a1),我们只要设置一个临时变量 temp,然后循环,再从表头、表尾两个方向开始,将 元素对换即可。 核心语句:
temp=L->items [ i ]; L->items [ i ]=L->items [ j ]; L->items [ j ]=temp;
10、已知一个带头结点的单链表L,试编 写一个算法删除L中值最大的结点。
void del_max(LinkList L)
{ LinkList p=L,r=L,s=L; //s记录最大结点的前驱结点
while(!p->next)
{ r=p;//r记录当前检测结点的前驱结点 p=p->next;//当前与最大值比较的结点 if(p->data>s->next->data)//若当前结点比最大结点大 s=r;//最大结点的前驱为当前结点的前驱结点
else
{ for(j=1; j<i-1; j++) p=p->next; //找到第i-1个链结点
for(j=1; j<=k; j++)
{ q=p->next; p->next=q->next; //删除一个链结点
free(q); } } // else } // Delete
6、已知一个不带头单链表,编写算法将该 单链表复制一个拷贝。
对算法一改进后的算法思路是:当判断某个数据元素 A[i]并得知其满足删除条件时,先不马上对其做删除 操作,只记录这样的数据元素的个数m,只是在当某 个数据元素不是要删除的数据元素时,这时将该数据 元素移到线性表的第i-m个位置。
算法二:
时间复杂度为O(n)
Status DELValue (SqList *L, DateType Value) { //删除线性表L中所有值为Value的数据元素
5、已知非空线性链表L.请写一算法,删除该线性 链表从第i个链结点开始的连续k个结点。(设i>=1)
算法思路:根据题意,本题应该分两种情况加以 考虑:
(1)当i=1时(即从链表的第一个链结点就开始删 除),只需从第一个链结点开始依次删除链表 的连续k个链结点,并释放它们的存储空间。
(2)当i>1时,先找到链表的第i-1个链结点,然 后从第i个链结点开始删除从第i个链结点开始 的连续k个链结点,并释放它们的存储空间。
L->items [j]=L->items [j+1];
--L->length;
时间复杂度为O(n2)
} }
一个程序,或者一个算法写好之后,我们自然而 然地想到:有没有更好的实现??这个算法好 么??能改进么??
算法思路二:
对于数据元素A[i],如果它满足条件,将其从线性表中 删除。由于从第i+1个位置移到第i个位置的元素也可 能满足条件,因此,此时的i值不能增加1,还需要原 地等待以判断从后面移来的那个元素是否也满足删除 条件(如果也满足删除条件,接着删除该元素),只有 当A[i]不满足删除条件时,i才向后移一个位置。
– if(i>=L->length) {printf(“位置信息不合法,其取值 范围应该是[1, length -1]");returm ERROR;}
– else
– { printf(“第i个元素的后继结点的值为”,L-
>items [i+1] ); return OK; } – } // successor
算法
void DecomposeA(LinkList ha ,LinkList hb) { PNode r, p, q;
hb=ha; //指向由奇数序号的结点组成的C链表 ha=ha->next; //指向由偶数序号的结点组成的B链表
p=ha; r=hb; while (p!=NULL && p->next!=NULL) { q = p->next; p->next=q->next; r->next=q; r=q p=p->next; } r->next=NULL; }
分析:建立单链表的过程是一个动态生成的过程,即 从“空表”的初始状态起,依次建立各元素结点,并 逐个插入单链表。有两种建立单链表的方法:头插法 和尾插法。用头插法建立单链表,由于每次都是将待
插结点插在头结点之后,使得单链表中元素的顺序和 读入的顺序正好相反;用尾插法建立单链表,由于每 次都是将待插结点插在终端结点之后,使得单链表中 元素的顺序和读入的顺序正好相同。有时可以利用这 个特点完成具有顺序相同或相反的操作。
void ListConcat(LNode *h1,LNode *h2,LNode *h)
{ LNode *p;
h=h1;
p=h1;
while(p->next!=NULL) p=p->next;
p->next=h2->next;
}
时间复杂度:O(1)
8、试编写一个算法将单循环链表逆置,要 求不能增加新结点。
if( j>sqrt(a[i]) ) num++;
}}
Return num; }
这是最一般的求 解n个数中包含多 少个素数的算法。
复杂度是
o(n*sqrt(n))
第2章 线性表
习题解答
1、 设计一个算法,对顺序表实现就地逆置,即 利用原表的存储空间将线性表(a1,a2,…,an)逆 置为(an,an-1,…,a1)。
算法
status reverse(LinkList h)
{ //对单循环链表实现逆置 p=L->next; //设置工作指针p指向第一个链结点 h->next=h; //将原表的头结点作为新表的头结点 while(p!=h)//建立逆序链接关系 { q=p->next; //暂存后继结点地址 p->next=h->next; //插在头结点之后 h->next=p;//令插入的结点成为新的首元结点
–}
– return L;
– } // InsertOrderSqList
4.设计算法,删除顺序表中值为value 的所有结点。
解题思路一:
从线性表的第一个数据元素开始到最后那个数据元素, 依次判断线性表中的数据元素是否满足删除条件。若 某个数据元素满足条件,则从线性表中删除该数据元 素,然后修改线性表的长度(即当items [i]= value 时,进行删除操作,将items[i+1]至items [length]元 素前移,并使length减1);否则,继续向后遍历, 直至表尾。
3.设顺序表L中的数据元素递增有序。试写一算法, 将x插入到顺序表的适当位置上,以保持该表的 有序性。
解题思路:首先,查找x在顺序表L中的插入 位置,即求items [i]<=x<items [i+1]的i值
(设i的初值为length);然后,将顺序表中
的length-i个元素后移;最后,将x插入到
p=q; } } //reverse

9、编写一个算法,将一个头指针为ha的单链表A 分解为两个单链表B和C,使得B中含有A中序号为 偶数的结点,C中含有A中序号为奇数的结点。分 解后,头指针ha指向B链表,头指针hb指向C链表。
算法思路:其函数是将单链表A中的所有奇数 序号的结点删除,并在删除时把这些结点链接 起来构成单链表C。
Int CountPrime (int a[ ],int n)
相关文档
最新文档