数据结构及应用算法教程习题第二章__线性表
第二章线性表
一、选择题
1.下述哪一条是顺序存储结构的优点?()
A.存储密度大 B.插入运算方便
C.删除运算方便 D.可方便地用于各种逻辑结构的存储表示
2.下面关于线性表的叙述中,错误的是哪一个?()
A.线性表采用顺序存储,必须占用一片连续的存储单元。
B.线性表采用顺序存储,便于进行插入和删除操作。
C.线性表采用链接存储,不必占用一片连续的存储单元。
D.线性表采用链接存储,便于插入和删除操作。
3.线性表是具有n个()的有限序列(n>0)。
A.表元素 B.字符 C.数据元素 D.数据项 E.信息项
4.若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用()存储方式最节省时间。
A.顺序表 B.双链表 C.带头结点的双循环链表 D.单循环链表5.某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用()存储方式最节省运算时间。
A.单链表 B.仅有头指针的单循环链表
C.双链表 D.仅有尾指针的单循环链表
6.设一个链表最常用的操作是在末尾插入结点和删除尾结点,则选用( )最节省时间。
A. 单链表
B.单循环链表
C. 带尾指针的单循环链表
D.带头结点的双循环链表
7. 链表不具有的特点是()
A.插入、删除不需要移动元素 B.可随机访问任一元素
C.不必事先估计存储空间 D.所需空间与线性长度成正比
8. 下面的叙述不正确的是()
A.线性表在链式存储时,查找第i个元素的时间同i的值成正比
B. 线性表在链式存储时,查找第i个元素的时间同i的值无关
C. 线性表在顺序存储时,查找第i个元素的时间同i 的值成正比
D. 线性表在顺序存储时,查找第i个元素的时间同i的值无关
10. 若长度为n的线性表采用顺序存储结构,在其第i个位置插入一个新元素的算法的时间复杂度为()(1<=i<=n+1)。
A. O(0)
B. O(1)
C. O(n)
D. O(n2)
11. 对于顺序存储的线性表,访问结点和增加、删除结点的时间复杂度为()。
A.O(n) O(n) B. O(n) O(1) C. O(1) O(n) D. O(1) O(1)
12.线性表( a1,a2,…,an)以链接方式存储时,访问第i位置元素的时间复杂性为()
A.O(i) B.O(1) C.O(n) D.O(i-1)
13.在双向链表指针p的结点前插入一个指针q的结点操作是()。
A. p->Llink=q;q->Rlink=p;p->Llink->Rlink=q;q->Llink=q;
B. p->Llink=q;p->Llink->Rlink=q;q->Rlink=p;q->Llink=p->Llink;
C. q->Rlink=p;q->Llink=p->Llink;p->Llink->Rlink=q;p->Llink=q;
D. q->Llink=p->Llink;q->Rlink=q;p->Llink=q;p->Llink=q;
14.在单链表指针为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; 15.对于一个头指针为head的带头结点的单链表,判定该表为空表的条件是()
A.head==NULL B.head→next==NULL
C.head→next==head D.head!=NULL
二、填空
1.当线性表的元素总数基本稳定,且很少进行插入和删除操作,但要求以最快的速度存取线性表中的元素时,应采用______存储结构。
2.线性表L=(a1,a2,…,an)用数组表示,假定删除表中任一元素的概率相同,则删除一个元素平均需要移动元素的个数是_____。
3.设单链表的结点结构为(data,next),next为指针域,已知指针px指向单链表中data为x的结点,指针py指向data为y的新结点 , 若将结点y插入结点x之后,则需要执行以下语句:_______; ______;
4.在一个长度为n的顺序表中第i个元素(1<=i<=n)之前插入一个元素时,需向后移动________个元素。
5.在单链表中设置头结点的作用是________。
6.链表存储的特点是利用________来表示数据元素之间的逻辑关系。
7. 顺序存储结构是通过________表示元素之间的关系的。
8. 对于双向链表,在两个结点之间插入一个新结点需修改的指针共 ______个,单链表为_______个。
9. 循环单链表的最大优点是:________。
10. 已知指针p指向单链表L中的某结点,则删除其后继结点的语句是:________
11. 带头结点的双循环链表L中只有一个元素结点的条件是:________
12. 在单链表L中,指针p所指结点有后继结点的条件是:__
13.带头结点的双循环链表L为空表的条件是:________。
17.在双向循环链表中,向p所指的结点之后插入指针f所指的结点,其操作是_______、_______、_______、________
三、应用题
1.线性表有两种存储结构:一是顺序表,二是链表。试问:
(1)如果有 n个线性表同时并存,并且在处理过程中各表的长度会动态变化,线性表的总数也会自动地改变。在此情况下,应选用哪种存储结构?为什么?
(2)若线性表的总数基本稳定,且很少进行插入和删除,但要求以最快的速度存取线性表中的元素,那么应采用哪种存储结构?为什么?
2.线性表的顺序存储结构具有三个弱点:其一,在作插入或删除操作时,需移动大量元素;其二,由于难以估计,必须预先分配较大的空间,往往使存储空间
不能得到充分利用;其三,表的容量难以扩充。线性表的链式存储结构是否一定都能够克服上述三个弱点,试讨论之。
3.线性表(a1,a2,…,a n)用顺序存储表示时,a i和a i+1(1<=i 4. 说明在线性表的链式存储结构中,头指针与头结点之间的根本区别;头结点与首元结点的关系。 5. 在单链表和双向链表中,能否从当前结点出发访问到任何一个结点? 6. 如何通过改链的方法,把一个单向链表变成一个与原来链接方向相反的单向链表? 7. 设单链表结点指针域为next,试写出删除链表中指针p所指结点的直接后继的C语言语句。 8.设双向循环链表中结点的数据域、前驱和后继指针域分别为data,pre和next,试写出在指针p 所指结点之前插入一s结点的C语言描述语句。 10. 带头结点且头指针为ha和hb的两线性表A和B 分别表示两个集合。两表中的元素皆为递增有序。请写一算法求A和B的并集AUB。要求该并集中的元素仍保持递增有序。且要利用A和B的原有结点空间。 18. 请写一个算法将顺序存储结构的线性表(a 1...a n )逆置为(a n ...a 1 )。 参考答案 一、选择题 1.A 2.B 3.C 4.A 5.D 6.D 7.B 8.B C 9.B 10.C 11.C 12.C 13. C 14. B 15. B 二、填空题 1.顺序 2.(n-1)/2 3.py->next=px->next; px->next=py 4 .n-i+1 5.主要是使插入和删除等操作统一,在第一个元素之前插入元素和删除第一个结点不必另作判断。另外,不论链表是否为空,链表指针不变。 10.指针 11.物理上相邻指针 12.4 2 13.从任一结点出发都可访问到链表中每一个元素。 14.u=p->next; p->next=u->next; free(u); 15.L->next->next==L 16.p->next!=null 17.L->next==L && L->prior==L 34.(1)pa!=ha ∥或pa->exp!=-1 (2)pa->exp==0 ∥若指数为0,即本项为常数项 (3)q->next=pa->next ∥删常数项 (4)q->next ∥取下一元素 (5)=pa->coef*pa->exp (6)-- ∥指数项减1 (7)pa ∥前驱后移,或q->next (8)pa->next ∥取下一元素 36.(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)选链式存储结构。它可动态申请内存空间,不受表长度(即表中元素个数)的 影响,插入、删除时间复杂度为O(1)。 (2)选顺序存储结构。顺序表可以随机存取,时间复杂度为O(1)。 2.链式存储结构一般说克服了顺序存储结构的三个弱点。首先,插入、删除不需移动元素,只修改指针,时间复杂度为O(1);其次,不需要预先分配空间,可根据需要动态申请空间;其三,表容量只受可用内存空间的限制。其缺点是因为指针增加了空间开销,当空间不允许时,就不能克服顺序存储的缺点。 5.顺序映射时,a i 与a i+1 的物理位置相邻;链表表示时a i 与a i+1 的物理位置 不要求相邻。 6.在线性表的链式存储结构中,头指针指链表的指针,若链表有头结点则是链表的头结点的指针,头指针具有标识作用,故常用头指针冠以链表的名字。头结点是为了操作的统一、方便而设立的,放在第一元素结点之前,其数据域一般无意义(当然有些情况下也可存放链表的长度、用做监视哨等等),有头结点后,对在第一元素结点前插入结点和删除第一结点,其操作与对其它结点的操作统一了。而且无论链表是否为空,头指针均不为空。首元结点也就是第一元素结点,它是头结点后边的第一个结点。 9. 在单链表中不能从当前结点(若当前结点不是第一结点)出发访问到任何一个结点,链表只能从头指针开始,访问到链表中每个结点。在双链表中求前驱和后继都容易,从当前结点向前到第一结点,向后到最后结点,可以访问到任何一个结点。 10.本题是链表的逆置问题。设该链表带头结点,将头结点摘下,并将其指针域置空。然后从第一元素结点开始,直到最后一个结点为止,依次前插入头结点的后面,则实现了链表的逆置。