Java版資料結構與演算法學習筆記
概述
1. 什麼是資料結構
即資料在記憶體或磁碟上的組織形式,包括陣列、連結串列、棧、佇列、樹、hash表、圖、堆等。
2. 什麼是演算法
即對資料結構中的資料的處理方法,也可以說利用資料來解決業務問題的方法。
3. 資料結構與演算法的關係
資料結構是為演算法服務的。有些演算法依賴於特定的資料結構,但並不是所有演算法都依賴於特定的資料結構。
4. 資料結構與演算法的作用
選擇合適的資料結構與演算法,可提高程式效能與健壯性。
陣列
1. 什麼是陣列
陣列是由相同資料型別元素組成的集合,陣列是引用型別。
相關推薦
Java版資料結構與演算法學習筆記
概述 1. 什麼是資料結構 即資料在記憶體或磁碟上的組織形式,包括陣列、連結串列、棧、佇列、樹、hash表、圖、堆等。 2. 什麼是演算法 即對資料結構中的資料的處理方法,也可以說利用資料來解決業務問題的方法。 3. 資料結構與演算法的關係 資料結構是為演算法服務的。
#資料結構與演算法學習筆記#劍指Offer29:整數中1出現的次數 + 分段思想/按位考慮 + 測試用例(Java、C/C++)
2018.10.5 感受到開學之後工作和課業的雙重壓力,加上近段時間自己出了點小事故,因此斷更了許久。沒事,繼續。 這道題有兩種複雜度為的演算法。 方法1:遞迴(分段思想)。 所有數字出現1的個數 = 每一段數字中出現1的個數之和 1. 對於輸出的數字n,其最高位為
#資料結構與演算法學習筆記#劍指Offer30:把陣列排成最小的數 + 自定義比較器 + 測試用例(Java、C/C++)
2018.10.6 1.求全排列最小。事實上用全排列硬剛這道題確實是最直接的辦法,因為乍一眼看上去實在不好歸納數字之間的順序關係,全排列具體實現原理可以參考上述文章。 2.自定義比較器。為什麼說
#資料結構與演算法學習筆記#劍指Offer34:兩個連結串列的第一個公共結點 + 等長遍歷/輔助棧 + 測試用例(Java、C/C++)
2018.10.21 這道題也是屬於效率題,實現難度不大,但是要降低複雜度還是需要思考一下。有兩個o(n)的做法: 方法一:等長連結串列法。先計算兩條連結串列的長度,然後先遍歷長連結串列直到兩條連結串列等長,最後依次按奇偶順序挨個遍歷兩條連結串列各個結點。 方法二:輔助
#資料結構與演算法學習筆記#劍指Offer35:數字在排序陣列中出現的次數 + 測試用例(Java、C/C++)
2018.10.24 今天是程式設計師節,但是程式設計師有啥節好過的,還是好好幹活吧~ 這道題也是一道效率題,根據實際情況的不同有兩個比較好用的方法: 方法一:平均複雜度o(n)。二分找到某一個K
#資料結構與演算法學習筆記#劍指Offer35:是否平衡二叉樹/AVL樹 + 測試用例(Java、C/C++)
2018.11.3 前幾天有用遞迴實現了二叉樹的深度#資料結構與演算法學習筆記#劍指Offer36:二叉樹的深度(Java),因此可以對每個結點先序遍歷進行一次平衡驗證,只要確定每個結點都是平衡的
資料結構與演算法學習筆記之後進先出的“桶”
前言 棧最為一種的常用的資料結構,用“桶”來形容最合適不過;今天我們就來學習一下 正文 一、棧的定義? 1.“後進先出,先進後出”的資料結構。 2.從操作特性來看,是一種“操作受限”的線性表,只可以在一端插入和刪除資料。 二、為什麼需要棧?
java版資料結構與演算法—線性探測雜湊表
package com.zoujc.hash; /** *雜湊表: 優點:速度快(插入和查詢) * 缺點:基於陣列,不能有序遍歷 * 鍵值對:通過鍵訪問值 * 衝突:不同的關鍵字經過雜湊化得到的陣列下標出現了重複 * 解決衝突:1.開放地址法(線性探測
java版資料結構與演算法—遞迴(漢若塔)
package com.zoujc.triangle; /** * 漢諾塔 */ class TowersApp { public static void main(String[] args){ doTowers(3,'A','B','C'); }
java版資料結構與演算法—遞迴(二分法查詢)
package com.zoujc.triangle; /** * 遞迴:二分查詢 */ class OrdArray { private int[] a; private int nElems; public OrdArray(int max){
java版資料結構與演算法—遞迴(變位字)
package com.zoujc.triangle; import java.io.IOException; /** * 變位字(遞迴的效率並不如for迴圈高) */ class AnagramApp { static int size; static int co
java版資料結構與演算法—雙端連結串列
/** * 雙端連結串列 */ class MyLinkList { public Link first; public Link last; public MyLinkList(){ first = null; last = nu
java版資料結構與演算法—優先順序佇列
/** * 優先順序佇列,排好序的佇列插入和刪除 */ class PriorityQueue { int a[]; int maxSize; int nItems; public PriorityQueue(int size){ maxS
java版資料結構與演算法—快速排序
/** * @author zoujc * @date 2018/11/15 * 快速排序:時間複雜度:O(NlogN) */ public class ArrayQuickSort { public static void quickSort(int arr[], int low
java版資料結構與演算法—選擇排序
/** * 選擇排序:時間複雜度O(n^2), * 比氣泡排序稍好點,交換次數少 */ class ArraySelect { public static void selectSort(int arr[]){ for(int i=0;i<arr.leng
java版資料結構與演算法—氣泡排序
/** * 氣泡排序規則: * 1.比較兩個相鄰物件 * 2.如果左邊的大於右邊的,則調換位置 * 3.向右移動一個位置,比較接下來的兩個物件 * 時間複雜度:O(log n^2) */ class ArrayBubble { public static void bub
java版資料結構與演算法—插入排序
/** * 插入排序:時間複雜度O(n^2),但比氣泡排序,選擇排序要好 * 把下標為1的先取出來,當做臨時變數,下標為0的元素相當於排好序的 * 然後把下標為1的元素與下標為0的元素比較(升序),如果臨時變數比下標為0 * 的元素小,則下標為0的元素向後移動一個下標,臨時變數插到下
java版資料結構與演算法—佇列、兩個棧實現一個佇列
/** * 佇列:先進先出 */ class MyQueue { int a[]; int maxSize; //大小 int front; //開頭 int rear; //結尾 int nItems; //元素個數 //初始化
java版資料結構與演算法—棧(判斷括號是否匹配)
/** * 括號是否匹配 {} () [] */ class IsMatch { private char arr[]; private int maxSize; private int top; public IsMatch(int size){
java版資料結構與演算法—遞迴(三角數字)
package com.zoujc.triangle; /** * 遞迴:三角數字 */ class TriangleApp { public static void main(String[] args){ int n = 10; System