
go數據結構與算法
主要根據韓順平老師的視頻整理,有多處修改優化。
跃寒
我不在这里写博客了,基本不在线,个人网站yvehan.com,谢谢!
展开
-
03.1迷宮
遞歸(recursion)基本介紹程序調用自身的編程技巧稱為遞歸。遞歸算法相對於常用的算法如普通算法等,運行效率較低。在遞歸調用的過程中系統為每一層的返回點、局部量等開闢了棧儲存。遞歸次數過多容易造成棧溢出。應用場景8皇后問題漢諾塔階乘迷宮球和籃子用棧解決的一些問題注意:函數的局部變量是獨立的,不會相互影響,如果希望各個函數棧使用同一個數據,使用引用傳遞。...原创 2019-05-29 07:59:15 · 436 阅读 · 0 评论 -
02.4快速排序
快速排序(Quick sort)基本介紹快速排序(Quick sort)是對冒泡排序的一種改進。它的基本思想是:通過一趟排序將要排序的數據分割成獨立的兩部分,其中一部分的所有數據都比另一部分的所有數據要小,然後再按此方法對這兩部分數據分別進行快速排序,整個過程可以遞歸進行。(不穩定)代碼實例func QuickSort(values []int) { //是否符合排序條件 i...原创 2019-05-27 12:02:38 · 284 阅读 · 0 评论 -
02.3選擇排序
選擇排序(Selection sort)基本介紹選擇排序的工作原理是每一次從待排序的數據元素中選出最小或最大的一個元素,存放在序列的起始位置。然後,再從剩餘排序元素中繼續尋找最小或最大的元素,然後放到以排序序列的末尾,以此類推。(不穩定)代碼實現func SelectionSort(nums []int) { length := len(nums) for i := 0; i...原创 2019-05-27 12:01:32 · 198 阅读 · 0 评论 -
02.2插入排序
插入排序(Insertion sort)基本介紹插入排序的基本操作是將一個數據插入到已經排好序的有序數據中,從而得到一個新的有序數據,算法適用於少量數據的排序。(穩定)代碼實現func InsertSort(nums []int) { for i := 0; i < len(nums); i++ { //從數組中取出的第i個值 insertVal := nums[...原创 2019-05-27 12:00:19 · 257 阅读 · 0 评论 -
02.1冒泡排序
冒泡排序(Bubble Sort)基本介紹它重複地走訪要排序的元素列,依次比較兩個相鄰的元素,如果它們的順序錯誤就把它們交換過來。(穩定)代碼實現var n intfunc BubbleSort(values []int) { flag := true vLen := len(values) //一共比較n-1次 for i := 0; i < vLen-1; i...原创 2019-05-27 11:59:38 · 315 阅读 · 0 评论 -
01.6哈希表
哈希表(Hash table)(散列表)散列表(Hash table,也叫哈希表),是根據關鍵碼值(Key value)而直接訪問的數據結構。也就是說,它通過把關鍵碼值映射到表中的一個位置來訪問記錄,以加快查找的速度。這個映射函數叫做散列函數,存放的數組叫做散列表。給定表M,存在函數f(key),對任意給定的關鍵字值key,帶入函數後若能得到包含該關鍵字的記錄在表中的地址,責成M為哈希表...原创 2019-05-27 11:58:58 · 210 阅读 · 0 评论 -
01.5二叉樹
二叉樹(Binary Tree)基本介紹二叉樹是每個結點最多有兩個子樹的結構。通常子樹被稱作“左子樹”(left subtree)和“右子樹”(right subtree)。二叉樹通常被用於實現二叉查找和二叉堆。前序遍歷:首先訪問根,再前序遍歷左(右)子樹,最後先序遍歷右(左)子樹。中序遍歷:首先中序遍歷左(右)子樹,再訪問根,最後中序遍歷右(左)子樹。後序遍歷:首先後序遍歷左(右...原创 2019-05-27 11:57:49 · 327 阅读 · 0 评论 -
01.4鏈錶
鏈錶(linked list)基本介紹鏈錶由一系列結點組成,結點可以在運行時動態生成。每個節點包括兩個部分:一個是儲存數據元素的數據域,另一個是儲存下一個結點地址的指針域。單向鏈錶單鏈表一般應設頭指針指向開始節點,終端結點的指針域為空,即NULL。單鏈表的建立有頭插法和尾插法兩種。代碼案例type Node struct { no int//序號 name stri...原创 2019-05-27 11:56:34 · 178 阅读 · 0 评论 -
01.3棧
棧(stack)基本介紹棧又名堆棧,它是一種運算受限的線性表。其限制是僅允許在表的一段進行插入和刪除運算。這一端被稱為棧頂,相對的,把另一端稱為棧底。向一個棧插入新元素又稱作進棧、入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素;從一個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使其相鄰元素稱為新的棧頂元素。應用場景子程序的調用:在跳向子程序前,會將下個指...原创 2019-05-27 11:54:54 · 194 阅读 · 0 评论 -
01.2 隊列
隊列(queue)基本介紹隊列是有序列表,可用數組、鏈錶實現,先入先出(FIFO)的原則。隊列只允許在表的前端(front)進行刪除操作,在表的後端(rear)進行插入操作。順序隊列使用兩個指針管理順序數組,隊頭指針(front)指向隊頭元素;隊尾指針(rear)指向下一個入隊元素的儲存位置。隊尾插入一個元素時,rear增1;隊頭刪除一個元素時,front增1。當front=r...原创 2019-05-27 11:49:00 · 219 阅读 · 0 评论 -
01.1稀疏數組
稀疏數組(sparse array)基本介紹當數組中大部分元素都是同一值時可以使用稀疏數組保存以節省空間。一般用作保存二維數組(棋盤、地圖等)。應用實例如下二維數組:0100001000關鍵代碼://壓縮//每個結構體對應響應的數值type ValNode struct { row int col int ...原创 2019-05-27 11:46:22 · 169 阅读 · 0 评论