資料結構測試題。小問題見大智慧!

sunnylovecmc發表於2009-10-18

                        資料結構複習題

1.       已知二叉樹中,葉子節點數為40 ,僅有一個孩子結點的個數20,側總結點的個數為::99

4,              圖常用的兩種遍歷演算法是:深度優先遍歷和廣度優先遍歷

5,              N個頂點的有向圖最多有n(n-1)條弧

6,              在有向圖的鄰接矩陣上由第i行節點可得到第__i__個節點的出度,由第j列可得到第__j_個節點的入度。

7,              在一個元素為N的陣列中第I個元素之前插入一個元素(1=<i<=n+1)需要移動__n+1-i____個元素

8,              頭結點地址引用(指標)為L的迴圈單連結串列空表的判斷條件是 ___;

9,              一顆哈弗曼樹共有19個節點 ,其中葉子節點個數是_10_;

10,         要刪除擁有最大值的資料項需要遍歷__1_次單連結串列;

11,         圖的遍歷過程中,選擇出發頂點V0的次數為該圖的_連通分量__的個數;

12,         從連通圖的定義出發  ,樹是 一個沒有 _迴路或環__的連通圖;

13,         N個頂點的無向連通圖中至少含有__(n-1)__條邊

  選擇題

1,          __儲存密度高_是順序儲存方式的優點;

2,          在含有N個元素的陣列中在任意一元素前插入一個元素所需移動節點的平均次數_n/2_;在任意一元素前刪除一個元素所需移動節點的次數是(n-1/2;

3,          迴圈連結串列的主要優點是/____;

 

4,          一個棧的輸入序列為12345 測下列序列中不可能的輸出序列是54231

 

5,          從佇列中刪除第I個元素 不是佇列的基本運算的是(答案B

 

6,          下列程式 的時間複雜度是;o(n);

X=n;

While(x>1){

System.out.println(x);

X--;

}

7,          某二叉樹上的先序遍歷和後序遍歷正好相反,則該二叉樹一定是:高度等於節點數的二叉樹;

8,          用鄰接矩陣儲存圖 佔用的儲存空間大小隻與圖中結點個數有關 ,而與邊數無關;

9,          棧若用鏈式儲存結構,要求記憶體中可用的儲存單元的地址_連續不連續都可以__

 

12,  高度為K的二叉樹(假設根是第一層)的最大的結點數為_2K次方減1

 

13,   任何一個無向連通圖的最小生成樹:有一顆或多顆;

 

14,   在一個有向圖中。所有頂點的入度和等於 所有頂點的出度之和的__1__

15,   已知二叉樹的先序序列和中序序列如下:畫出該二叉樹:先序遍歷:ABDFKICEHJG;後序遍歷:DBKFIAHEJCG

 

 

 

 

 

 

 

16,   假設用於通訊的電文由字符集

{A     B     C    D   E    F    G}

{0.330.150.100.080.10.200.04}構成,它們在電文中出現的頻度是{0.330.150.100.080.10.200.04}

 

1)為這7個字元設計哈弗曼編碼;

   A,   B ,    C,     D,    E     ,F    ,G

   11  100     010   1010  011    00   1011

2)為這7這字元進行等長編碼,至少需要幾位二進位制數?哈弗曼編碼比等長編碼總長度壓縮多少?

 至少需要3位二進位制數  

   壓縮了=3-2.59/3 =13.7%

 

 

 

 

 

 

 

 

 

 

 

17,    設有一組資料(C0C1,C2.......Cn-1)存在一個一維陣列Aarraysize】的前幾個陣列元素位置((arraysize=n)。請編寫一個方法將陣列資料原地倒置,即將陣列的錢前幾位原址內容置換為(En-1......E0

Void inverse(int[] A){

   Int n=A.lengeh;

   Int m=n/2;

   Int temp;

  For(int i=0;i<m;i++){

Temp=A[i];

 A[i]=A[n-1-i];

A[n-1-i]=temp;

}

}

 

18,  計算圖的連通分量的個數;

 //訪問節點的方法:

Public class Visit{

  Public void print(Object item){

   System.our.print(item+” ”);

}

}

//深度優先遍歷的方法並計算訪問節點的次數:

  private void depthFistSearch(int v,boolean[] visited, visit vs)throws Exception{

                  int count=0;

                       vs.print(getValue(v));

                       visited[v]=true;

                       int w=getFirstNeighbor(v);

                       while(w!=-1){

                      if(!visited[w])

                      depthFirstSearch(w,visited, vs);

                      w=getNestNeighbor(v,w);

                 }

             return   Count++;

        }

       說明:呼叫最小生成樹,深度優先遍歷。訪問節點的次數

19,   求連個正整數NM的最大公約數的遞推定義式

 

gcd(n,m)

 

 

public class RevTest {

   static int Gcd(int n,int m){

         if(n<m)

         return Gcd(m,n);

         if(m==0)

              return n;

       return Gcd(m,n%m);    

   }

   public static void main(String[] args) {

         System.out.println(Gcd(48,32));//Gcd()被呼叫3

   }

}

20,    統計該二叉樹中葉子節點的個數

Public int countLeaves( BiTreeNode  t ){

  If( t!=null ){

If (t.getLeft( ) ==null && t.getRight( )== null  );

Return 1 ;

Int leftCount =0,  rightCount = 0 ;

If (t.get.left ( ) !=null )

     Leftcount = countleaves( t.getLeft( ) );

If(t.getright( ) != null )

Rightcount=countLeaves( t.getRight( ) );

Return leftcount +rightcount;

}

Return  0;

}

相關文章