原创 二、【數據結構】列表(list)的實現

本文使用c++實現list數據結構,list的接口函數採用高效的實現方式,這樣一方面使我加深對數據結構的理解,另一方便可以讓我再複習複習c++,通過前幾天寫的vector數據結構的底層實現,我確實又進一步地熟悉使用C++進行編程,,這次寫

原创 七、【數據結構】二叉搜索樹(bst)的解析與實現

本文使用C++實現二叉搜索樹(binary search tree,bst)數據結構。 一、爲什麼要引入二叉搜索樹 通過對向量和列表這兩類線性數據結構的原理分析,我們可以發現向量結構在對靜態查詢操作的支持比較好,有序向量的二分查找能做到在

原创 四、【數據結構】隊列(queue)的實現

本文使用C++實現隊列數據結構,與棧一樣,隊列(queue)也是線性邏輯的數據結構,隊列結構同樣支持對象的插入和刪除,但是兩種操作的對象範圍分別被限制於隊尾和隊頭,並且這兩種操作又分別被稱爲入隊和出隊。 隊列結構的特點:先進先出(Firs

原创 五、【串匹配】KMP算法詳解

串或者字符串屬於線性結構,可以使用向量和列表等很方便地實現,其也具有很鮮明的特徵:結構簡單、規模龐大、元素重複率高。在涉及字符串的衆多應用中,字符串匹配是最常使用也是最爲重要的操作。 字符串匹配算法大約有30多種,本文介紹最爲著名的KMP

原创 八、【數據結構】AVL樹的解析與實現

一、平衡二叉搜索樹 上節介紹了二叉搜索樹的概念及其意義,我們可以知道二叉搜索樹旨在把有序向量的二分查找策略融入到樹查找中從而提高二叉樹的靜態查找性能。但是search(),insert()和remove()等主要接口的運行時間,均線性正比

原创 Linux下GDB常用命令總結

一、GDB概述 Linux下的GDB調試器,是一款GNU組織開發的UNIX/Linux下的程序調試工具,它沒有圖形化的友好界面,但功能強大。 二、準備工作 (a) 安裝GDB: apt install gdb (b) 創建main.cpp

原创 六、【數據結構】圖-鄰接矩陣(adjacency matrix)的實現

本文旨採用C++實現圖數據結構,具體地以鄰接矩陣的方式實現圖數據結構。圖結構可以描述一組對象之間的二元關係,例如在城市交通中,聯接於各個公交車站之間的道侶,或者在互聯網中個網絡節點之間的路由都可以很方便地用圖結構來表述,另外在之前介紹的樹

原创 十、【數據結構】B-樹(B-tree)的解析與實現

一、B-樹的出發點 任何一種數據結構的產生都不是毫無根據憑空想象出來的,一般而言它們都是爲了解決某種問題才被設計。B-樹的產生主要是解決數據庫查找時候對外存的訪問次數的。我們知道,第一臺電腦只有一萬多個電子管,而現在一個硬盤都能TB的存儲

原创 十二、【數據結構】位圖(bitmap)的詳解與實現

一、定義     --概念部分參考http://www.iteblog.com/archives/148 位圖法就是bitmap的縮寫。所謂bitmap,就是用每一位來存放某種狀態,適用於大規模數據,但數據狀態又不是很多的情況。通常是用來

原创 九、【數據結構】伸展樹(splay tree )的解析與實現

和之前介紹的AVL樹一樣,伸展樹也是平衡二叉樹中的一種,但是它和AVL的原理不同,相比之下,伸展樹的實現更加便捷。這裏先回顧一下AVL樹的特點。 一、回顧AVL樹的特點 AVL樹保證靜態查找效率的關鍵技巧是添加約束條件,使在任意時刻(不包

原创 Unix系統進程間通信(IPC)常用方法總結

目錄 一、管道(匿名管道) 二、FIFO(命名管道) 三、消息隊列 四、信號量 五、共享內存 Unix中的IPC(InterProcess Communication)是各種進程通信的統稱,在Unix中有很多線程間通信方法,但是他們並不是

原创 三、【數據結構】棧(stack)的實現

本文使用C++實現棧數據結構,棧數據結構同之前實現的vector和list數據結構一樣都屬於線性序列結構,但是棧的數據操作範圍僅限於邏輯上的特定頂端,即只能對棧頂進行操作。由於棧結構具有的簡潔性和規範性,它既爲構建更復雜、更高級數據結構的

原创 五、【數據結構】二叉樹(binary tree)的實現

本文使用C++實現二叉樹數據結構,與之前實現的向量、列表、棧和隊列不同,樹是一種分層結構,雖然樹是分層結構,但若附加某種約束,如遍歷次序,則樹結構也可以轉變成線性次序,因此樹屬於半線性結構。樹結構具有非常多的變種,在算法理論和實際應用中,

原创 十一、【數據結構】紅黑樹(red-black tree )的詳解與實現

一、紅黑樹的存在意義 平衡二叉搜索樹的形式多樣,各具特色,如伸展樹實現簡便,不需要修改節點的數據結構即可使分攤複雜度降低到O(logn)的量級,但是在最壞情況下單次搜索操作需要Ω(n)的時間,因此其難以被使用在覈電站、醫院等對可靠性和穩定

原创 Unix系統I/O多路複用技術—select、poll、epoll總結

一、select機制 1. select函數介紹 在Unix中,select函數可以實現I/O的多路複用,傳向select函數的參數告訴內核: (1) 我們所關心的文件描述符; (2) 對於每個描述符我們所關心的狀態(是否可讀,是否可寫