資料結構學習(二)
目錄:
程式設計專練:
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...