資料結構學習(二)

2021-07-29 22:20:46 字數 3187 閱讀 2434

資料結構學習(二)

目錄:

程式設計專練:

1、判斷二維陣列中乙個數存在:

2、求乙個數的次方:

3、求逆序對總數:

4、判斷棧彈出順序是否正確:

5、順時針列印矩陣中的資料:

1、在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。

public class algorithm1  else if (target < array[i][j])  else 

} return false;

} public static void main(string args) , , };

if (find(12, arrays))

system.out.println("資料含有這個整數");

else

system.out.println("沒有這個整數");

}}

執行結果:

圖1.1 執行結果

2、給定乙個double型別的浮點數base和int型別的整數exponent。求base的exponent次方。

public class algorithm2  else if (exponent < 0) 

result = 1 / result;

return result;

} else

return result;

} }public static void main(string args)

}

執行結果:

圖2.1 執行結果

3、在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數p。並將p對1000000007取模的結果輸出。 即輸出p%1000000007。

public class algorithm3 

//歸併排序遞迴演算法

public void msort(int a, int b, int i, int low, int high)

}elseelse

} }//二路歸併

public void merge(int a, int b, int low, int middle, int high)else

} while(i <= middle)

while(k <= high) }

public static void main(string args) ;

system.out.println(test.inversepairs(array));

}}

執行結果:

圖3.1 執行結果

4、輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出順序。(注意:這兩個序列的長度是相等的)。

public class algorithm4 

}//存在非壓入棧中的其他數

if(flag == 1)

} int max = pop[0];

int min = pop[0];

for(int i = 0; i < length; i++)

if(pop[i] > max)

if(pop[i] < min)

} return true;

}public static void main(string args);

int popa = new int;

int popa2 = new int;

algorithm4 test = new algorithm4();

system.out.println(test.ispoporder(pusha, popa));

system.out.println(test.ispoporder(pusha, popa2));

}}

執行結果:

圖4.1 執行結果

5、輸入乙個矩陣,按照從外向裡以順時針的順序依次列印出每乙個數字。

public class algorithm5 

//從上到下遍歷

for(int k = i + 1; k < rows - i; k++)

//從右到左遍歷,邏輯判斷後半部分為判斷是否重複列印

for(int x = cols - 1 - 1 - i; x >= i && rows - 1 - i != i; x--)

//從下到上遍歷,邏輯判斷後半部分為判斷是否重複列印

for(int y = rows - 1 - 1 - i; y > i && i != cols - 1 - i; y--)

} return list; }

public static void main(string args) ,,,,};

arraylistlist = test.printmatrix(matrix);

system.out.println(list); }}

執行結果:

圖5.1 執行結果

資料結構學習(二)

寬度優先遍歷 寬度優先遍歷和廣度優先遍歷是兩種不同的搜尋的方法,不同之處主要在於廣度優先搜尋需要使用到佇列,鑑於上一節已經介紹過深度優先遍歷,這裡直接舉個例子,貼上 吧,哈哈,偷個小懶 對於圖中的節點,要進行廣度優先搜尋,過程如下 假設先從a開始搜尋,將a加入佇列中 直接從佇列中彈出a,搜尋a鄰接的...

資料結構學習(二)

什麼是演算法?演算法是解決特定問題求解步驟的描述,在計算機中表現為指令的有限序列,並且每條指令表示乙個或多個操作。演算法具有五個基本特性 輸入 輸出 有窮性 確定性和可行性。演算法設計的要求 正確性 可讀性 健壯性 時間效率高和儲存量低 演算法時間複雜度的定義 在進行演算法分析時,語句總的執行次數t...

資料結構學習二 棧

棧 限制插入和刪除操作只能在乙個位置上進行的表。對棧的基本操作有push 進棧 和pop 出棧 前者相當於插入,後者則是刪除。棧也叫作先進後出表。本文使用鍊錶實現棧。pragma once 鍊錶型別宣告 struct node pragma once include node.h 棧定義 m hea...