数据结构试题集(包含答案-完整版) 下载本文

内容发布更新时间 : 2024/11/15 14:27:32星期一 下面是文章的全部内容请认真阅读。

.

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;klength-1;k++)

可编辑范本