第二章线性表习题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第二章线性表
一.单选
1.在一个长度为n 的顺序表中向第i个元素(1<=i<=n+1)之前插入一个新元素时,需要向后移动()个元素。
A.n-i B.n-i+1 C.n-i-1 D.i
2.链表不具有的特点是()
A.可随机访问任一元素B.插入删除不需要移动元素
C.不必事先估计存储空间D.所需空间与线性表长度成正比
3.在线性表的下列存储结构中,读取指定序号的元素花费时间最少的是()
A.单链表B.双链表C.循环链表D.顺序表
4.在单链表中,若*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;
5.在带头结点*head的循环单链表中,至少有一个结点的条件是(),尾结点*p的条件是()
A.head->next!=NULL B.head->next!=head
C.p==NULL D.p->next==head
二.填空题
1.在线性表的顺序存储中,元素之间的逻辑关系是通过()决定的;在线性表的链式存储中,元素之间的逻辑关系是通过()决定的。
2.带头结点的单链表head为空的判定条件是()。
3.对于一个具有n个结点的单链表,在已知的结点*p后插入一个新结点的时间复杂度为(),在data值为x的结点后插入一个新结点的时间复杂度为()
4.在有n个元素的顺序表中删除任意一个元素所需移动元素的平均次数为()5.在有n个元素的顺序表中任意位置插入一个元素所需移动元素的平均次数为()三.编程
1.设计一个算法,将x 插入到一个有序(从小到大)的线性表(顺序存储结构)的适当位置上,并保持线性表的有序性。
2.设计算法,将一个带头结点的数据域依次为a1,a2,……,an(n>=3)的单链表的所有结点逆置,即第一个结点的数据域变为an,……,最后一个结点的数据域为a1。
3.设ha=(a1,a2,……,an)和hb=(b1,b2,……,bm)是两个带头结点的循环单链表,编写将这两个表合并为带头结点的循环单链表hc的算法。
4.编写算法将单链表(带头结点)中值重复的结点删除,使所得的结果表中各结点值均不相同。
5.已知带头结点的循环链表L中至少有两个结点,每个结点的两个字段为data和next,其中data的类型为整形。试设计一个算法判断该链表中每个元素的值是否小于其后续两个结点的值之和。若满足,则返回1;否则返回0。
6.编写出判断带头结点的循环双链表L是否对称相等的算法。
参考答案
第二章
一.B A D B B D
二.1.物理存储位置,指针域2.Head->next==NULL 3.O(1), O(n) 4.(n-1)/2 5.n/2 三.1.void insert(sqlist &a,elemtype x)
{ int i=0,j;
While (i For (j=a.length-1;j>=I;j--) data[j+1]=a.data[j]; a.data[i]=x; a.length++; } 2.Void reverse(linklist *&head) { linklist *p=head->next,*q; Head->next=NULL; While(p!=NULL) {q=p->next; p->next=head->next; head->next=p; p=q;} } 3.Void merge(linklist *ha,linklist *hb,linklist *&hc) { linklist *p=ha->next; Hc=ha; While(p->next!=ha) p=p->next; p->next=hb->next; while(p->next!hb) p=p->next; p->next=hc; free(hb);} 4.Void dels(linklist *&head) { linklist *p=head->next,*q,*pre,*r; While(p!=NULL) { q=p->next; pre=p; While( q!=NULL) { if (p->data==q->data) { r=q; pre->next=q->next; q=q->next; free(r );} Else { pre=q; Q=q->next; } } p=p->next; } } 5.Void judge(linklist *l) { linklist *p=l->next; Int b=1; While(p->next->next!=l && b==1) If (p->data P=p->next; Else b=0; Return b; } 6.Int equeal(Dlinklist *l) { int same=1; Dlinklist *p=l->next; Dlinklist *q=l->prior; While(same==1) { if (p->data!=q->data) Same=0; P=p->next; If(p==q) break; Q=q->prior; If(p==q) break; } Return same; }