.
C. p =p->next; D. p=p->next->next;
17、将长度为n的单链表连接在长度为m的单链表之后的算法的时间复杂度为( )。
A. O(1)
B. O(n)
C. O(m)
D. O(m+n)
18、线性表的顺序存储结构是一种( )存储结构。
A. 随机存取
B. 顺序存取
C. 索引存取
D. 散列存取
19、顺序表中,插入一个元素所需移动的元素平均数是( )。 A. (n-1)/2
B. n C. n+1
D. (n+1)/2
10、循环链表的主要优点是( )。
A. 不再需要头指针
B. 已知某结点位置后能容易找到其直接前驱
C. 在进行插入、删除运算时能保证链表不断开 D. 在表中任一结点出发都能扫描整个链表
11、不带头结点的单链表head为空的判定条件是( A )。
A. head==NULL C. head->next==head
答案B是带头结点的
12、在下列对顺序表进行的操作中,算法时间复杂度为O(1)的是( )。
A. 访问第i个元素的前驱(1
B. 在第i个元素之后插入一个新元素
B. head->next==NULL D. head!=NULL
(1?i?n)
答案是A.
C. 删除第i个元素(1?i?n)
D. 对顺序表中元素进行排序
可编辑范本
.
假设顺序表L,长度为n,求第i个节点L[i],直接前驱L[i-1],因此为O(1)
答案B需要移动n-i+1个节点,因此为O(n) 答案C也需要移动n-i个节点
答案D根据排序方法不同最慢O(n^2),最快O(nlogn)
13、已知指针p和q分别指向某单链表中第一个结点和最后一个结点。假设指针s指向另一个单链表中某个结点,则在s所指结点之后插入上述链表应执行的语句为( )。
A. q->next=s->next;s->next=p;
B. s->next=p;q->next=s->next; C. p->next=s->next;s->next=q; D. s->next=q;p->next=s->next; 14、在以下的叙述中,正确的是( )。
A. 线性表的顺序存储结构优于链表存储结构
B. 线性表的顺序存储结构适用于频繁插入/删除数据元素的情况
C. 线性表的链表存储结构适用于频繁插入/删除数据元素的情况 D. 线性表的链表存储结构优于顺序存储结构
15、在表长为n的顺序表中,当在任何位置删除一个元素的概率相同时,删除一个元素所需移动的平均个数为( )。
A. (n-1)/2
B. n/2
C. (n+1)/2
D. n
16、在一个单链表中,已知q所指结点是p所指结点的前驱结点,若在q和p之间插入一个结点s,则执行( )。
A. s->next=p->next; p->next=s;
可编辑范本
.
B. p->next=s->next;s->next=p; C. q->next=s;s->next=p; D. p->next=s;s->next=q;
17、在单链表中,指针p指向元素为x的结点,实现删除x的后继的语句是( )。
A. p=p->next; C. p->next=p;
B. p->next=p->next->next; D. p=p->next->next;
18、在头指针为head且表长大于1的单循环链表中,指针p指向表中某个结点,若p->next->next==head,则( )。
A. p指向头结点
B. p指向尾结点
C. p的直接后继是头结点
D. p的直接后继是尾结点
二、填空题
1、设单链表的结点结构为(data,next)。已知指针p指向单链表中的结点,q指向新结点,欲将q插入到p结点之后,则需要执行的语句: ; 。 答案:q->next=p->next
p->next=q
2、线性表的逻辑结构是 ,其所含元素的个数称为线性表的 。 答案:线性结构 长度
3、写出带头结点的双向循环链表L为空表的条件 。 答案:L->prior==L->next==L
4、带头结点的单链表head为空的条件是 。 答案:head->next==NULL
可编辑范本
.
5、在一个单链表中删除p所指结点的后继结点时,应执行以下操作:
q = p->next;
p->next= _ q->next ___;
三、判断题
1、单链表不是一种随机存储结构。
2、在具有头结点的单链表中,头指针指向链表的第一个数据结点。
3、用循环单链表表示的链队列中,可以不设队头指针,仅在队尾设置队尾指针。4、顺序存储方式只能用于存储线性结构。
5、在线性表的顺序存储结构中,逻辑上相邻的两个元素但是在物理位置上不一定是相邻的。
6、链式存储的线性表可以随机存取。X
四、程序分析填空题
1、函数GetElem实现返回单链表的第i个元素,请在空格处将算法补充完整。
int GetElem(LinkList L,int i,Elemtype *e){
LinkList p;int j; p=L->next;j=1;
while(p&&j
if(!p||j>i) return ERROR; *e= (2) ;
可编辑范本
(1) ;++j;
.
return OK; }
答案:(1)p=p->next (2)p->data
2、函数实现单链表的插入算法,请在空格处将算法补充完整。
int ListInsert(LinkList L,int i,ElemType e){ LNode *p,*s;int j; p=L;j=0;
while((p!=NULL)&&(j } p=p->next;j++; if(p==NULL||j>i-1) return ERROR; s=(LNode *)malloc(sizeof(LNode)); s->data=e; (1) ; (2) ; return OK; }/*ListInsert*/ 答案:(1)s->next=p->next (2)p->next=s 3、函数ListDelete_sq实现顺序表删除算法,请在空格处将算法补充完整。 int ListDelete_sq(Sqlist *L,int i){ int k; if(i<1||i>L->length) return ERROR; for(k=i-1;k 可编辑范本