1-1
在具有N個結點的單鏈表中,訪問結點和增加結點的時間復雜度分別對應為O(1)和O(N)。
(1分)
T
F
作者
DS課程組
單位
浙江大學
1-2
若用鏈表來表示一個線性表,則表中元素的地址一定是連續的。
(1分)
T
F
作者
陳越
單位
浙江大學
1-3
將長度分別為m,n的兩個單鏈表合並為一個單鏈表的時間復雜度為O(m+n)。
(1分)
T
F
作者
干紅華
單位
浙江大學
1-4
(neuDS)單鏈表不是一種隨機存取的存儲結構。
(1分)
T
F
作者
徐婉珍
單位
設h為不帶頭結點的單向鏈表。在h的頭上插入一個新結點t的語句是:
(2分)
A.
h=t; t->next=h->next;
B.
t->next=h->next; h=t;
C.
h=t; t->next=h;
D.
t->next=h; h=t;
作者
DS課程組
單位
浙江大學
2-2
在單鏈表中,若p所指的結點不是最后結點,在p之后插入s所指結點,則執行
(2分)
A.
s->next=p; p->next=s;
B.
s->next=p->next; p=s;
C.
s->next=p->next; p->next=s;
D.
p->next=s; s->next=p;
作者
DS課程組
單位
浙江大學
2-3
帶頭結點的單鏈表h為空的判定條件是:
(2分)
A.
h == NULL;
B.
h->next == NULL;
C.
h->next == h;
D.
h != NULL;
作者
DS課程組
單位
浙江大學
2-4
將兩個結點數都為N且都從小到大有序的單向鏈表合並成一個從小到大有序的單向鏈表,那么可能的最少比較次數是:
(2分)
A.
1
B.
N
C.
2N
D.
NlogN
作者
DS課程組
單位
浙江大學
2-5
線性表若采用鏈式存儲結構時,要求內存中可用存儲單元的地址
(1分)
A.
必須是連續的
B.
連續或不連續都可以
C.
部分地址必須是連續的
D.
一定是不連續的
作者
DS課程組
單位
浙江大學
2-6
在具有N個結點的單鏈表中,實現下列哪個操作,其算法的時間復雜度是O(N)?
(2分)
A.
在地址為p的結點之后插入一個結點
B.
刪除開始結點
C.
遍歷鏈表和求鏈表的第i個結點
D.
刪除地址為p的結點的后繼結點
作者
DS課程組
單位
浙江大學
2-7
對於一個具有N個結點的單鏈表,在給定值為x的結點后插入一個新結點的時間復雜度為
(2分)
A.
O(1)
B.
O(N/2)
C.
O(N)
D.
O(N
2
)
作者
DS課程組
單位
浙江大學
2-8
鏈表不具有的特點是:
(1分)
A.
插入、刪除不需要移動元素
B.
方便隨機訪問任一元素
C.
不必事先估計存儲空間
D.
所需空間與線性長度成正比
作者
DS課程組
單位
浙江大學
2-9
(neuDS)在一個含有n個結點的有序單鏈表中插入一個新結點,使單鏈表仍然保持有序的算法的時間復雜度是( )。
(2分)
A.
O(1)
B.
O(log
2
n)
C.
O(n)
D.
O(n
2
)
作者
徐婉珍
單位
廣東東軟學院
2-10
將長度為n的單鏈表連接在長度為m的單鏈表之后的算法的時間復雜度為( )。
(2分)
A.
O(1)
B.
O(m)
C.
O(n)
D.
O(n+m)
作者
楊斌
單位
棗庄學院
2-11
(neuDS)在單鏈表中,增加一個頭結點的最終目的是為了( )。
(2分)
A.
使單鏈表至少有一個結點
B.
方便運算的實現
C.
標識表結點中首結點的位置
D.
說明單鏈表是線性表的鏈式存儲
作者
徐婉珍
單位
廣東東軟學院
2-12
在單鏈表中,要刪除某一指定結點,必須先找到該結點的()。
(2分)
A.
直接前驅
B.
自身位置
C.
直接后繼
D.
直接后繼的后繼
作者
嚴冰
單位
浙江大學城市學院
2-13
以下關於鏈式存儲結構的敘述中,()是不正確的。
(2分)
A.
結點除自身信息外還包括指針域,因此存儲密度小於順序存儲結構
B.
邏輯上相鄰的結點物理上不必鄰接
C.
可以通過計算直接確定第i個結點的存儲地址
D.
插入、刪除運算操作方便,不必移動結點
作者
嚴冰
單位
浙江大學城市學院
2-14
線性鏈表不具有的特點是()。
(2分)
A.
隨機訪問
B.
不必事先估計所需存儲空間大小
C.
插入與刪除時不必移動元素
D.
所需空間與線性長度成正比
作者
嚴冰
單位
浙江大學城市學院
2-15
線性表若采用鏈式存儲結構時,要求內存中可用存儲單元的地址()。
(2分)
A.
必須是連續的
B.
部分地址必須是連續的
C.
一定是不連續的
D.
連續或不連續都可以
作者
嚴冰
單位
浙江大學城市學院
2-16
對線性表,在下列情況下應當采用鏈表表示的是()。
(2分)
A.
經常需要隨機地存取元素
B.
經常需要進行插入和刪除操作
C.
表中元素需要占據一片連續的存儲空間
D.
表中的元素個數不變
作者
嚴冰
單位
浙江大學城市學院
2-17
不帶表頭附加結點的單鏈表為空的判斷條件是頭指針head滿足條件()。
(2分)
A.
head==NULL
B.
head->next==NULL
C.
head->next== head
D.
head!=NULL
作者
嚴冰
單位
浙江大學城市學院
2-18
可以用帶表頭附加結點的鏈表表示線性表,也可以用不帶頭結點的鏈表表示線性表,前者最主要的好處是()。
(2分)
A.
可以加快對表的遍歷
B.
使空表和非空表的處理統一
C.
節省存儲空間
D.
可以提高存取表元素的速度
6-1 帶頭結點的單鏈表就地逆置 (10分)
本題要求編寫函數實現帶頭結點的單鏈線性表的就地逆置操作函數。L是一個帶頭結點的單鏈表,函數ListReverse_L(LinkList &L)要求在不新開辟節點的前提下將單鏈表中的元素進行逆置,如原單鏈表元素依次為1,2,3,4,則逆置后為4,3,2,1。
函數接口定義:
void ListReverse_L(LinkList &L);
其中 L 是一個帶頭結點的單鏈表。
裁判測試程序樣例:
```
//庫函數頭文件包含
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
//函數狀態碼定義
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;
typedef int ElemType; //假設線性表中的元素均為整型
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
Status ListCreate_L(LinkList &L,int n)
{
LNode *rearPtr,*curPtr; //一個尾指針,一個指向新節點的指針
L=(LNode*)malloc(sizeof (LNode));
if(!L)exit(OVERFLOW);
L->next=NULL; //先建立一個帶頭結點的單鏈表
rearPtr=L; //初始時頭結點為尾節點,rearPtr指向尾巴節點
for (int i=1;i<=n;i++){ //每次循環都開辟一個新節點,並把新節點拼到尾節點后
curPtr=(LNode*)malloc(sizeof(LNode));//生成新結點
if(!curPtr)exit(OVERFLOW);
scanf("%d",&curPtr->data);//輸入元素值
curPtr->next=NULL; //最后一個節點的next賦空
rearPtr->next=curPtr;
rearPtr=curPtr;
}
return OK;
}
void ListReverse_L(LinkList &L);
void ListPrint_L(LinkList &L){
//輸出單鏈表
LNode *p=L->next; //p指向第一個元素結點
while(p!=NULL)
{
if(p->next!=NULL)
printf("%d ",p->data);
else
printf("%d",p->data);
p=p->next;
}
}
int main()
{
LinkList L;
int n;
scanf("%d",&n);
if(ListCreate_L(L,n)!= OK) {
printf("表創建失敗!!!\n");
return -1;
}
ListReverse_L(L);
ListPrint_L(L);
return 0;
}
/* 請在這里填寫答案 */
```
輸入格式:
第一行輸入一個整數n,表示單鏈表中元素個數,接下來一行共n個整數,中間用空格隔開。
輸出格式:
輸出逆置后順序表的各個元素,兩個元素之間用空格隔開,最后一個元素后面沒有空格。
輸入樣例:
4
1 2 3 4
輸出樣例:
4 3 2 1
7-1 兩個有序鏈表序列的合並 (20分)
已知兩個非降序鏈表序列S1與S2,設計函數構造出S1與S2合並后的新的非降序鏈表S3。
輸入格式:
輸入分兩行,分別在每行給出由若干個正整數構成的非降序序列,用−1表示序列的結尾(−1不屬於這個序列)。數字用空格間隔。
輸出格式:
在一行中輸出合並后新的非降序鏈表,數字間用空格分開,結尾不能有多余空格;若新鏈表為空,輸出NULL。
輸入樣例:
1 3 5 -1
2 4 6 8 10 -1
輸出樣例:
1 2 3 4 5 6 8 10
7-2 兩個有序鏈表序列的交集 (20分)
已知兩個非降序鏈表序列S1與S2,設計函數構造出S1與S2的交集新鏈表S3。
輸入格式:
輸入分兩行,分別在每行給出由若干個正整數構成的非降序序列,用−1表示序列的結尾(−1不屬於這個序列)。數字用空格間隔。
輸出格式:
在一行中輸出兩個輸入序列的交集序列,數字間用空格分開,結尾不能有多余空格;若新鏈表為空,輸出NULL。
輸入樣例:
1 2 5 -1
2 4 5 8 10 -1
輸出樣例:
2 5