原创 JAVA代碼實現平衡二叉樹

平衡二叉樹 平衡二叉樹又叫AVL樹,它是在二叉排序樹的基礎上進行了樹結構的調整,使其根節點的左右子樹的高度差一致。可以保證查詢效率更加高效。 平衡二叉樹涉及到左旋轉、右旋轉和雙旋轉,接下來分別用圖解分析一下: 左旋轉 右旋轉

原创 JAVA代碼實現二叉排序樹的創建和刪除

二叉排序樹的創建和刪除 最近學習了二叉樹的創建和刪除功能,本文代碼主要實現以下功能: 給定一個數列,創建二叉排序樹(BST) 遍歷二叉排序樹(中序遍歷) 刪除二叉排序樹的節點 其中,二叉排序樹的刪除節點步驟較爲繁瑣,思路總結如

原创 JAVA代碼實現快速排序

快速排序 快速排序是一種改進版的冒泡排序。針對一組數據,按從小到大排序爲例。首先隨機選取一個數爲基準(一般選取第一個數或者中間數)然後將數據分成左右兩組,左邊的每個數據都比基準小,右邊的每個數據都比基準大。其實現思路是: 首先確

原创 JAVA代碼實現哈希表

哈希表 哈希表也叫散列表,是根據關鍵碼值而直接進行訪問的數據結構,通過把關鍵碼值映射到表中一個位置來訪問記錄,以加快查找的速度。這個映射函數叫做散列函數,存放記錄的數組叫做散列表。 舉例:定義一個哈希表實現員工的增刪改查 pa

原创 JAVA代碼創建哈夫曼樹

哈夫曼樹 最近學習了數據結構中哈夫曼樹的知識。 先來看哈夫曼樹的定義:給定n個權值作爲葉子節點,構造一棵二叉樹,如果該樹的帶權路徑長度(WPL)達到最小,則稱這樣的二叉樹爲最優二叉樹,也稱爲哈夫曼樹。 得明確幾個重要的概念: 路

原创 JAVA代碼實現中綴表達式轉後綴表達式並求值

中綴表達式轉後綴表達式並求值 最近學習了利用棧實現中綴表達式轉後綴表達式並求值的實現方式。目前只實現了加減乘除操作,小數部分暫時未考慮。如有錯誤之處,還望指出,我會及時改正。 package com.stack.calulator

原创 GIT常用操作整理

GIT常用操作學習 最近在學習GI T版本控制工具,關於GIT的介紹就不做過多闡述,下面將自己平時經常用到的操作,進行一些整理。 1.首先需要創建一個版本庫: mkdir myreproistory 2.將myrepr

原创 JAVA代碼實現堆排序

堆排序 最近學習了堆排序算法。堆排序是一種選擇排序,是不穩定的排序,其最壞、平均、最優時間複雜度都爲O(nlogn)。堆排序邏輯上是利用完全二叉樹對數進行移動,實際是對數組進行操作。 堆排序算法的基本思路: 根據升序或降序將數組

原创 JAVA代碼實現前序和中序線索二叉樹的

前序、中序線索化二叉樹 最近學習了線索二叉樹的相關知識。並且用代碼實現了前序和中序的線索化二叉樹的構建和遍歷。具體步驟已在代碼中說明。後序線索化二叉樹目前還在研究階段。。。 代碼中如果有解釋錯誤的地方,還望指出,定會及時改正。 p

原创 JAVA代碼實現二叉樹的前序、中序、後序遍歷

二叉樹的遍歷 二叉樹的遍歷分爲前序、中序和後序。可以通過遍歷父節點的順序來區別。前序遍歷的順序是父節點–左子節點–右子節點;中序遍歷的順序是左子節點–父節點–右子節點;後序遍歷的順序是左子節點–右子節點–父節點。通過遞歸的方式可以

原创 JAVA代碼實現二分查找和插值查找

二分查找 二分查找,顧名思義就是折半查找。前提是數組必須是有序的。每次將查找的數和數組的中間值進行比較,如果要查找的數比中間值小就左遞歸繼續查找,如果要查找的數比中間值大,就右遞歸繼續查找,如果要查找的數存在,最終就是反覆遞歸後的

原创 JAVA代碼實現歸併排序

歸併排序 歸併排序用到了分治法的思想。用代碼實現時,按從小到大排序爲例,主要的思路分爲分解和合並兩大步驟: 分解: 第一次分解時,根據數組的頭尾下標,得出分界線的位置,即:mid=(left+right)/2; 向左遞歸分解:就

原创 JAVA代碼實現基數排序

基數排序 基數排序是經典的拿空間換時間的排序算法。當預排數據中有重複數據時,該算法排完序後,重複數據的相對順序仍然不變,即表明基數排序是一種穩定排序算法。其基本思想如下:第一輪按每個數的個位數的順序,將數放入0-9的10個桶中,然

原创 JAVA代碼實現冒泡、選擇、插入、希爾排序

冒泡、選擇、插入、希爾排序 今天學習了八大算法中的冒泡、選擇、插入、希爾排序算法。以數據從小到大排序爲例,談一談自己的理解。有錯誤之處,還望指出,我會及時改正。 1. 冒泡排序: 冒泡排序每次將相鄰元素進行比較,較大的數放在後面,

原创 JAVA代碼實現8皇后問題

8皇后問題 最近在學習數據結構中的遞歸算法,並且使用遞歸思想學習了著名的8皇后問題。 先談談自己對遞歸的理解吧。遞歸算法就是程序不斷的調用自身的過程,遞歸的過程中,一定要注意兩點:1.一定要有終止遞歸的條件;2.一定要不斷的逼