原创 圖的五種存儲結構

圖是由頂點和邊或弧兩部分來組成,所以分兩個結構來分別存儲。 1、鄰接矩陣 圖的鄰接矩陣存儲方式是用兩個數組來表示圖。一個一維數組存儲圖中頂點信息,一個二維數組(稱爲鄰接矩陣)存儲圖中的邊或弧的信息。 無向圖的邊數組是一個對稱矩陣。有了這個

原创 最短路徑

對於網圖來說,最短路徑是指兩頂點之間經過的邊上權值之和最少的路徑,並且我們稱路徑上的第一個頂點是源點,最後一個頂點是終點。 迪傑斯特拉算法: 解決了從某個源點到其餘各頂點的最短路徑問題。此算法的時間複雜度是O(NxN)。 #define

原创 樹的存儲結構

1、雙親表示法 以一組連續空間存儲樹的結點,同時在每個結點中,附設一個指示器指示其雙親結點在數組中的位置。其中data是數據域,存儲結點的數據信息。parent是指針域,存儲該結點的雙親在數組中的下標。 # define MAX_TREE

原创 查找的相關概念

查找表是由同一類型的數據元素(或記錄)構成的集合。 關鍵字是數據元素中某個數據項的值,又稱爲鍵值,用它可以標識一個數據元素。也可以標識一個記錄的某個數據項,我們稱爲關鍵碼。 若此關鍵字可以唯一地標識一個記錄,則稱此關鍵字爲主關鍵字。對於不

原创 赫夫曼樹

從樹中一個結點到另一個結點之間的分支構成兩個結點之間的路徑,路徑上的分支數目稱做路徑長度。 樹的路徑長度就是從樹根到每一個結點的路徑長度之和。 結點的帶權路徑長度爲從該結點到樹根之間的路徑長度與結點上權的乘積。 樹的帶權路徑長度爲樹中所以

原创 二叉樹的存儲、遍歷、建立

二叉樹的存儲: 1、順序存儲: 對於一般的二叉樹,添加一些空結點,使之成爲完全二叉樹。按照完全二叉樹層序編號,把結點依次存儲在一維數組中。把空結點設置爲“^”。 2、二叉鏈表: 二叉樹樹每個結點最多有兩個孩子,所以爲它設計一個數據域和兩個

原创

串是由零個或多個字符組成的有限序列,又稱爲字符串。 串中的字符數目稱爲串的長度。 零個字符的串稱爲空串,它的長度爲零。 空格串,是隻包含空格的串。空格串是有內容有長度的,而且可以不止是一個空格。 子串與主串,串中任意個數的連續字符組成的子

原创 關鍵路徑

AOE網:在一個表示工程的帶權有向圖中,用頂點表示事件,用有向邊表示活動,用邊上的權值表示活動的持續時間,這種有向圖的邊表示活動的網,我們稱之爲AOE網。 把路徑上各個活動所持續的時間之和稱爲路徑長度,從源點到匯點具有最大長度的路徑稱爲關

原创 順序查找

順序查找又叫線性查找,是最基本的查找技術,它的查找過程是:從表中第一個(或最後一個)記錄開始,逐個進行記錄的關鍵字和給定值的比較,若某個記錄的關鍵字和給定值相等,則查找成功,找到所查的記錄;如果直到最後一個(或第一個)記錄,其關鍵字和給定

原创 最小生成樹

最小生成樹:我們把構造連通網的最小代價生成樹稱爲最小生成樹。 普里姆算法: 假設N = {V, E}是連通網,TE是N上最小生成樹中邊的集合。算法從U={u0}(u0∈V),TE={}開始。重複執行下述操作:在所有u∈U,v∈V-U的邊

原创 線索二叉樹

線索二叉樹: 對於一個有n個結點的二叉鏈表,每個結點有指向左右孩子的兩個指針域,所以一共是2n個指針域。而n個結點的二叉樹一共有n-1條分支線,也就是說存在n+1個空指針域。 我們可以考慮利用那些空地址,存放指向結點在某種遍歷次序下的前驅

原创 棧的應用

棧的應用1--遞歸 把一個直接調用自己或通過一系列的調用語句間接地調用自己的函數,稱做遞歸函數。 寫遞歸最怕的就是陷入永不結束的無窮遞歸中,所以,每個遞歸定義必須至少有一個條件,滿足時遞歸不再進行,即不再引用自身而是返回值退出。 迭代和

原创 拓撲排序

AOV網:在一個表示工程的有向圖中,用頂點表示活動,用弧表示活動之間的優先關係,這樣的有向圖爲頂點表示活動的網,我們稱爲AOV網。 拓撲序列:設G={V, E}是具有n個頂點的有向圖,V中的頂點序列v1, v2, ……vn,滿足若從頂點v

原创 水王問題

/* *問題:“水王”的帖子超過論壇帖子的一半,如何從所有帖子中,找出“水王”的ID(每個帖子都包含了作者的ID)? *思路:把問題轉化爲如何在一個長度爲N的無序數組中,找出出現次數超過一半的數? *解法1:先將數組中N個數字排序,

原创 二叉查找樹轉換爲有序雙向鏈表

將二叉排序樹轉換爲有序的雙向鏈表,只需調整結點的指針位置。見代碼 #include <stdio.h> #include <stdlib.h> #define TRUE 1 #define FALSE 0 typedef int St