判断题
1-1
对于顺序存储的长度为N的线性表,访问结点和增加结点的时间复杂度分别对应为O(1)和O(N)。 (1分)
T
1-2
若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用顺序表存储最节省时间。 (2分)
T
1-3
对于顺序存储的长度为N的线性表,删除第一个元素和插入最后一个元素的时间复杂度分别对应为O(1)和O(N)。 (1分)
F
1-4
(neuDS)在顺序表中逻辑上相邻的元素,其对应的物理位置也是相邻的。 (1分)
T
1-5
(neuDS)所谓随机存取,就是通过首地址和元素的位序号值可以在O(1)的时间内找到指定的元素。 (1分)
T
1-6
(neuDS)顺序存储的线性表不支持随机存取。 (1分)
F
1-7
(neuDS)在顺序表上进行插入、删除操作时需要移动元素的个数与待插入或待删除元素的位置无关。 (1分)
F
1-8
在具有N个结点的单链表中,访问结点和增加结点的时间复杂度分别对应为O(1)和O(N)。 (1分)
F
1-9
若用链表来表示一个线性表,则表中元素的地址一定是连续的。 (1分)
F
1-10
将长度分别为m,n的两个单链表合并为一个单链表的时间复杂度为O(m+n)。 (1分)
F
1-11
(neuDS)单链表不是一种随机存取的存储结构。 (1分)
T
选择题
2-1
对于顺序存储的长度为N的线性表,访问结点和增加结点的时间复杂度为:(1分)
2-2
在N个结点的顺序表中,算法的时间复杂度为O(1)的操作是:(2分)
2-3
若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用哪种存储方式最节省时间? (2分)
2-4
顺序表中第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是( )。(2分)
2-5
(neuDS)线性表的顺序存储结构是一种( ) (2分)
2-6
(neuDS)一个顺序表所占用的存储空间大小与( )无关。 (2分)
*2-7
(neuDS)要将一个顺序表{a0,a1,……,an−1}中第i个数据元素ai(0≤i≤n-1)删除,需要移动( )个数据元素。 (2分)
2-8
用数组表示线性表的优点是()。 (2分)
2-9
若长度为n的线性表采用顺序存储结构,那么删除它的第i个数据元素之前,需要它一次向前移动()个数据元素。 (2分)
2-10
若长度为n的线性表采用顺序结构,在第i个数据元素之前插入一个元素,需要它依次向后移动()个元素。 (2分)
2-11
线性表L=(a1, a2 ,……,an )用一维数组表示,假定删除线性表中任一元素的概率相同(都为1/n),则删除一个元素平均需要移动元素的个数是()。 (2分)
2-12
设h
为不带头结点的单向链表。在h
的头上插入一个新结点t
的语句是:(2分)
h=t; t->next=h->next;
t->next=h->next; h=t;
h=t; t->next=h;
t->next=h; h=t;
2-13
在单链表中,若p
所指的结点不是最后结点,在p
之后插入s
所指结点,则执行 (2分)
s->next=p; p->next=s;
s->next=p->next; p=s;
s->next=p->next; p->next=s;
p->next=s; s->next=p;
2-14
带头结点的单链表h
为空的判定条件是: (2分)
h == NULL;
h->next == NULL;
h->next == h;
h != NULL;
2-15
将两个结点数都为N且都从小到大有序的单向链表合并成一个从小到大有序的单向链表,那么可能的最少比较次数是: (2分)
2-16
线性表若采用链式存储结构时,要求内存中可用存储单元的地址 (1分)
2-17
在具有N个结点的单链表中,实现下列哪个操作,其算法的时间复杂度是O(N)? (2分)
2-18
对于一个具有N个结点的单链表,在给定值为x的结点后插入一个新结点的时间复杂度为 (2分)
2-19
链表不具有的特点是: (1分)
2-20
(neuDS)在一个含有n个结点的有序单链表中插入一个新结点,使单链表仍然保持有序的算法的时间复杂度是( )。 (2分)
2-21
将长度为n的单链表连接在长度为m的单链表之后的算法的时间复杂度为( )。 (2分)
2-22
(neuDS)在单链表中,增加一个头结点的最终目的是为了( )。 (2分)
2-23
在单链表中,要删除某一指定结点,必须先找到该结点的()。 (2分)
2-24
以下关于链式存储结构的叙述中,()是不正确的。 (2分)
2-25
线性链表不具有的特点是()。 (2分)
2-26
线性表若采用链式存储结构时,要求内存中可用存储单元的地址()。 (2分)
**2-27
对线性表,在下列情况下应当采用链表表示的是()。 (2分)
2-28
不带表头附加结点的单链表为空的判断条件是头指针head满足条件()。 (2分)
2-29
可以用带表头附加结点的链表表示线性表,也可以用不带头结点的链表表示线性表,前者最主要的好处是()。 (2分)
2-30
对于一非空的循环单链表,h
和p
分别指向链表的头、尾结点,则有:(2分)
p->next == h
p->next == NULL
p == NULL
p == h
2-31
在双向循环链表结点p
之后插入s
的语句是: (3分)
p->next=s; s->prior=p; p->next->prior=s ; s->next=p->next;
p->next->prior=s; p->next=s; s->prior=p; s->next=p->next;
s->prior=p; s->next=p->next; p->next=s; p->next->prior=s;
s->prior=p; s->next=p->next; p->next->prior=s; p->next=s;
2-32
在双向链表存储结构中,删除p
所指的结点,相应语句为:(3分)
p->prior=p->prior->prior; p->prior->next=p;
p->next->prior=p; p->next=p->next->next;
p->prior->next=p->next; p->next->prior=p->prior;
p->next=p->prior->prior; p->prior=p->next->next;
2-33
某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用什么存储方式最节省运算时间? (2分)
2-34
若某表最常用的操作是在最后一个结点之后插入一个结点或删除最后一个结点。则采用哪种存储方式最节省运算时间? (2分)
**2-35
将线性表La和Lb头尾连接,要求时间复杂度为O(1),且占用辅助空间尽量小。应该使用哪种结构? (2分)
2-36
(neuDS)在链表中若经常要删除表中最后一个结点或在最后一个结点之后插入一个新结点,则宜采用()存储方式。 (2分)
2-37
非空的循环单链表head的尾结点(由p所指向)满足()。 (2分)
2-38
在循环双链表的p所指结点之前插入s所指结点的操作是()。 (2分)
2-39
若某表最常用的操作是在最后一个结点之后插入一个结点或删除最后一个结点,则采用()存储方式最节省运算时间。 (2分)
2-40
某线性表最常用的操作是在最后一个结点之后插入一个结点或删除第一个结点,故采用()存储方式最节省运算时间。 (2分)
2-41
在一个长度为n(n>1)的单链表上,设有头和尾两个指针,执行()操作与链表的长度有关。 (2分)
2-42
如果对线性表的运算只有4种,即删除第一个元素,删除最后一个元素,在第一个元素前面插入新元素,在最后一个元素的后面插入新元素,则最好使用()。 (2分)
2-43
如果对线性表的运算只有2种,即删除第一个元素,在最后一个元素的后面插入新元素,则最好使用()。 (2分)
**2-44
在双向循环链表中,在p所指的结点之后插入s指针所指的结点,其操作是()。 (2分)
2-45
带表头附加结点的双向循环链表为空的判断条件是头指针L满足条件()。 (2分)
2-46
循环链表的主要优点是()。 (2分)
2-47
已知指针ha和hb分别是两个单链表的头指针,下列算法将这两个链表首尾相连在一起,并形成一个循环链表(即ha的最后一个结点链接hb的第一个结点,hb的最后一个结点指向ha),返回该循环链表的头指针。请将该算法补充完整。 (4分)
typedef struct node{
ElemType data;
struct node *next;
}LNode;
LNode *merge(LNode *ha, LNode *hb) {
LNode *p=ha;
if (ha==NULL || hb==NULL) {
cout<<”one or two link lists are empty!”<next!=NULL )
p=p->next;
p->next=hb;
while ( p->next!=NULL )
p=p->next;
__________
}
2-48
设有一个双向循环链表,每个结点中除有left、data和right三个域外,还增设了一个访问频度域freq,freq 的初值为零。每当链表进行一次查找操作后,被访问结点的频度域值便增1,同时调整链表中结点的次序,使链表按结点频度值非递增有序的次序排列。下列算法是符合上述要求的查找算法,请将该算法补充完整。 (4分)
typedef struct Node{
ElemType data;
struct Node *left;
struct Node *right;
intfreq;
} DNode;
DNode *locate_DList(DNode *&L, ElemType x)
{ //在表L中查找元素x,查找成功则调整结点频度域值及结点位置,并返回结点地址;
//查找不成功则返回NULL
DNode *p=L, *q;
if (L==NULL) return NULL;
while (p->data!=x && p->right!=L) p=p->right;
if (p->data!=x) return NULL;
p->freq++;
q=p->left;
while (q!=L && q->freq<=p->freq) q=q->left; //查找插入位置
if (q==L && q->freq<=p->freq) { //需将p结点插在头结点L前
//将p结点先从链表中摘下来
p->left->right=p->right;
p->right->left=p->left;
//将p结点插在L结点前
p->right=L;
p->left=L->left;
L->left->right=p;
L->left=p;
L=p;
}
else if (q!=p->left ) { //若q不是p的前驱,则需调整结点位置,将p结点插在q结点后
//将p结点先从链表中摘下来
p->left->right=p->right;
p->right->left=p->left;
______________ //将p结点插在q结点后
}
return p;
}
2-49
与单链表相比,双链表的优点之一是()。 (2分)
***2-50
采用多项式的非零项链式存储表示法,如果两个多项式的非零项分别为N1和N2个,最高项指数分别为M1和M2,则实现两个多项式相乘的时间复杂度是:(2分)