<顺序表—链表>题目练习《数据结构(C语言版)》

目录

题目:

1. 下列数据结构中,不属于线性表的是(   )

2. 在长度为 n 的顺序表下标为 i 的位置前插入一个元素(1 ≤ i ≤ n+1),元素的移动次数为(   )

3.动态顺序表中,(   )操作需要检查是否需要扩容

4. 下列关于链表的说法哪个是正确的?(   )

5. 在单链表指针为p的结点之后插入指针为s的结点,正确的操作是(   )

6. 在一个单链表中,q 的前一个节点为 p,删除 q 所指向节点时,以下代码正确的执行语句及次序是(   )

7. 下列判断循环双向链表为空的语句中,正确的是(   )

 8.在长度为n(n>1)的单链表上,设有头和尾两个指针,执行(   )操作与链表的长度有关。

9.关于链表和顺序表间的区别,叙述错误的是(    )

10. 在一个循环双向链表中,要在p所指的节点之前插入s所指节点,以下代码正确的执行次序是(   )

 解析:

后记:●由于作者水平有限,文章难免存在谬误之处,敬请读者斧正,俚语成篇,恳望指教!

                                                                                           ——By 作者:新晓·故知


题目:

1. 下列数据结构中,不属于线性表的是(   )

A.循环队列

B.链表

C.动态顺序表

D.二叉树

2. 在长度为 n 的顺序表下标为 i 的位置前插入一个元素(1 ≤ i ≤ n+1),元素的移动次数为(   )

A.n - i + 1

B.n - i

C.i

D.i - 1

3.动态顺序表中,(   )操作需要检查是否需要扩容

A.删除

B.插入

C.初始化

D.清空

4. 下列关于链表的说法哪个是正确的?(   )

A.插入或删除时,无需移动其他元素

B.数据在内存中一定是连续的

C.需要事先估计存储空间

D.可以随机访问表内的元素

5. 在单链表指针为p的结点之后插入指针为s的结点,正确的操作是(   )

A.p->next=s; s->next=p->next;

B.p->next=s->next; p->next=s;

C.s->next=p->next; p->next=s;

D.p->next=s->next; p->next=s;

6. 在一个单链表中,q 的前一个节点为 p,删除 q 所指向节点时,以下代码正确的执行语句及次序是(   )

   ①`q->next=p->next;`

   ②`p->next=q->next;`

   ③`delete p;`

   ④`delete q;`

A.②③

B.④

C.①④

D.②④

7. 下列判断循环双向链表为空的语句中,正确的是(   )

A.head==NULL;

B.head->next==NULL;

C.head->next==head;

D.head!=NULL;

 8.在长度为n(n>1)的单链表上,设有头和尾两个指针,执行(   )操作与链表的长度有关。

A.在单链表第一个元素前插入一个新元素

B.在单链表最后一个元素后插入一个新元素

C.删除单链表中的第一个元素

D.删除单链表中的最后一个元素

9.关于链表和顺序表间的区别,叙述错误的是(    )

A.链表和顺序表都属于线性表

B.链表不能随机访问其中的某个元素,顺序表可以

C.链表能做的事,顺序表都可以完成,只是操作方法不同,效率不同

D.链表在进行插入和删除的时候,速度总是比顺序表快

10. 在一个循环双向链表中,要在p所指的节点之前插入s所指节点,以下代码正确的执行次序是(   )

①`p->prev->next=s;`

②`p->prev=s;`

③`s->prev=p->prev;`

④`s->next=p;`

A.④③①②

B.④③②①

C.②①④③

D.②①③④

 解析:

1.答案:D

   解析:二叉树属于树形结构,不是线性的,队列,链表,顺序表都属于线性表

2.答案:B

   解析:顺序表插入元素,需要移动元素,这里需要把[i, n - 1]区间的元素全部向后移动一次,故移动的次数为n - 1 - i + 1   

3.答案:B

   解析:插入操作需要考虑空间是否足够,如果不够需要先增容,再进行插入。

4.答案:A

   解析:链表插入删除元素只需要修改指针指向,不需要移动元素。链表是用指针链接前后节点,数据在内存中不一定连续,每次插入元素,都是先出开一个节点的空间,不需要事先估计存储空间,并且链表没有索引,不能随机访问。

5.答案:C

   解析:先把s和p的next节点链接,再更新p的next为s

6.答案:D

   解析: 首先要更新链接,再删除q节点

7.答案:C

   解析:双向带头循环链表中,head不是存放有效数据的节点,如果只有一个head节点,说明链表为空。

8.答案:D

   解析:A选项为头插,不需要遍历链表,B选项为尾插,也不需要遍历链表,C选项为头删,不需要遍历链表,只有D选项,为尾删,需要遍历单链表,找到尾节点的前一个节点。所以与长度有关。

9.答案:D

    解析:链表的插入和删除不是所有情况下都比顺序表快,比如尾插尾删,顺序表的时间复杂度为O(1),并且如果是单链表,如果要在中间某个节点的前面插入/删除一个节点,则需要遍历。所以时间的快慢要分情况看待。

10.

后记:
●由于作者水平有限,文章难免存在谬误之处,敬请读者斧正,俚语成篇,恳望指教!

                                                                                           ——By 作者:新晓·故知

猜你喜欢

转载自blog.csdn.net/m0_57859086/article/details/124048984
今日推荐