试卷
第二章 线性表
一.判断题
- 线性表的逻辑顺序与物理顺序总是一致的。( )
2. 线性表中每个元素都有一个直接前驱和一个直接后继。( )
3. 线性表的插入、删除总是伴随着大量数据的移动。( )
4. 顺序存储方式只能用于存储线性结构。( )
5. 所谓静态链表就是一直不发生变化的链表。( )
6. 线性表的链式存储结构的特点是用一组任意的存储单元存储线性表的数据元素。( )
7. 线性表中的元素可以是各种各样的,但同一线性表中的数据元素具有相同的特性,因此是属于同一数据对象。( )
8. 在线性表的顺序存储结构中,逻辑上相邻的两个元素但在物理位置上并不一定相邻。( )
9. 取线性表的第i个元素的时间同i的大小有关。( )
10. 在单链表中,要取得某个元素,只要知道该元素的指针即可,因此,单链表是随机存取的存储结构。( )
11. 静态链表既有顺序存储的优点,又有链式存储的优点。所以,它存取表中第i个元素的时间与i无关。( )
12. 静态链表与动态链表在元素的插入、删除运算上类似,不需要做元素的移动。( )
在n个结点的顺序表中,求第i个结点的直接前驱(2≤i≤n)算法的时间复杂度是O(1)。
在n个结点的顺序表中,访问第i个结点(1≤i≤n)算法的时间复杂度是O(1)。
在n个结点的单链表中,求第i个结点的直接前驱(2≤i≤n)算法的时间复杂度是O(1)。
在n个结点的单链表中,访问第i个结点(1≤i≤n)算法的时间复杂度是O(1)。
√√××
二.选择题
- 线性表是________。
A. 一个有限序列,可以为空 B. 一个有限序列,不能为空
C. 一个无限序列,可以为空 D. 一个无限序列,不能为空 - 线性表L=(a1,a2,……an),下列说法正确的是________。
A.每个元素都有一个直接前驱和一个直接后继
B.线性表中至少有一个元素
C.表中诸元素的排列必须是由小到大或由大到小
D.除第一个和最后一个元素外,其余每个元素都有一个且仅有一个直接前驱和直接后继。 - 一个顺序表第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是________。
A.110 B.108 C.100 D.120 - 向一个有127个元素的顺序表中插入一个新元素并保持原来顺序不变,平均要移动的元素个数为________。
A.8 B.63.5 C.63 D.7
在一个有127个元素的顺序表中删除一个元素并保持原来顺序不变,平均要移动的元素个数为________。C
8
63.5
63
7
- 在n个结点的顺序表中,算法的时间复杂度是O(1)的操作是________。
A.访问第i个结点(1≤i≤n)和求第i个结点的直接前驱(2≤i≤n)
B.在第i个结点后插入一个新结点(1≤i≤n)
C.删除第i个结点(1≤i≤n)
D.将n个结点从小到大排序
- 在一个长度为n的顺序表中,在第i个元素(1≤i≤n+1)之前插入一个新元素时需向后移动________个元素。
A.n-i B.n-i+1 C.n-i-1 D.i
在一个长度为n的顺序表中,删除第i个元素(1≤i≤n)时需向前移动________个元素。
A.n-i B.n-i+1
C.n-i-1 D.i A
在一个长度为n的顺序表中,在第i个元素(1≤i≤n+1)之前插入一个新元素时,需向后移动________个元素。
A.n-i B.n-i+1
C.n-i-1 D.i B - 对于顺序存储的线性表,设其长度为n,在任何位置上插入或删除操作都是等概率的。删除一个元素时所需移动元素次数的期望值为______。
A. n/2 B. (n+1)/2 C. (n-1)/2 D. n
对于顺序存储的线性表,设其长度为n,在任何位置上插入或删除操作都是等概率的。插入一个元素时所需移动元素次数的期望值为______。A
n/2
(n+1)/2
(n-1)/2
n
- 链接存储的存储结构所占存储空间________。
A.分两部分,一部分存放结点值,另一部分存放表示结点间关系的指针
B.只有一部分,存放结点值
C.只有一部分,存储表示结点间关系的指针
D.分两部分,一部分存放结点值,另一部分存放结点所占单元数 - 线性表采用链式存储时,其地址______。
A. 必须是连续的 B. 部分地址必须是连续的
C. 一定是不连续的 D. 连续与否均可以 - 单链表的存储密度________。
A.大于1 B.等于1 C.小于1 D.不能确定 - 设单链表中指针p指向结点A,若要删除A之后的结点(若存在),则需修改指针的操作为________。
A.p->next=p->next->next B.p=p->next
C.p=p->next->next D.p->next=p - 设单链表中指针p指向结点A之前,若要插入一结点s在A之前,则需修改指针的操作为________。
A.s->next=p->next; p->next=s; B.p->next=s; s->next=p->next;
C.p=p->next->next; D.s->next=p->next; - 在单链表中,要将s所指结点插入到p所指结点之后,其语句应为________。
A.s->next=p+1; p->next=s; B.(*p).next=s; (*s).next=(*p).next;
C.s->next=p->next; p->next=s->next; D.s->next=p->next; p->next=s; - 在双向链表存储结构中,删除p所指的结点时须修改指针________。
A.p->next->prior=p->prior; p->prior->next=p->next;
B.p->next=p->next->next; p->next->prior=p;
C.p->prior->next=p; p->prior=p->prior->prior;
D.p->prior=p->next->next; p->next=p->prior->prior; - 在双向循环链表中,在p指针所指的结点后插入q所指向的新结点,其修改指针的操作是__ ______。
A.p->next=q; q->prior=p; p->next->prior=q; q->next=q;
B.p->next=q; p->next->prior=q; q->prior=p; q->next=p->next;
C.q->prior=p; q->next=p->next; p->next->prior=q; p->next=q;
D.q->prior=p; q->next=p->next; p->next=q; p->next->prior=q; - 将两个各有n个元素的有序表归并成一个有序表,其最少的比较次数是________。
A.n B.2n-1 C.2n D.n-1 - 将两个各有n1和n2个元素的有序表(递增)归并成一个有序表,仍保持其递增顺序,则最少的比较次数是________。
A.n1 B.n2 C.n1+n2-1 D.min(n1,n2) - 能在O(1)时间内访问线性表的第i个元素的结构是________。
A. 顺序表 B. 单链表 C. 单向循环链表 D. 双向链表 - 单链表中,增加一个头结点的目的是________。
A. 使链表至少有一个结点 B. 标识表结点中首结点的位置
C. 方便运算的实现 D. 说明单链表是线性表的链式存储 - 若有指定的n个元素,则由这n个元素建立一个有序单链表的时间复杂度的量级是________。
A.O(1) B.O(n) C.O(n2) D.O(nlog2n) - 以下说法错误的是________。
A.求表长、定位这两种运算在采用顺序存储结构时实现的效率不比采用链式存储结构时实现的效率低
B.顺序存储的线性表可以随机存取
C.由于顺序存储要求连续的存储区域,所以在存储管理上不够灵活
D.线性表的链式存储结构优于顺序存储结构 - 线性表L在________情况下适用于使用链式结构实现。
A.需经常修改L中的结点值 B.需不断对L进行删除插入
C.L中含有大量的结点 D.L中结点结构复杂 - 链表不具有的特点是________。
A.插入、删除不需要移动元素 B.可随机访问任一元素
C.不必事先估计存储空间 D.所需空间与线性长度成正比
- 某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用________存储方式最节省运算时间。
A.单链表 B.仅有头指针的单循环链表
C.双链表 D.仅有尾指针的单循环链表
已知单链表的头指针变量为head,且该链表不带头结点,则该链表的判空条件是________。A
A.head==NULL B.Head->next==NULL
C.Head->next==head D.Head!=NULL
某线性表中最常用的操作是存取第i个元素及其前驱的值,则采用________存储方式最省时间。A
A.顺序表 B.带头结点的单向链表
C.带头指针的单向循环链表 D.带头指针的双向循环链表
某线性表中最常用的操作是存取序号为i的元素和在最后进行插入和删除,则采用________存储方式时间性能最好。D
A.双向链表 B.双向循环链表
C.单向循环链表 D.顺序表
在链表中最常用的操作是删除表中最后一个结点和在最后一个结点之后插入一个元素,则采用________存储方式最节省运算时间。D
A带头指针的单向循环链表 B.双向链表
C.带尾指针的单向循环链表 D.带头指针的双向循环链表
- 静态链表中指针表示的是________。
A.下一元素的地址 B.内存储器的地址
C.下一元素在数组中的位置 D.左链或右链指向的元素的地址
三.填空题
- 在顺序表中插入或删除一个元素,需要平均移动__( )__元素,具体移动的元素个数与 __( )__有关。
- 在单链表中两个结点之间插入一个新结点需修改的指针共__( )__个,在双向链表中两个结点之间插入一个新结点需修改的指针共__( )__个。
- 从任何一个结点开始都能成功查找其它结点的单链表是__( )__表。
- 有一个含头结点的单循环链表,头指针为head,则判断其是否为空的条件为:__( )__。
- 若指定有n个元素的向量,则建立一个有序单链表的时间复杂性度是__( )__。
- 为了最快的存取某元素,宜采用__( )__存储结构,为了方便地插入一个元素,宜采用__( )__存储结构。
- 下面算法的功能是在单链表中P所指结点之前插入一个S所指结点,请补充完整。
单链表的存储结构为:
typedef struct Node {
ElemType data;
struct DuLNode * next;
}LNode,* LinkList;
s->next=__ _( )___;
p->next=s;
m=p->data;
p->data=__ _( )___;
s->data= __ _( )___; - 下面是在不带头结点的单链表head的第一个结点之前插入一个新结点的算法,请补充完整。
单链表的存储结构为:
typedef struct Node {
ElemType data;
struct DuLNode * next;
}LNode,* LinkList;
void InsertNode(LinkList &head, ElemType x)
{ s=( LNode * )malloc(sizeof(LNode));
s->data=x;
__ _( )___;
__ _( )___;
} - 一元稀疏多项式以循环单链表按降幂排列,结点有三个域,系数域coef,指数域exp和指针域next。现对链表求一阶导数,链表的头指针为ha,头结点的exp域为-1,请将下列算法补充完整:
derivative(ha) {
q=ha;
pa=ha->next;
while( pa!=ha ) {
if(pa->exp==0) { q->next=pa->next; free(pa); pa= q->next; }
else { pa->coef=__( )__; pa->exp=__( )__; q=pa; pa= pa->next; }
}
}
10. 以下程序的功能是实现带附加头结点的单链表数据结点的逆序连接,请填空完善之。
void reverse(pointer h){
/* h为附加头结点指针*/
pointer p,q;
p=h->next; h->next=NULL;
while(__(1)__)
{q=p;p=p->next;q->next=h->next;h->next=__(2)__;}
}
四.算法应用题
1. 线性表具有两种存储方式,即顺序方式和链接方式。现有一个具有五个元素的线性表L={23,17,47,05,31},若它以链接方式存储在下列100~119号地址空间中,每个结点由数据(占2个字节)和指针(占2个字节)组成,如下所示:
05 | U | 17 | X | 23 | V | 31 | Y | 47 | Z | |
^ | ^ | |||||||||
100 | 120 |
其中指针X,Y,Z的值分别为多少?该线性表的首结点起始地址为多少?末结点的起始地址为多少?
参考答案:
一. 判断题:
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
× | × | × | × | × | √ | √ | × | × | × | × | √ |
二. 选择题:
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
A | D | B | B | A | B | C | A | D | C |
11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 |
A | A | D | A | C | A | D | A | C | C |
21 | 22 | 23 | 24 | 25 | |||||
D | B | B | D | C |
三. 填空题
1. 一半 插入或删除元素的位置
2. 2 4
3. 循环链(表)
4. head->next==head
5. O(n2)
6. 顺序 链式
7. p->next
s->data
m
8. s->next=head
head=s
9. (pa->coef)*(pa->exp) pa->exp-1
10. p!=NULL q
四. 算法应用题
1.
112 | 116 | 104 | 0 | 100 | |||||
05 | U | 17 | X | 23 | V | 31 | Y | 47 | Z |
100 | 102 | 104 | 106 | 108 | 110 | 112 | 114 | 116 | 118 |
指针X,Y,Z的值分别为:116,0,100;
该线性表的首结点起始地址为108;
末结点的起始地址为112。
解析:
判断:
1 逻辑顺序 :连续 物理顺序:顺序表连续 链表不连续
2 反例 首尾
3 链表不是
4 顺序存储方式是将数据元素按照其逻辑顺序依次存储在一片连续的存储空间中。对于非线性结构,如树或图,顺序存储方式可以通过一些转换或者抽象来实现。例如,在树的顺序存储中,可以使用数组来表示树的结点,并通过数组中元素的位置关系来表示结点之间的父子关系。
5 静态链表是一种使用数组实现的链表结构,它可以用于模拟动态链表的特性。在静态链表中,使用数组来表示链表的结点,并通过数组中元素的索引来表示结点之间的连接关系。插入和删除操作可以通过修改指针区的指针来调整结点之间的连接关系。查找操作可以通过遍历链表的方式,按照指针字段的指示逐个访问结点(11题)。
6 7 略
8 看4
9 链表
10 11 12 略
选择:
1 线性表是数据结构中最基本、最常用的一种结构,它是具有相同数据类型的 n 个数据元素的有限序列。
2-5 略
6 7 可以带个n和i的值来看
8 9 略
10 存储密度是指数据结构中实际存储的元素所占用的存储空间与总的存储空间的比例。它反映了数据结构在存储数据时的空间利用效率。假设单链表数据元素本身的存储量为N,指针域所占的存储量为M,则存储密度为:N/(N+M)小于1。
11-15 可以自己在草稿纸上画画看看
16-17 每个都要比较,选最小的。
18-19 略
20 建立一个链表是每次输入一个元素然后和已有的链表中的元素比较,而不是先是先顺序输入全部元素,然后再用优化排序算法最后再存入链表这样的时间复杂度为O(),数量级为O(
)。因此对n个元素建立有序单链表的时间复杂度的量级可以表示为:O(1 + 2 + 3 + ... + n) = O(n^2)。
21 D哪个优先级高要实际情况。
22 23 略
24 在仅有尾指针的单循环链表中,尾指针可以直接指向链表的最后一个节点,这样在插入一个元素到最后一个元素之后时,只需要修改尾指针的指向,而不需要遍历整个链表来找到最后一个节点。同样,删除第一个元素时,只需要修改头指针的指向,而不需要遍历链表来找到第一个节点。这样可以大大减少运算时间,提高操作效率。
25 略
填空
1 略
2 略
3 略
4 注意循环链表
5 注意有序
6-10 略
应用
略