2.2第二章作業2-鏈表(1)


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM