基础习题-线性表-02

本文深入探讨了线性表的顺序存储和链式存储,包括顺序表的插入时间复杂度、顺序存储结构的特点、循环链表的特性以及在链表中插入、删除元素的具体操作。同时,详细分析了双链表、循环链表的节点插入和删除算法,并讨论了不同线性表操作的效率,如在链表末尾插入和删除元素的最佳存储方式。此外,还涉及到了有序表归并的比较次数问题,以及单链表、双向链表的相关操作。
摘要由CSDN通过智能技术生成

目录

1. 在长n的顺序存储的线性表中,插入新元素需要后移几个元素

在这里插入图片描述

B

代入法:n=5;i=2; {A,B,C,D,E};则BCDE四个需要移动。在选项里找哪一项带入得4。
遇到未知量的就使用代入法。

2. 顺序表表位插入一个元素的时间复杂度

在这里插入图片描述

B

3. 顺序表中插入长度为2的5个元素后地址为多少

在这里插入图片描述

B

题目中:地址连续=顺序表

  1. 设线性表(顺序存储方式)的每个元素占8个存储单元。第一个单元的存储地址为100,则第6个元素占用的最后一个存储单元的地址为( )。
    A.139
    B.140
    C.147
    D.148

C

6个元素,每个元素8个存储单元,一共需要48个存储单元。第一个单元的存储地址为100,所以第6个元素占用的最后一个存储单元的地址为100+48-1= 147( -1是因为地址100是第一个存储位置)

5. 将两个长度为N的有序表归并到一个长度为2N的有序表,最少需要比较的次数是( ),最多需要比较的次数是( )。

A.N,2N- 1
B.N-1,2N
C.N,2N
D.N-1,2N-1

A

对于此题而言最少的比较次数是,其中一个有序表的最后一个数小于另一表的的第一 个数, 那么直接合并即可。
当一个表递增一个表递减且递减表时 ,需要比较2N- 1次。

  • 将长度为n的单链表连接在长度为m的单链表之后的算法的时间复杂度为( )。
    A. O(1)
    B. O(n)
    C. O(m)
    D. O(m+n)

4. 非空的循环单链表head的尾结点p满足( )。

A. p->next==head

B. p->next==NULL

C. p==NULL

D. p==head

循环链表就是将链表的最后一个结点指向链表头结点,和循环队列没关系

6. 线性表的顺序存储结构是一种( )存储结构。

A. 随机存取
B. 顺序存取
C. 索引存取
D. 散列存取

7. 顺序表中,插入一个元素所需移动的元素平均数是( )。

A. (n-1)/2
B. n
C. n+1
D. (n+1)/2

8. 在一个单链表中,已知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;

知道前驱结点的时候是不用考虑断链,不知道前驱结点要考虑断链,选C。

9. 在头指针为head且表长大于1的单循环链表中,指针p指向表中某个结点,若p->next->next==head,则( )。

A. p指向头结点
B. p指向尾结点
C. p的直接后继是头结点
D. p的直接后继是尾结点

10. 线性表的逻辑结构是_____,其所含元素的个数称为线性表的_______。

线性结构 长度

11. 串与普通的线性表相比较,它的特殊性体现在( )。

A. 顺序的存储结构
B. 链式存储结构
C. 数据元素是一个字符
D. 数据元素任意

1. 非空的循环单链表head的尾结点(由p所指向题目意思:尾结点的指针域为P)满足( )

A.p ⇾ next == NULL

B.p == NULL

C.p ⇾ next == head 循环回去了

D.p == head 就是空的循环单链表了

2. 在有n个节点的单链表中,删除指定结点的前驱的时间复杂度是( )

A.O(1)
B.O(n)
C.O(n^2)
D.O(n^3)

3.在非空线性链表中由p所指的链节点后面插入一个由q所指的链节点的过程是依次执行动作( )

A.q ⇾ next = p; p ⇾ next = q
B.q ⇾ next = p ⇾ next; p ⇾ next = q
C.q ⇾ next = p ⇾ next; p = q
D.p ⇾ next = g ; q ⇾ next = p

4.在单链表中,指针p指向结点A,若要删除A之后的结点(存在),则指针的操作方式为( )。

A. p->next = p->next->next
B. p=p->next
C. p=p->next->next
D. p->next=p

要在单链表中删除p指向的结点的后继结点,需要将后继结点的后继交给p所指结点的指针域。
具体实现语句为p->next= p->next- >next。

5.在一个单链表H中,若要向表头插入一个由指针P指向的结点,则执行( )。

A. HL=P; P->next= HL;
B. P->next=HL; HL=P;
C. P->next=HL; p=HL;
D. P->next= HL->next; HL->next=P;

