簡答題:
- 資料結構研究的主要内容
資料的邏輯結構;
資料的存儲結構;
定義在結構中資料的操作;
-
根據資料元素之間邏輯關系的不同,資料結構分為幾類?
常用的儲存方法有幾種?
邏輯區分:
集合結構;線性結構;樹形結構;圖形結構
儲存方法:
順序儲存;鍊式存儲;散列存儲;索引存儲
- 單連結清單帶頭結點 和不帶的差別
操作:插入删除中,帶頭結點的始終不用修改頭指針指向,而不帶頭結點的
有時需要,是以不帶頭結點的還需要進行是否為第一個結點的判斷。
結構:無論是否為空連結清單,帶頭結點的頭結點始終存在
- 兩棧共享,寫出棧1、棧2入棧出棧的語句,和棧空棧滿的語句。
将編号為0和1的兩個棧存放于一個數組空間V[m]中,棧底分别處于
數組的兩端。當第0号棧的棧頂指針top[0]等于-1時該棧為空,當第
1号棧的棧頂指針top[1]等于max時該棧為空。
兩個棧均從兩端向中間增長。
-----------------------------------------------------------
入棧:
int push(stack S ,int i,int e)
{//i為棧号,i=0表示左棧,i=1為右棧,e是入棧元素。入棧成功傳回1,失敗傳回0
if(i<0||i>1)
{
cout<<"棧号輸入錯誤"<<endl;
exit(0);
}
if(isFull(S)==1)
{
cout<<"棧滿"<<endl;
return(0);
}
switch(i)
{
case 0: S.V[++S.top[0]]=x;
return(1);
break;
case 1: S.V[--S.top[1]]=x;
return(1);
}
-----------------------------------------------------------
ElemType pop(stack S,int i)
{//i代表棧号,i=0時為左棧,i=1時為右棧。退棧成功時傳回退棧元素,否則傳回-1
if(i<0 || i>1)
{
cout<<"棧号輸入錯誤"<<endl;
exit(0);
}
switch(i)
{
case 0: if(S.top[0]==-1)
{
cout<<"棧空"<<endl;
return (-1);
}
else return(S.V[S.top[0]--]);
case 1: if(S.top[1]==max)
{
cout<<“棧空”<<endl;
return(-1);
}
else return(S.V[S.top[1]++]);
}
-----------------------------------------------------------
棧空:
int isEmpty(stack S)
{
return (S.top[0]==-1 && S.top[1]==max);
}
-----------------------------------------------------------
棧滿:
int isFull(stack S ){
if (S.top[1]-S.top[0]==1)
return 1;
else
return 0;
}
- 寫出存取結構的含義及種類
與存儲結構不同,存儲結構是實際計算機上的儲存表示
存取結構是在一個資料結構上對查找操作時間性能的一種描述
随機存取:數組【索引直接映射】
順序存取:連結清單之類的
- 判斷循環隊列隊滿隊空的條件是什麼
空:
rear==front
滿:
front==(rear+1)%size
- 二叉樹與度為2的數之間的差别是什麼
1、度為2的樹是不區分左子樹和右子樹.
而二叉樹是要分左子樹和右子樹的.(也就是沒有之後的順序概念)
2、度為2的數不包含空樹,而二叉樹是可以有空樹的.
- 給定一組關鍵碼建構哈夫曼樹和哈夫曼編碼
- 給定二叉樹的前/後/層序周遊加中序周遊,确定一顆唯一形态的二叉樹
- 給定一個無向連通網,用prim算法或者kruskal算法寫出最小生成樹
有關圖的介紹部落格:轉載
一般邊稠密用prim
不然用kruskal
但是在數量級小的情況下差別并不會很大
- 給一個有向圖,利用Dijkstra算法寫出其最小生成樹
- 圖的主要儲存結構有哪兩種。在何種情況下選擇哪種?
- 對于稠密圖和稀疏圖,用鄰接矩陣和鄰接表哪個好一點?
稀疏圖鄰接表
稠密圖鄰接矩陣
- 給定圖的鄰接表寫出圖的深度優先周遊和廣度優先周遊
- 看圖寫出鄰接矩陣
- 給一組關鍵碼集合,畫出建構平衡二叉樹的過程
-
給一組關鍵碼集合,用除留餘數法設計散列函數求出關鍵碼位址,并用二次探測法處理沖突。
——————————————————————————
小測1:
-
1 用帶頭結點的單連結清單表示隊長大于1的隊列時,其隊頭指針指向隊頭結點,隊尾指針指向隊尾結點,則在進行删除操作時:(A)
A、僅修改隊頭指針
B、僅修改隊尾指針
C、隊頭隊尾指針都要修改
D、隊頭隊尾指針都可能要修改
-
2 任何一個無向聯通網的最小生成樹:(A)
A、有一棵或多棵
B、隻有1棵
C、一定有多棵
D、可能不存在
-
3 關鍵路徑是時間結點網絡中:(A)
A 源點到彙點的最長路徑
B 最長回路
C 源點到彙點最短路徑
D 最短回路
-
4 以資料集{4,5,6,7,10,12,18}為葉結點權值所構造的哈夫曼樹,其帶權路徑長度為:(C)
哈夫曼樹的一個解釋
A 155
B 160
C 165
D 170
哈夫曼樹的建構:
從序列中取出兩個最小的數,将它們所代表的子樹連結,并将
加和以後的根權值放回序列中繼續參加排序
如:{4 5 6 7 10 12 18}
{6 7 9 10 12 18}
{9 10 12 13 18}
{12 13 18 19}
{18 19 25}
{25 37}
{63}
這個過程同時也映射着哈夫曼樹的構造(元素加和對應樹的合并)
-
5 若需要利用形式參數來直接通路修改實參的值,則應該将形參說明為( )參數(C)
A 值參數
B 實位址
C 指針
D 位址參數
-
6 假設以行序為主序儲存二維數組
A=array【1…100 , 1…100】設每個數組元素占兩個儲存單元,基位址為10,則LOC[5,5]=( )(A)
A 818
B 808
C 1010
D 1020
先看是否設坑:序列不從0開始,像這道題就是從1開始
(10)
| 1 | 2 3 4 5 6 ... 100
2
3
4
5
.
.
.
100
思路:不看開始的這個1,就是填滿前四位置400加5,然後因為從1,1
開始算,是以是加了404單元:
10+404X2=818
選擇A
-
7 若長度為n的線性表采用順序存儲結構,在其第i個位置插入一個新元素的算法時間複雜度為:A
A O(n)
B O(0)
C O (1)
D O(n^2)
線性表在插入操作的過程中需要對元素進行位移
時間複雜度的期望是O(n)
-
8 判斷一個有向圖是否存在回路,可以用:(B )
A 深度優先周遊算法
B 拓撲排序
C Djikstra方法
D 廣度優先周遊方法
拓撲排序的依據是結點之間的指向,若A->B,則A在整個排序序列中
被規定必須在B前面,是以明顯可以看出,如果存在回路,則無法确定
整個順序,會變成死循環的向下走,是以拓撲排序能成功的前提條件
是沒有回路,也即是拓撲排序算法 可以用來判斷有向圖是否存在回路
10、若對n階對稱矩陣A以行序為主序方式将其下三角形的元素(包括主對角線上所有元素)依次存放于一維數組B[1…(n(n+1))/2]中,則在B中确定aij(i
A、 j(j-1)/2+i
B、 i(i-1)/2+j
C、 i(i+1)/2+j
D、 j(j+1)/2+i
正确答案: B
i是行的位置下标(y),j是列的位置下标(x),
下三角矩陣中:i>=j 反之上三角中:i<=j
** **
n階對稱矩陣中的元素滿足下述條件:aij=aji,(1<=i,j<=n)。
對稱矩陣中的每一對資料元素可以共用一個存儲空間,是以可以将n2個
元素壓縮存儲到n(n+1)/2個元的空間中,即可以一維數組儲存。
假設用一維數組B[n(n+1)/2]作為對稱矩陣A的存儲結構,則B[k]和
矩陣元素aij的下标i、j的對應關系為:
當i>j時,k=i(i-1)/2+i;
當i<j時,k=j(j-1)/2+i;
(以上公式是針對aij和aji儲存在同一個單元中的情況)
由上可知,正确答案應該是B
11、遞歸過程或函數調用時,處理參數及傳回位址需要用一種( )的資料結構。
A、 棧
B、 隊列
C、 多元數組
D、 線性表
正确答案: A
在多函數嵌套和遞歸的時候,傳回的時候應該是後調用的先傳回
從邏輯性上判斷根據這種規則可以得出使用棧作為資料結構比較合理
12、串是一種特殊的線性表,其特殊性展現在( )。
A、 資料元素是字元
B、 順序存儲
C、 鍊式存儲
D、 邏輯結構是線性結構
正确答案: A
字元串。。。。。阿巴阿巴
13、順序存儲,存儲單元的位址( )。
A、 一定連續
B、 一定不連續
C、 不一定連續
D、 部分連續,部分不連續
正确答案: A
順序存儲,聯系數組,儲存單元是連續的
15、一個具有n個頂點的無向圖最多有( )邊。
A、 n(n-1)/2
B、 n(n-1)
C、 n
D、 2n
正确答案: A
第n個結點可以連結n-1條邊,之後第n-1個結點可以連結n-2條邊,
最終的邊數和等于從1到n-1的等差數列求Sn的問題。
(1+(n-1))*(n-1)/2
17、一棵具有N個結點的二叉樹采用二叉連結清單進行存儲,其中空指針域有( )個。
A、 N+1
B、 N
C、 N-1
D、 不确定
正确答案: A
根據鍊域(指針域)的思路,能連結k個結點的情況下,假設有n個結點
則全鍊域有n*k大小,n個結點中連結了n-1條鍊
剩下的就都是空鍊域:
n*k-(n-1),二叉樹中k=2,帶入得空指針域有n+1個
18、對于一個頭指針為head的帶頭結點的單連結清單,判定該表為空表的條件是()。
A、 head→next=NULL;
B、 head=NULL;
C、 head→next=head;
D、 head!= NULL;
正确答案: A
頭結點始終存在,判定空表的标準是頭結點後面沒有連接配接任何結點
19、已知串 S=‘aaab’,其next函數值為( )。
A、 0123
B、 1123
C、 1231
D、 1211
正确答案: A
解析: 注意這裡和課本不一緻,課本是j=0時開始,next[0]=-1;
是以next函數值為-1,0,1,2
而此題是從j=1時開始,next[0]=0;是以next函數值為0,1,2,3。
next[1]預設1 a
next[2]=2 aa,a與a比對
next[3]=3 aaa ,aa與aa【比對】
20、若串S= ‘software’,其字首真子串的數目是( )。
A、 7
B、 10
C、 9
D、 8
正确答案: A
類比真子集吧-----
21、最大容量為n的循環隊列,隊尾指針為rear,隊頭指針為front,則隊空的條件是( )。
A、 rear=front
B、 (rear+1)%n=front
C、 rear+1=front
D、 (rear-l)%n=front
正确答案: A
判斷隊空應用了原本的接觸,而留下了額外的一個空間用來
判斷滿
23、任意一棵二叉樹的葉子結點在其先序、中序、後序序列中的相對位置( )。
A、 肯定發生變化
B、 肯定不發生變化
C、 有時發生變化
D、 無法确定
正确答案: B
因為不管哪種周遊方式都是把“根”插入“左右”,是以
通過左右将葉子結點的相對位置限制住了
比如
1
/ \
2 3
無論是123,231,213,2始終被限制在3的左側
24、在單連結清單指針為p的結點之後插入指針為s的結點,正确的操作是()。
A、 s->next=p->next;p->next=s;
B、 p->next=s;s->next=p->next;
C、 p->next=s;p->next=s->next;
D、 p->next=s->next;p->next=s;
正确答案: A
讓s連接配接p的後續鍊,再将s鍊作為p的後續鍊,則s就進入到了原鍊中。
25、若某線性表最常用的操作是存取任一指定序号的元素和在最後進行插入和删除運算,則利用()存儲方式最節省時間。
A、 順序表
B、 雙連結清單
C、 帶頭結點的雙循環連結清單
D、 單循環連結清單
正确答案: A
對于頻繁進行元素存取的情況,使用順序表會比較節省時間,
且在最後進行插入删除避免了操作時可能出現的對元素位置
移動的需求
26、設有兩個串p和q ,其中q是p的子串,求q在p中首次出現的位置的算法稱為( )。
A、 串的模式比對
B、 求子串
C、 串聯接
D、 求串長
正确答案: A
28、評價排序算法好壞的标準主要是( )。
A、 執行時間和所需的輔助空間
B、 執行時間
C、 輔助空間
D、 算法本身的複雜度
正确答案: A
時間空間複雜度是在算法衡量時的重要因素
29、樹最适合用來表示的結構是( )。
A、 元素間具有分支及層次關系的結構
B、 元素間的有序結構
C、 元素間的無序結構
D、 元素間無聯系的結構
正确答案: A
樹未必有序或者無序,主要的意義是用來表示樹形從根開散到
樹葉的層次結構。
31、已知一棵度為3的樹有2個度為1的結點,3個度為2的結點,4個度為3的結點,則該樹中有( )個葉子結點。
A、 10
B、 11
C、 12
D、 13
正确答案: C
這裡的度是指出度2333
所有的度數=2*1+3*2+4*3=3+2+4+x-1
20=8+x
x=12
我們在這裡是預設葉子結點的出度為0的
32、在稀疏矩陣的三元組順序表中,每個三元組表示( )。
A、 矩陣中資料元素的行号、列号和資料值
B、 矩陣中非零元素的資料值
C、 矩陣中資料元素的行号和列号
D、 矩陣中非零元素的行号、列号和資料值
正确答案: D
稀疏矩陣三元組的儲存思路:
記錄原數組的兩個次元值(x,y)
————
記錄稀疏數出現的位置以及值value
以及不知道為啥要排序的排序
34、在下面的程式段中,x=x+1;的語句頻度為( )。
for( i=1;i<=n;i++)
for( j=1;j<=n;j++) x=x+1;
A、 O(2n)
B、 O (n)
C、 O (n^2)
D、 O (log2n)
正确答案: C
解析:
雙重循環按乘算,應為n的2次方
35、已知一如下10個記錄的表,其關鍵字序列為(2,15,19,25,30,34,44,55,58,80),用折半查找法查找關鍵字為55的記錄,比較次數是( )。
A、 1次
B、 2次
C、 3次
D、 4次
正确答案: B
第一次折半:30 向上取
第二次折半:55 符合查找要求,傳回
比較次數為2
36、廣度優先周遊類似于二叉樹的( )。
A、 先序周遊
B、 中序周遊
C、 後序周遊
D、 層次周遊
正确答案: D
廣度優先要求向廣擴散,映射到二叉樹就是把一層中所有結點都
加到周遊序列中
37、如果按關鍵碼值遞增的順序依次将99個關鍵碼值插入到二叉排序樹中,則對這樣的二叉排序樹檢索時,在等機率情況下查找成功時的平均查找長度ASL為( )。
A、 50
B、 48
C、 45
D、 47
正确答案: A
解析: (n+1)/2
題目中的意思大概是一直向右邊延展右斜樹,然後所有的
C1~Cn的總查找數:(n+1)*n/2
平均查找數:(n+1)/2
38、對n個不同的排序碼進行冒泡(遞增)排序,在下列( )情況比較的次數最多。。
A、 從大到小排列好的
B、 從小到大排列好的
C、 元素無序
D、 元素基本有序
正确答案: A
解析: 逆序重新排列
需要更多的冒泡次數
39、對包含n個元素的散清單進行查找,平均查找長度為( )。
A、 不直接依賴于n
B、 O(n2)
C、 O(log2n)
D、 O(n)
正确答案: A
解析:
散清單查找到一個元素的期望和元素的總數無關!
40、某算法的時間複雜度是O(n2),表明該算法的( )。
A、 執行時間與n2成正比
B、 問題規模是n2
C、 執行時間等于n2
D、 問題規模與n2成正比
正确答案: A
大O計數時間複雜度,意義是執行時間的級數
二、 多選題
1、在資料結構中,從存儲結構上可以将之分為( )。
A、 順序結構
B、 非順序結構
C、 緊湊結構和非緊湊結構
D、 線性結構和非線性結構
正确答案: AB
在資料結構中,從儲存結構上可以将之分為順序結構和非順序結構有窮性,
2、算法必須具備( ) 這三個特性。
A、 可擴充性
B、 可執行性
C、 确定性
D、 有窮性
正确答案: BCD
算法必須具備的特性:
有窮性
确定性
執行性
具有的結構:
輸入結構
輸出結構
3、在稀疏矩陣的三元組順序表中,每個三元組表示( )。
A、 矩陣中非零元素的行号
B、 矩陣中非零元素的列号
C、 矩陣中資料元素的行号和列号
D、 矩陣中非零元素的資料值
正确答案: ABD
C不對,三元組不存儲相同元素的具體位置,而是作為全局填充
4、對線性表進行折半查找時,要求線性表( )。
A、 沒有要求
B、 關鍵字有序
C、 順序存儲
D、 沒有正确答案
正确答案: BC
要求是1有序序列
2順序存儲好直接使用下标索引定位
5、下面正确的說法是( )。
A、 任何一個關鍵活動提前完成,将使整個工程提前完成
B、 關鍵活動不按期完成就會影響整個工程的完成時間
C、 所有關鍵活動都提前完成,則整個工程提前完成
D、 某些關鍵活動若提前完成,将使整個工程提前完成
正确答案: BCD
關鍵活動決定了其他的活動可調整的範圍
7、關于哈希查找,以下說法正确的是( )。
A、 哈希查找中,記錄的存儲位址是計算出來的,因而不需要比較
B、 裝填因子越大,越容易産生沖突
C、 哈希查找有兩個關鍵問題:哈希函數和處理沖突的方法
D、 鍊位址法和線性探測再散列都是解決沖突的方法
正确答案: BCD
解析:
A需要判斷這個元素是否已經在哈希表中
8、以下不适合用分塊查的資料集是( )。
A、 資料分成若幹塊,塊内資料不必有序,但塊間必須有序
B、 資料分成若幹塊,每塊(除最後一塊外)中資料個數需相同
C、 資料分成若幹塊,塊内資料必須有序,塊間不必有序
D、 資料分成大小相等的若幹塊,塊内資料有序
正确答案: BCD
解析:
9、下列陳述中不正确的是( )。
A、 二叉樹中最多隻有兩棵子樹,且有左右子樹之分
B、 二叉樹是度為2的有序樹
C、 二叉樹中結點隻有一個孩子時無左右之分
D、 二叉樹中必有度為2的結點
正确答案: BCD
解析:
11、在資料結構中,從邏輯上可以把資料結構分成( )。
A、 線性結構
B、 樹型結構
C、 圖狀結構
D、 集合
正确答案: ABCD
12、下面關于圖的存儲結構叙述中不正确的是( )。
A、 用鄰接矩陣存儲圖,占用空間大小隻與圖中頂點數有關,而與邊數無關
B、 用鄰接矩陣存儲圖,占用空間大小隻與圖中邊數有關,而與頂點數無關
C、 用鄰接表存儲圖,占用空間大小隻與圖中頂點數有關,而與邊數無關
D、 用鄰接表存儲圖,占用空間大小隻與圖中邊數有關,而與頂點數無關
正确答案: BCD
解析:
用鄰接矩陣存儲圖,占用空間大小隻與圖中頂點數有關,而與邊數無關
鄰接表都有關
13、最小生成樹的構造可使用( )算法。
A、 Prim算法
B、 Kruskal算法
C、 哈夫曼算法
D、 迪傑斯特拉算
正确答案: AB
最小生成樹的建構用Prim算法和Kruskal算法
Dijkstra算法是用來求帶權圖的最短路徑的
三、 判斷題
1、Hash表的平均查找長度與處理沖突的方法無關。
正确答案: 錯誤
哈希表的平均查找長度與處理沖突的方法有關
3、由同一關鍵字集合構造的各棵二叉排序樹形态和平均查找長度都不一定相同
正确答案: 正确
4、在完全二叉樹中,若一個結點沒有左孩子,則它必然是葉子結點。
正确答案: 正确
完全二叉樹,要麼滿,要麼一定有左孩子
5、如果兩個串含有相同的字元,則說明它們相等。
正确答案: 錯誤
字元序列要相同,也就是說出現位置和順序相同
6、在查找過程中,不做增加、删除或修改的查找稱為動态查找。
正确答案: 錯誤
靜态查找
首先無論是靜态查找還是動态查找,都要有查找的對象,也就是包含很多同類型
資料的“表”,這個“表”可以了解為一個由同類型資料元素組成的一個“集合”,該
集合可以用各種容器來存儲,例如數組、連結清單、樹等,我們統稱這些存儲資料的
資料結構為——查找表。可見,查找表有時是我們傳統意義的表,有時候是很複雜
的一種結構。
靜态查找就是我們平時概念中的查找,是“真正的查找”。之是以說靜态查找是真
正的查找,因為在靜态查找過程中僅僅是執行“查找”的操作,即:(1)檢視某
特定的關鍵字是否在表中(判斷性查找);(2)檢索某特定關鍵字資料元素的
各種屬性(檢索性查找)。這兩種操作都隻是擷取已經存在的一個表中的資料
資訊,不對表的資料元素和結構進行任何改變,這就是所謂的靜态查找。
(數組,索引順序表的查找)
2、動态查找
看到上面靜态查找的概念,動态查找就很好了解了,個人總覺得動态查找不像
是“查找”,更像是一個對表進行“建立、擴充、修改、删除”的過程。動态查找
的過程中對表的操作會多兩個動作:(1)首先也有一個“判斷性查找”的過程,
如果某特定的關鍵字在表中不存在,則按照一定的規則将其插入表中;(2)
如果已經存在,則可以對其執行删除操作。動态查找的過程雖然隻是多了“插入
”和“删除”的操作,但是在對具體的表執行這兩種操作時,往往并不是那麼簡單。
(樹的查找,二叉樹等的查找)
7、順序表适宜于順序存取,而連結清單适宜于随機存取。
正确答案: 錯誤
順序表随機存取,可以直接由索引映射到對應的值
8、稀疏矩陣中非零元素的個數遠小于矩陣中元素的總數。
正确答案: 正确
即所謂的稀疏性
9、靜态連結清單與動态連結清單在元素的插入、删除上類似,不需做元素的移動。
正确答案: 正确
12、算法可以用不同的語言描述,如果用C 語言或PASCAL語言等進階語言來描述,則算法實際上就是程式了。
正确答案: 錯誤
缺乏資料結構
13、迪傑斯特拉算法求最短路徑時,是按照路徑長度遞增的順序求解的。
正确答案: 正确
也就是從源點無限的向終點延伸
14、在有序的順序表和有序的連結清單上,均可以采用折半查找來提高查找速度。
正确答案: 錯誤
有序的連結清單不能通過索引來對應元素
15、線性表的特點是每個元素都有一個前驅和一個後繼。
正确答案: 錯誤
起始元素和末尾元素并不是二者都有
16、有n個元素存放在一維數組A[1…n]中,在進行順序查找時,這n個數的不同排列,其平均查找長度不同。
正确答案: 錯誤
17、一個資料結構在計算機中的表示(又稱映像)稱為存儲結構。
正确答案: 正确
18、子串的定位運算稱為串的模式比對。
正确答案: 正确
19、二分查找法要求待查表的關鍵字值必須有序。
正确答案: 正确
21、線性表的鍊式存儲結構中,邏輯上相鄰的兩個元素在實體位置上并不一定相鄰。
正确答案: 正确
25、任何一個遞歸過程都可以轉換成非遞歸過程。
正确答案: 正确
26、資料結構中評價算法的兩個重要名額是算法的時間複雜度和空間複雜度。
正确答案: 正确
27、一棵樹中的葉子數一定等于與其對應的二叉樹的葉子數。
正确答案: 錯誤
沒有這種說法8
28、一個稀疏矩陣A[m,n]采用三元組順序表形式表示,若把三元組中有關行下标與列下标的值互換,并把m和n的值互換,則就完成了A[m,n]的轉置運算。
正确答案: 錯誤
還需要排序?
29、在對不帶頭結點的鍊隊列作出隊操作時,不會改變頭指針的值。
正确答案: 錯誤
錯,不帶頭結點的話頭指針會進行位移用以定位