下載地址:https://wwm.lanzouw.com/ixFNoy9hdyh
密碼:5vyi
在資料結構中, 從邏輯上能夠把資料結構分為
線性結構
非線性結構
資料結構在計算機記憶體中的表示是指
鏈式儲存的特點是利用**指標** 來表示資料元之間的邏輯關係。
對於給定的n個元素,可以構造出的邏輯結構有
集合
樹形結構
線性結構
圖結構
順序儲存結構是通過==結點物理上相鄰==表示元素之間的關係的;
迴圈單連結串列的最大優點是:
堆疊是一種操作受限的線性表,
它只能線上性表的==一端==進行插入和刪除操作,
對棧的存取是按照==後進先出==的原則進行的。
棧是==操作受限==的線性表,
其運算遵循的原則:後進先出。
棧可以線上性表的==棧頂==進行操作和刪除。
迴圈佇列的引入,
對於一個具有n個結點的二元樹,
哈夫曼樹
完全圖
一般線性表順序查詢,
查詢成功的平均查詢長度為==(n+1)/2==,
查詢失敗的平均查詢長度為n+1。
15.採用分塊查詢時,
在線性表的順序儲存中
在線性表的連結儲存中,
空格串
己知三對角矩陣A[1…9,1…9]的每個元素佔2個單元,現將其三條對角線上的元素逐行儲存在起始地址為1000的連續的記憶體單元中,則元素A[7,8]的地址為:
設廣義表L = ((),())
head(L)
:()
;tail(L)
:( ( ) )
;一棵深度為k的二元樹,
圖,的儲存結構常採用____兩種
22.指標q值為null
,指標p指向單連結串列L的某個結點
刪除其後繼節點(要求由指標q指向)的語句是 :
q=p->next
,
p->next=q->next
,
free(q)
n個頂點,e條邊的有向圖的鄰接矩陣中非零元素有 (C)個。
如果在資料結構中每個資料元素只可能有一個直接前驅,但可以有多個直接後繼,則該結構是(C)
資料結構研究的內容是(D)。
A.資料的邏輯結構 B.資料的儲存結構
C.建立在相應邏輯結構和儲存結構上的演演算法 D.包括以上三個方面
若下面幾個符號串編碼集合中,不是字首編碼的是(B)。
A.{0,10,110,1111}
B.{11,10,001,101,0001}
C.{00,010,0110,1000}
D.{b,c,aa,ac,aba,abb,abc}
一棵二元樹,前序遍歷序列為:ABCDEFG,它的中序遍歷序列可能是(B)
設有陣列A[i,j]
,陣列的每個元素長度為3位元組,i
的值為1 到8 ,j
的值為1 到10,陣列從記憶體首地址BA開始順序存放,
當用以列為主記憶體放時,元素 A[5,8]
的儲存首地址為:(B)
:
下面的說法中,只有(A)是正確的
A.串是一種特殊的線性表 B. 串的長度必須大於零
C.串中元素只能是字母 D. 空串就是空白串
設有一個棧,元素的進棧次序為A, B, C, D, E,下列是不可能的出棧序列(C)
A.A, B, C, D, E
B.B, C, D, E, A
C.E, A, B, C, D
D.E, D, C, B, A
在一個具有n個單元的順序棧中,假定以地址低端(即0單元)作為棧底,以top作為棧頂指標,當做出棧處理時,top變化為(C)
在一個單連結串列中,已知q
結點是p
結點的前趨結點,若在q和p之間插入s結點,則須執行(B)
A.s->next=p->next; p->next=s
B.q->next=s; s->next=p
C.p->next=s->next; s->next=p
D.p->next=s; s->next=q
設一維陣列中有n個陣列元素,則讀取第i個陣列元素的平均時間複雜度為( C)。
(A)O(n) (B) O(nlog2n) © O(1)
(D)O(n2)
(A)2k-1 (B) 2k © 2k-1 (D)2k-1
(A)n (B) e © 2n (D) 2e
(A)O(1) (B) O(n)
© O(log2n) (D) O(n2)
(A)n (B) n-1 ©m (D)m-1
無向連通圖,所有頂點的度之和為偶數。 [√]
無向連通圖邊數一定大於頂點個數減1。 [×]
無向連通圖至少有一個頂點的度為1。 [×]
用鄰接表法儲存圖,佔用的儲存空間數只與圖中結點個數有關,而與邊數無關。 [×]
用鄰接矩陣法儲存圖,佔用的儲存空間數只與圖中結點個數有關,而與邊數無關。 [√]
在一個有向圖中,所有頂點的入度與出度之和等於所有邊之和的2倍。 [√]
演演算法分析的兩個主要方面是時間複雜度和空間複雜度的分析。 [√]
通過對堆棧S操作:Push(S,1), Push(S,2), Pop(S), Push(S,3), Pop(S), Pop(S)
。輸出的序列為:123。 [×]
在用陣列表示的迴圈佇列中,front值一定小於等於rear值。 [×]
若一個棧的輸入序列為{1, 2, 3, 4, 5},則不可能得到{3, 4, 1, 2, 5}這樣的出棧序列。 [√]
已知一棵二元樹的先序遍歷結果是ABC, 則CAB不可能是中序遍歷結果。 [√]
一棵有124個結點的完全二元樹,其葉結點個數是確定的。 [√]
若用連結串列來表示一個線性表,則表中元素的地址一定是連續的。 [×]
任何二元搜尋樹中同一層的結點從左到右是有序的(從小到大)。 [√]
某二元樹的前序和中序遍歷序列正好一樣,則該二元樹中的任何結點一定都無左孩子。 [√]
有一字元序列abcde依次按照某一線性結構儲存,請回答以下問題:
如果該線性結構是佇列,寫出其出隊順序;
ABCDE
佇列:先進先出
如果該線性結構是棧,那麼,輸出序列可能是dceab麼?為什麼?
如果該線性結構是棧,且輸出序列是adcbe,寫出其操作過程
push(x)
:表示把x壓入棧內;
pop(x)
:表示把x彈出棧
棧:先進後出,後進先出。
push(a),pop(a),push(b),push(c),push(d),pop(d),pop(c),pop(b),push(e).pop(e)
下圖所示的森林:
求樹(a)的先根序列和後根序列;
求森林先序序列和中序序列
將此森林轉換為相應的二元樹;
在數學上有一個著名的「阿克曼(Ackerman)函數」,該函數定義如下:
Ack(m,n)
的遞迴演演算法;java
public class Ackerman {
public static void main(String[] args) {
System.out.println(" " + ack(3,4) + "");
}
public static int ack(int m,int n){
if (m < 0 || n < 0){
return -1;
}else if ( m == 0){
return n+1;
}else if (n == 0 && m != 0){
return ack(m-1,1);
}else if(n != 0 && m != 0){
return ack(m-1,ack(m,n-1));
}
}
}
c
int Ack(int m, int n)
{
if(m==0)
return n+1;
else if (m!=0 && n==0)
return Ack(m-1, 1);
else
return Ack(m-1,Ack(m,m-1));
}
//Ackerman遞迴演演算法
int akm1(int m,int n){
int q;
if(m==0)
return n+1;
else if(n==0)
return akm1(m-1,1);
else{
q=akm1(m,n-1);
return akm1(m-1,q);
}
}
//Ackerman非遞迴演演算法
int akm2(int m,int n){
struct{
int vm,vn; //分別儲存m和n值
int vf; //儲存akm(m,n)值
int tag; //標識是否求出akm(m,n)值,1:表示未求出,0:表示已求出
}St[MaxSize];
int top=-1; //棧指標
top++; //初值進棧
St[top].vm=m; St[top].vn=n; St[top].tag=1;
while(top > -1){ //棧不空時迴圈
if (St[top].tag==1) //未計算出棧頂元素的vf值
{
if (St[top].vm==0) //(1)式
{
St[top].vf=St[top].vn+1;
St[top].tag=0;
}
else if (St[top].vn==0) //(2)式
{
top++;
St[top].vm=St[top-1].vm-1;
St[top].vn=1;
St[top].tag=1;
}
else //(3)式
{
top++;
St[top].vm=St[top-1].vm;
St[top].vn=St[top-1].vn-1;
St[top].tag=1;
}
}
else if (St[top].tag==0) //已計算出vf值
{
if (top>0 && St[top-1].vn==0) //(2)式
{
St[top-1].vf=St[top].vf;
St[top-1].tag=0;
top--;
}
else if (top > 0) //(3)式
{
St[top-1].vm=St[top-1].vm-1;
St[top-1].vn=St[top].vf;
St[top-1].tag=1;
top--;
}
}
if(top==0 && St[top].tag==0) //棧中只有一個已求出vf的元素時退出迴圈
break;
}
return St[top].vf;
}
4.有一組資料{64,5,7,98,6,24}
(1)請列出直接選擇排序(升序)的過程;
(2)請列出氣泡排序(升序)的過程
找最小的數,放到第一位~
初始值 {64,5,7,98,6,24}
5,【64,7,98,6,24】
5,6,【7,98,64,24】
5,6,7,【98,64,24】
5,6,7,24【64,98】
5,6,7,24,64,【98】
兩個相鄰數直接比較,
初識值:{64,5,7,98,6,24}
第一趟排序:5
【5,64】,7,98,6,24
5,【7,64】,98,6,24
5,7,[64,98],6,24
5,7,64,【6,98】,24
5,7,64,6,【24,98】
第二趟排序:4
【 5,7】,64,6,24,98
5,【7,64】,6,24,98
5,7,【6,64】,24,98
5,7,6,【24,64】,98
第三趟排序:3
【5,7】,6,24,64,98
5,【6,7】,24,64,98
5,6,【7,24】,64,98