原创 二叉樹的非遞歸實現
之前一直覺得二叉樹使用遞歸來實現就感覺有點繞,今天才發現二叉樹使用非遞歸來實現更加的繞,但是考慮到我們得使用非遞歸來提高二叉樹的遍歷效率,使用非遞歸是一種比較好的方法。 三種遞歸遍歷對遍歷的描述,思路非常簡潔,最重要的是三種方法完全統
原创 二叉樹的遞歸實現
二叉樹是一種非常有用的結構,二叉樹是每個節點最多有兩個子樹的樹結構。通常子樹被稱作“左子樹”(left subtree)和“右子樹”(right subtree)。二叉樹常被用於實現二叉查找樹和二叉堆。 二叉樹的每個結點至多隻有二棵子
原创 線索二叉樹
用二叉樹作爲存儲結構時,取到一個節點,只能獲取節點的左孩子和右孩子,不能直接得到節點的任一遍歷序列的前驅或者後繼。但是常常我們會想要更加直觀的知道節點的前驅後繼。線索二叉樹顯得尤爲的重要。 線索二叉樹的關鍵就是要定義一個全局變量來存放
原创 數據結構之二叉搜索樹
一。定義:二叉搜索樹(Binary Search Tree),也稱有序二叉樹(ordered binary tree),排序二叉樹(sorted binary tree),是指一棵空樹或者具有下列性質的二叉樹:1. 若任意節點的左子樹不空,
原创 Linux下的進度條小程序
本文的題目就是實現一個進度條,進度條的應用在軟件中無處不在,拷貝一個文件需要一個進度條,加載一個文件也需要一個進度條,來標誌完成與否。 那麼 ,一個進度條有哪些元素呢:一個不斷向右生長的容器(直觀的看出當前的進度)一個數據化
原创 數據結構之堆(Heap)的實現
堆數據結構是一種數組對象,它可以被視爲一棵完全二叉樹結構,所以堆也叫做二叉堆。二叉堆滿足二個特性: 1.父結點的鍵值總是大於或等於(小於或等於)任何一個子節點的鍵值。 2.每個結點的左子樹和右子樹都是一個二叉堆(都是最大堆或最小堆)
原创 數組中出現次數超過一半的數字
題目:數組中有一個數字出現超過數組長度的一半,請找出這個數字。列入輸入一個長度爲9的數組{1,2,3,2,2,2,5,4,2},由於數字2在數組中出現了5次,超過數組長度的一半,因此輸出2。 看到題目的第一感覺就是要先把未排序的數
原创 位圖
位圖算法是一種使用二進制位來表示一個數是否存在的算法。 一個字節是八位二進制,可以表示兩種狀態,1和0。1表示存在,0表示不存在。 四個字節是32位二進制,可以表示32種狀態。 八個字節是64位二進制,可以表示64種狀態。 比如
原创 優先級隊列
優先級隊列首先是一個隊列,但是它強調的是“優先”,所以優先級隊列又分爲最大優先隊列和最小優先隊列。 最大優先級隊列:每次從隊列中取出優先級最大的數據,刪除數據也是刪除優先級最大的數據。 最小優先級隊列:每次從隊列中取出優先級最小的數據,
原创 類模板的分離編譯
一直覺得模板類是特別神奇的東西,它可以構造出不同類型的對象,使代碼更加的靈活。這個過程就是類模板的實例化。 我們使用類的模板寫一個stack類:#include<assert.h> #include"Seqlist1.h" using
原创 數據結構之二叉搜索樹
一。定義:二叉搜索樹(Binary Search Tree),也稱有序二叉樹(ordered binary tree),排序二叉樹(sorted binary tree),是指一棵空樹或者具有下列性質的二叉樹:1. 若任意節點的左子樹不空,
原创 數組中出現次數超過一半的數字
題目:數組中有一個數字出現超過數組長度的一半,請找出這個數字。列入輸入一個長度爲9的數組{1,2,3,2,2,2,5,4,2},由於數字2在數組中出現了5次,超過數組長度的一半,因此輸出2。 看到題目的第一感覺就是要先把未排序的數
原创 Linux下的進度條小程序
本文的題目就是實現一個進度條,進度條的應用在軟件中無處不在,拷貝一個文件需要一個進度條,加載一個文件也需要一個進度條,來標誌完成與否。 那麼 ,一個進度條有哪些元素呢:一個不斷向右生長的容器(直觀的看出當前的進度)一個數據化
原创 布隆過濾器(Bloom Filter)
布隆過濾器(Bloom Filter)是1970年由布隆提出的。它實際上是一個很長的二進制向量和一系列隨機映射函數。布隆過濾器可以用於檢索一個元素是否在一個集合中。它的優點是空間效率和查詢時間都遠遠超過一般的算法,缺點是有一定的誤識別率
原创 Linux下C程序的鏈接過程
今天看到一個很有意思的小程序,它讓我對Linux下C程序的編譯鏈接有了一個全新的認識! 這個程序的就是寫一個簡單的輸出“hello World!”: 要求:1.不使用C運行庫,寫一個獨立於任何庫的程序。(也就是說我們不能#inc