中国农业大学_821数据结构_《数据结构》习题(2)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第2章线性表

一、回答题

1. 线性表的两种存储结构各有哪些优缺点?

2. 对于线性表的两种存储结构,如果有n个线性表同时并存,并且在处理过程中各表的长度会动态发生变化,线性表的总数也会自动改变,在此情况下,应该选用哪种存储结构,为什么?

3. 对于线性表的两种存储结构,如果线性表的总数基本稳定,并且很少进行插入和删除操作,但是要求以最快的速度存取线性表中的元素,那么应该选用哪种存储结构?试说明理由。

二、填空题

1. 已知L是无头结点的单链表,且p结点既不是第一个结点,也不是最后一个结点,试从下列提供的语句中选出合适的语句序列:

(1) 在p结点之后插入s结点:

(2) 在p结点之前插入s结点:

(3) 在单链表L首插入s结点:

(4) 在单链表L后插入s结点:

提供的语句:

①p->next = s;

② p ->next = p ->next ->next; ③ p ->next = s ->next; ④ s ->next = p ->next; ⑤ s ->next = L; ⑥ s ->next = p; ⑦ s ->next = NULL; ⑧ q = p;

⑨ while ( p ->next ! = q ) p = p ->next ; ⑩ while ( p ->next ! = NULL ) p = p ->next ; p = q; p = L; L = s; L = p;

2. 已知p 结点是某双向链表的中间结点,试从下列提供的语句中选出合适的语句序列。 (1) 在p 结点之后插入s 结点: (2) 在p 结点之前插入s 结点: (3) 删除p 结点的直接后继结点: (4) 删除p 结点的直接前驱结点:

提供的语句:

① p ->next = p ->next ->next; ② p ->prior = p ->prior ->prior; ③ p ->next = s; ④ p ->prior = s;

11 12 13 14

⑤ s ->next = p; ⑥ s ->prior = p; ⑦ s ->next = p ->next; ⑧ s ->prior = p ->prior; ⑨ p ->prior ->next = p ->next; ⑩ p ->prior ->next = p; p ->next ->prior = p; p ->next ->prior = s; p ->prior ->next = s; p ->next ->prior = p ->prior; q = p ->next; q = p ->prior; delete p; delete q;

3. 在顺序表中插入或删除一个数据元素,需要平均移动

个元素,具体移

动的元素个数与

有关。

4. 在顺序表中逻辑上相邻的数据元素的物理位置

紧邻。单链表中逻辑上相邻的数据元素的物理位置

紧邻。

三、算法题

1. 设A 为顺序表,试编写删除A 中第i 个数据元素起的k 个元素的算法。

2. 试编写一个算法:将一个顺序表A (包含n 个数据元素)分拆成两个顺序表B 和C ,使A 中大于0的元素存放在B 中,小于0的元素存放在C 中。

3. 试编写一个算法:已知一个顺序表A 中的数据元素按照值非递减有序,当插入一个

11 12 13 14 15 16 17 18

元素x后仍然保持该顺序表是有序的。

4. 试编写一个算法:将m(m>2)个有序(从小到大)顺序表合并成一个有序顺序表,且在合并的过程中不另设新的顺序表存储。

5. 试编写一个算法:已知顺序表A的数据元素按照值递增存放,而顺序表B的数据元素按照值递减存放,要求将B中的所有元素插入到A中(设A的空间足够大),使其仍然为递增有序(假设A和B中没有相同的元素)。

6. 试编写一个算法:设A和B使是两个顺序表,其数据元素按照从小到大的顺序排列,要求将A和B中相同元素组成一个新的从小到大的有序顺序表C,并删除重复的数据元素。

7. 试编写一个算法:已知在一维数组A[1: m+n]中依次存放着两个顺序表(a1, a2, …,

a m)和(b1, b1, … ,

b n),要求将两个顺序表的位置互换,即把(b1, b1, … , b n)放到(a1, a2, … ,

a m)的前面。

8. 试编写一个算法:判断一个单链表L的数据元素值是否是递增的。

9. 试编写一个算法:已知线性表的元素按照递增的顺序排列,且以单链表作为存储结构,要求删除表中所有值大于min且小于max的元素(若表中存在这样的元素)。

10. 试编写一个算法:已知线性表的元素是无序的,且以单链表作为存储结构,要求删除表中所有值大于min且小于max的元素(若表中存在这样的元素)。

11. 试编写一个算法:有一个单链表L,由于使用不当等原因,指向第一个结点的指针丢失了,要求在指针p所指结点的前面插入一个data域为x的结点。

12. 试编写一个算法:将一个单链表La(包含n个数据元素)分拆成两个具有相同结构的单链表Lb和Lc,使La.data大于0的元素存放在Lb中,小于0的元素存放在Lc中。

13. 试编写一个算法:将两个循环链表a =(a1, a2, …a n-1, a n)和b =(b1, b2, …b m-1, b m)合并为一个循环链表c。

14. 试编写一个算法:将双向链表中最后两个结点互换。

15. 试编写一个算法:假设有一个单循环链表,其结点有3个域:data,next和prior,其中data为数据域;next为指针域,它指向后继;prior为指针域,它的值为空(NULL),要求将此单循环链表改成双向循环链表。

相关文档
最新文档