原创 二叉樹的其他操作

    之前實現過二叉樹的創建,非遞歸遍歷和遞歸遍歷。現在添加一些其他的操作,包括:銷燬一棵樹計算樹的深度(高度).計算葉子節點的個數計算所有節點的個數複製二叉樹   具體見代碼:#include <stdio.h> #include <s

原创 樹的非遞歸遍歷

   樹是遞歸定義的,利用遞歸算法遍歷樹實現起來比較簡單,然而難的是非遞歸遍歷。非遞歸遍歷需要藉助棧這一數據結構來完成。首先定義樹的結點和構建鏈表棧://定義樹的節點 typedef struct Node { int data; stru

原创 二叉查找樹的基本操作實現

        二叉查找樹又叫二叉排序樹,其特點有:對於每一棵子樹,若左子樹不爲NULL,則左子樹所有節點都小於它的根結點值。對於每一棵子樹,若右子樹不爲NULL,則左子樹所有節點都大於它的根結點值。沒有鍵值相等的結點。完成二叉查找樹的基本

原创 順序隊列和鏈式隊列的實現

    隊列是一種常用的數據結構,它跟棧一樣,操作都受到限制,隊列只允許從一端進數據,另一端出數據。隊列跟棧不同,棧是一種“後進先出”的模式,而隊列是一種“先進先出”的操作模式。就好比日常排隊一樣,先排隊的先出,後排隊的後出。例如,進入隊列

原创 NAND Flash裸板編程

    nand flash按照我的理解,在開發板上就類似我們所用的電腦中的硬盤,用來保存系統運行的操作系統,應用程序,數據等,掉電之後還可以永久得保存數據(不包括臨時數據)。通過控制或配置NAND Flash的控制器寄存器,即可完成對na

原创 順序棧與鏈表棧的實現

    棧是一種常見的數據結構,它雖然有棧頂和棧底之分,但它只能從一端操作(插入或刪除),從而是一種“先進後出”的操作模式。向棧內進數據稱爲壓棧(Push),從棧裏取出數據叫出棧(POp)。例如壓棧順序爲1、2、3、4、5,着出棧的順序爲5

原创 delete與delete[]

    在c++中,在堆上分配內存使用的new函數,它動態分配內存,主要有三種形式:1.分配一個空間未初始化  int* p=new int;2.分配一個空間初始化  int* p=new int(初始值)3.分配一段連續空間   int*

原创 網卡移植

    Linux系統中具有相當完善的各類驅動代碼,很大時候都不需要我們從頭到尾去寫一個驅動程序,對於一些相對複雜的驅動程序,從頭到尾寫也沒這個必要,最好的方法就是移植:將廠家提供的驅動模板或Linux中相似相近的驅動程序通過修改,讓程序能

原创 服務器select模型

    多路轉接I/O服務器中的一種:select服務器,該模型的服務器是將文件描述符放入隊列中保存並監聽,以輪詢的機制去監聽這些文件描述符,當相對應的文件描述符有讀請求、寫情況或異常發生時,對應的位將發生變化。select模型需要對所有監

原创 C語言 單鏈表的實現

    鏈表由多個節點構成,節點之間可以靈活的插入、刪除。鏈表以結構體的自引用原理,可以在內存中以不連續的方式動態分配內存來存儲數據,這樣的結構體就是鏈表的一個節點。 一個節點分爲兩個域:一個是數據域,一個是指針域,這方便鏈表在存儲數據的同

原创 樹的遞歸遍歷

    樹是一個由n個有限節點組成並具有層次關係的集合,是一種非線性的數據結構。樹是由跟節點和它的子樹構成,所以樹的定義是遞歸的。二叉樹是樹的一種,它的特點是至多有兩顆字樹,並且二叉樹的子樹也有左右之分,不能互相顛倒。    二叉樹常用的遍

原创 USB驅動

    usb中文名的意思爲“通用傳輸總線”。日常生活中,usb設備到處使用,usb接口方便且高效。usb設備遵循usb傳輸協議,這個協議龐大而且複雜,我對此也不是很瞭解,書寫usb驅動,主要是參照內核代碼drivers\hid\usbhi

原创 哈弗曼樹的建立

    哈弗曼樹也稱爲最優二叉樹,它是帶權路徑長度最短的樹,權值越大的結點就離根節點越近。(一般在哈弗曼編碼中,權值表示出現的概率,即出現的概率越大,那麼訪問時的路徑就越短)。構建哈弗曼樹:將n個權值構造出n棵只有根節點的樹,構成森林。在森

原创 Git 命令總結

        git是一個很強大的分佈式版本控制系統。學習git可以參考 http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

原创 網卡驅動程序

    我們知道,Linux下的驅動分爲字符設備驅動、塊設備驅動和網絡設備驅動,網絡設備是通過socket通信實現對數據的接收和傳遞,並不會像字符設備一樣會打開某一個文件。網絡設備驅動中包含着對網卡等內部比較複雜的硬件操作和各種協議,所以現