第2章 线性表(习题)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第2章线性表
习题
一、选择题
1.线性表是( ) 。
(A) 一个有限序列,可以为空; (B) 一个有限序列,不能为空;
(C) 一个无限序列,可以为空; (D) 一个无序序列,不能为空。
2.从一个具有n个结点的单链表中查找值为x结点,在查找成功情况下,需平均比较个结点。
(A) n (B) n/2 (C) (n-1)/2 (D) (n+1)/2
3.线性表采用链式存储时,其各元素存储地址( ) 。
(A) 必须是连续的; (B) 部分地址必须是连续的;
(C) 一定是不连续的; (D) 连续与否均可以。
4.用链表表示线性表的优点是()。
(A)便于随机存取
(B)花费的存储空间较顺序存储少
(C)便于插入和删除
(D)数据元素的物理顺序与逻辑顺序相同
5.插入、删除速度快,但不能随机存取。
(A) 链接表(B)顺序表(C)顺序有序表(D)上述三项无法比较
6.若希望从链表中快速确定一个结点的前驱,则链表最好采用___________方式。
(A) 单链表 (B) 循环单链表 (C) 双向链表 (D) 任意
7.下面关于线性表的叙述错误的是( )。
线性表采用顺序存储,必须占用一片地址连续的单元;
线性表采用顺序存储,便于进行插入和删除操作;
线性表采用链式存储,不必占用一片地址连续的单元;
线性表采用链式存储,不便于进行插入和删除操作;
8.带头结点的单链表head为空的判定条件是__________。
(A) head= =NULL (B) head->next==NULL
(C) head->next= =head (D) head!=NULL
9.若某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用()存储方式最节省运算时间。
(A) 单链表 (B) 仅有头指针的单循环链表
(C) 双链表 (D) 仅有尾指针的单循环链表
10.在循环双链表的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; s->next=p->next; p->next->prior=s; p->next =s;
二、填空题
1、对于采用顺序存储结构的线性表,当随机插入或删除一个数据元素时,平均约需移动表中元素。
2、当对一个线性表经常进行的是插入和删除操作时,采用存储结构为宜。
3、当对一个线性表经常进行的是存取操作,而很少进行插入和删除操作时,
最好采用存储结构。
4、在一个长度为n的顺序存储结构的线性表中,向第i个元素(1≤i≤n+1)之前插入一个新元素时,需向后移动个元素。
5、从长度为n的采用顺序存储结构的线性表中删除第i个元素(1≤i≤n),需向前移动个元素。
6、对于长度为N的顺序存储结构的线性表,插入或删除元素的时间复杂度为。
7、在具有N个结点有序单链表中插入一个新结点并仍然有序的时间复杂度为。
8、在双向链表中,每个结点共有两个指针域,一个指向结点,另一个则
指向结点。
三、判断题
1、链表中的头结点仅起到标识的作用。
2、顺序存储的线性表可以按序号随机存取。
3、线性表采用链表存储时,结点和结点内部的存储空间可以是不连续的。
4、顺序存储方式插入和删除时效率太低,因此它不如链式存储方式好。
5、对任何数据结构链式存储结构一定优于顺序存储结构。
6、在线性表的顺序存储结构中,逻辑上相邻的两个元素在物理位置上并不一定紧邻。
7、循环链表不是线性表。
8、为了很方便的插入和删除数据,可以使用双向链表存放数据。
9、在单链表中,要取得某个元素,只要知道该元素的指针即可,因此,单链表是随机存取的存储结构。
10、取线性表的第i个元素的时间同i的大小有关.
四、应用题
1、线性表有两种存储结构:一是顺序表,二是链表。试问:
(1)如果有 n个线性表同时并存,并且在处理过程中各表的长度会动态变化,线性表的总数也会自动地改变。在此情况下,应选用哪种存储结构?为什么?
(2)若线性表的总数基本稳定,且很少进行插入和删除,但要求以最快的速度存取线性表中的元素,那么应采用哪种存储结构?为什么?
2、线性表的顺序存储结构具有三个弱点:其一,在作插入或删除操作时,需移动大量元素;其二,由于难以估计,必须预先分配较大的空间,往往使存储空间不能得到充分利用;其三,表的容量难以扩充。线性表的链式存储结构是否一定都能够克服上述三个弱点,试讨论之。
3、线性表(a1,a2,…,an)用顺序映射表示时,ai和ai+1(1<=i 4、试述头结点,首元结点,头指针这三个概念的区别. 5、在单链表、双链表和单循环链表中,若仅知道指针p指向某结点,不知道头指针,能否将结点*p从相应地链表中删除?若可以,其时间复杂度各为多少? 6、如何通过改链的方法,把一个单向链表变成一个与原来链接方向相反的单向链表? 7、在顺序表中插入和删除一个结点需平均移动多少个结点?具体地移动次数取决于哪两个因素? 8、在单链表和双链表中,能否从当前结点出发访问到任一结点? 五、算法设计题 1、已知单链表L,写一算法,删除其中的重复结点。 2、编写一个函数,从一给定的顺序表A中删除值在x~y(x<=y)之间的所有元素,要求以较高的效率来实现。 3、假设有两个按元素值递增次序排列的线性表,均以单链表形式存储。请编写算法将这两个单链表归并为一个按元素值递减次序排列的单链表,并要求利用原来两个单链表的结点存放归并后的单链表。 4、已知递增有序的两个单链表A,B分别存储了一个集合。设计算法实现求两个集合的并集的运算A:=A∪B。 5、设有一线性表e=(e1,e2, …, e n-1,e n),其逆线性表定义为e’=(e n,e n-1, …, e2,e1)。请设计一个算法,将用带头结点和不带头结点的单链表两种方法表示的线性表置逆,要求逆线性表仍占用原线性表的空间。 6、设L为单链表的头结点地址,其数据结点的数据都是正整数且无相同的,试设计利用直接插入的原则把该链表整理成数据递增的有序单链表的算法。 7、已知线性表(a1 a2 a3 …an)按顺序存于内存,每个元素都是整数,试设计用最少时间把所有值为负数的元素移到全部正数值元素前边的算法:例:(x,-x,-x,x,x,-x …x)变为(-x,-x,-x…x,x,x)。 8、已知非空线性链表由list指出,链结点的构造为(data,next).请写一算法,将链表中数据域值最小的那个链结点移到链表的最前面。要求:不得额外申请新的链结点。 9、线性表中有n个元素,每个元素是一个字符,现存于向量R[n]中,试写一算法,使R中的字符按字母字符、数字字符和其它字符的顺序排列。要求利用原来的存储空间,元素移动次数最小。 10、假设长度大于1的循环单链表中,既无头结点也无头指针,p为指向该链表中某一结点的指针,编写一个函数删除该结点的前趋结点。