根据插入运算的定义,需要修改头指针HL,令其指向结点P,同时结点P的指针域应指向原来的头结点。
修改了头指针HL会影响后面操作,所以必须先将P的指针域指向头结点(P->next=HL),再修改HL (即HL=P). 

6.在长度为n(n> 1)的( )上,删除第一个元素,其时间复杂度为0 (n)。

A.只有首结点指针的不带头结点的循环单链表
B.只有尾结点指针的不带头结点的循环单链表
C.只有尾结点指针的带头结点的循环单链表
D.只有头结点的循环单链表

只有首结点指针的不带头结点的循环单链表删除第一 个元素,
需要遍历整个链表,因此A项的时间复杂度为O (m),BCD三项的时间复杂度都为0(1)。

6. 写出带头结点的双向循环链表L为空表的条件( L->prior=L->next=L) 。

7.非空的循环单链表head的尾结点P满足的条件是( )-不应该是P.rlink?

A. P.link = head
B. P.link= NIL
C. P=NIL
D. P= head

对于循环单链表来说尾结点的指针指向第一个元素。`
`非空的循环(说明首尾相接),所以尾指针不会像普通的单链表尾指针指向空

在这里插入图片描述

双向循环链表中,指针P指向的结点前插入一个由指针Q指向的新节点,修改指针的操作()

在这里插入图片描述

C

双向链表存储时,删除P结点所修改的指针()

在这里插入图片描述

A

2.在一个双链表中 ,删除P结点之后的一个结点的操作是()。

A. p->next = p->next->next; p->next->next->prior=p;
B. p->next->prior=p; p->next= p->next->next;
C. p->next= p->next->next; p->next->prior=p;
D. p->next>next=p->next; p->next->prior=p;
考查双链表中插入操作,要注意保存后继节点。

3. 若某线性表中最常用的操作是在最后一个结点之后插入一个结点和删除最后一个结点,则下面最合适的存储方式是( )。

A.单链表
B.循环双链表
C.单循环链表
D.带有尾指针的单循环链表

在链表中的最后一个结点之后插入结点要知道终端结点的地址。
所以,单链表、单循环链表都不合适,删除最后一个结点要知道终端结点的前驱结点的地址。
所以,带有尾指针的单循环链表不合适,而循环双链表满足条件。

6. 在双向循环链表中,在p所指的结点之后插入指针f所指的新结点,其操作步骤是()。

A. p->next=f; f->prior=p; p->next->prior=f;f->next= p->next
B. P->next=f; p->next->prior=f; f->prior=p;f->next= P->next
C.f->prior=p; f->next=p->next; p->next=f;p->next-prior=f
D. f->prior=p; f->next=p->next; p->next->prior=f; p->next=f

不要断开连接就可以

7. 若某线性表最常用的操作是查找序号i的元素和在末尾插入元素,则选择______存储结构最节省时间。

A. 顺序表
B. 带头结点的循环双链表
C. 单链表
D. 带尾结点的循环单链表

1. 线性表的静态存储结构与顺序存储结构相比,优点是()

A.所有的操作算法实现简单
B.便于随机存取静态存储相当于单链表了,不可能便于存储
C.便于插入和删除
D.便于利用零散的存储空间一开始就固定好大小了

前者好比 单向链表 后者好比 数组
优点:主要是便于数据的 增 删等,对于数据交换频繁的地方有所优势
基础题。静态链表具有链表的插入和删除方便的优点,也不需要移动较多的元素。

2. 需要分配较大空间,插入和删除不需要移动元素的线性表,其存储结构是()

A.单链表
B.静态链表
C.线性链表
D.顺序存储结构

3.静态链表中指针表示的是( )。
A.内存地址
B.数组下标
C.下一元素地址
D.数组地址

静态链表借用一维数组来描述线性链表。数组中的一个分量表示一个结点,
同时使用游标 (指示器cur)代替指针以指示结点在数组中的相对位置。`

带头结点的单链表head为空的条件是(head->next==NULL) 。

在一个单链表中删除p所指结点的后继结点时,应执行以下操作:

q = p->next;
p->next=(q->next);

优质分析解答:
题目说的就是删除p的后继结点.不要把p看作一个孤立的指针,事实上,p是前一个结点指针域.
q = p->next; // q记录欲删除的结点
p = p->next->next; // 跨过欲删除的结点,也可写作 p->next = q->next
free(q); // 释放该结点占用的空间

函数GetElem实现返回单链表的第i个元素,请在空格处将算法补充完整。

int GetElem(LinkList L,int i,Elemtype *e){
LinkList p;int j;
p=L->next;j=1;
while(p&&j<i){
(p=p->next);++j;
}
if(!p||j>i)  return ERROR;
*e=(p->data);
return OK;
}
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值