Time of Update: 2018-12-04
歐拉迴路寫出來了,歐拉環遊也自然不在話下.多了一些條件檢測就好了,只能說我為了這個實現做了很充分的準備./*9-32(b)-12-31-12.37.c -- 第九章第三十二題*/#include <stdio.h>#include <stdlib.h>#include "new_adjacenty_list.h"#include "rqueue.h"#define SIZE (12)int g_last_path = INFINITY ;int main (void)
Time of Update: 2018-12-04
這個,主要體現的是思想.問題在一開始就被定義在了一道已知的習題上,所以並沒有什麼通用性.實現中,如果在棧中儲存名字的同時儲存索引,那麼,將會省去很多次函數調用.而且,散列在我這個實現中也沒有發揮作用,我會去實現的. 基本的思路,就是這樣,理解得還算不錯,哈哈. 可喜可賀的是,好幾天沒有寫代碼了.冷不丁一寫,成功率出奇地高.和專心程度有關嗎?加油吧.留給自己的時間不多了,每一天都要努力!/*9-3-12-07-20.06.c -- 第九章第三題*/#include <stdio.h&
Time of Update: 2018-12-04
/*hash.h -- 雜湊表標頭檔*/enum KindOfEntry {LEGITIMATE, EMPTY, DELETED} ;#define PRIME (7)#define FAILED (-2)#define NUL ('/0')#define FALSE (0)#define TRUE (1)/*資料類型定義*/typedef char Name ;typedef struct cell{Name name ;int be_deleted
Time of Update: 2018-12-04
/*adjacenty_list.c -- 鄰接表實現檔案*/#include <stdio.h>#include <stdlib.h>#include "adjacenty_list.h"/*局部函式宣告*/Vertex * Make_Vertex (const Name vertex) ;/*介面函數定義*/int CreateAdjacent_List (Adjacent_List * const padj, const int capacity){int
Time of Update: 2018-12-04
/*hash.c -- 雜湊表實現檔案*/#include <stdio.h>#include <stdlib.h>#include "hash.h"/*局部函式宣告*/static int Get_A_Prime (const int number) ;static int Is_A_Prime (const int number) ;static int Square (const int i) ;/*介面函數定義*/int Hash (const
Time of Update: 2018-12-04
用來類比使用線性探測法散列,平方探測法散列,雙散列發生衝突的次數. 可指定隨機序列大小,可反覆產生隨機序列.可指定表的大小,並可更改表的大小.方便對各種長度隨機數序列,各種大小的表進行類比測試.實現思想就是用表的指定大小建立一個數組,並將所有元素初始化為0.進行類比時,根據隨機序列中的所有數值依次計算出在表中的索引,如果表中該索引的元素為0,將該元素置為OCCUPANCY,否則衝突計數器++,並嘗試下一次類比插入.重複此過程,之後返回衝突計數器的值,釋放表的空間.
Time of Update: 2018-12-04
一晃又是好幾天.總算今天是有代碼出現了. 自頂向下伸展樹,比去年寫的那個伸展樹輕鬆多了. 人家總結出來的東西,我看懂了,完全讓我自己寫的話,很難啊. 這段代碼,有些技巧.說的就是"NullNode"到底是怎麼回事,具體的自己看代碼吧.而且,發現自己的C語言功底還不夠,自己補了下,而且接下來會有意識地學一學了. 不多說了.還有,下周去報名,程式員考試.我幹勁. /*SplayTree.h -- 自頂向下伸展樹標頭檔*//*酒後寫的標頭檔哦.*/#include <stdio.h&
Time of Update: 2018-12-04
紅/黑樹狀結構,記得剛買那本書的時候我就發現有這個東西,覺得很神秘,終於接觸到了,並且,我已經寫出來了.很高興. 插入的常式是書上內建的,我給代碼實現了.細節部分,我並不是很清楚.刪除常式,是自己寫的,全下來寫了大概15小時,很辛苦.昨天晚上到家就開始寫,今天到家也是立刻就開始寫,寫完了. 我想說的是,關於刪除常式, 演算法部分的自己構建我很滿意,旋轉部分的細節實現以及細節,也是自己發現並總結的,而且是對的.很辛苦的過程啊,堅持過來了,哈哈.
Time of Update: 2018-12-04
只是將演算法的主常式邊的權值改為異號的,即可完成這個演算法.我的初衷是將最小堆改成最大堆.但事實證明,這是行不通的.貼代碼./*9-20-12-22-11.16.c -- 第九章第二十題*/#include <stdio.h>#include <stdlib.h>#include "binary_heap_for_kruskal.h"#include "disjiont_set.h"#define SIZE (10)int main (void) ;void
Time of Update: 2018-12-04
這個東西,保證了樹的深度很低,而且旋轉的次數很少.較同類的AVL樹有了很大的提高.但是實現起來,並不簡單. 好吧,繼續我的習慣,代碼說明問題./*RedBlackTree.c -- 紅/黑樹狀結構實現檔案*/#include "RedBlackTree.h"/*全域變數引用*/extern Node * NullNode ;extern Node * Current, * Sibling, * Parent, * GrParent, * GrGrParent
Time of Update: 2018-12-04
數組的棧,好久沒有寫了.這次的寫,加深了理解,更加深刻地體會到常式中的技巧與實用./*stack.h -- 棧標頭檔*/#define EMPTY_TOP (-1)/*資料類型定義*/typedef int Stack_Item ;typedef struct stack{Stack_Item * array ;int capacity ;int top ;} * Stack ;/*介面函式宣告*//*操作:建立並初始化一個棧*//*操作前:pstack 指向一個棧, capacity
Time of Update: 2018-12-04
這個用來找到一個無向圖中的所有割點,實現方式從簡,常式正確. 這個演算法,對有向圖是行不通的. 通過一次深度優先搜尋計算number[], 而後一趟後序遍曆計算low[]來實現. 說真的,我是基本不懂.代碼還是寫出來了,有點印象,日後好也有個參考./*9-21-12-23-08.55.c -- 第九章第二十一題*/#include <stdio.h>#include "new_adjacenty_list.h"#define SIZE (7)/*Global
Time of Update: 2018-12-04
書上的一道習題,本以為很簡單,卻一不小心搞了5個小時.還好,搞出來了. 不多說了,貼代碼,很清楚的代碼.Node * FindKthMin_S (const SplayTree * const pst, int k){Node * scan ;if (k > (*pst) -> current || k <= 0)return NULL ;scan = (*pst) -> root ;while (1){if (scan ->
Time of Update: 2018-12-04
/*stack.c -- 棧實現檔案*/#include <stdio.h>#include <stdlib.h>#include "stack.h"/*介面函數定義*/int Initialize_S (Stack * const pstack, const int capacity){if (capacity <= 0)return 0 ;*pstack = (struct stack *) malloc (sizeof (struct stack)) ;if
Time of Update: 2018-12-04
反轉一個鄰接表,沒有考慮權值.是為另一個常式服務的一個函數.貼出來吧.int Reverse_A (Adjacenty_List * const padj, const Hash_Table * const pht){Name name ;Adjoin_To_Vertex * scan, * new_vertex, * temp_1, * * temp_2 ;int w, i, capacity = (*padj) -> capacity ;for (i = 0; i <
Time of Update: 2018-12-04
話說這個東西,寫了不下12小時.我堅持寫完了,並且寫對了.我很高興. 通過寫這個東西,加強了對尋找割點問題的認識,從而認識,並明白了尋找雙連通分支的過程. 我想要說明的是,深度優先搜尋,深度優先.從 (v, w) 開始的深度優先搜尋, 在回到調用 (v, w) 的那次調用之前, (w, v) 已經被處理過.這保證一條邊不會入棧兩次.同時, 也同時可以避免已被作為背向邊處理的 (v, w) 入棧.這都是通過 if (!Find_L (pli, w, index)) 來實現的.
Time of Update: 2018-12-04
/*Stack_ADT.c -- 棧模型實現檔案*/#include <stdio.h>#include <stdlib.h>#include "Stack_ADT.h"/*局部函式宣告*/static Stack_Node * Make_Node (const Name * const panme) ;/*介面函數定義*/int InitializeStack (Stack * const pstack){*pstack = (Stack_Node *) malloc
Time of Update: 2018-12-04
/*k-dTree.c -- k-d樹實現檔案*/#include "k-dTree.h"/*局部函式宣告*//*隊列部分*/static QueueNode * makeNode_Q (Node * const pn, const int index) ;/*k-d樹部分*/static Node * makeNode_K (const Item * const pi, const int k) ;static BOOL within_K (const Item * const pi,
Time of Update: 2018-12-04
這東西,寫了8小時.比較慢了.實現是一步一步地完成的.方法概述如下: 1.對原圖進行一次深度優先搜尋,以後序對各頂點標號. 2.將原圖反轉. 3.在新圖中,按照頂點標號從大到小的順序對所有頂點逐個檢查,並進行深度優先搜尋.每一次調用深度優先搜尋之後,下次調用時到調用結束階段,聲場的深度優先搜尋樹中的所有節點是強聯通的.
Time of Update: 2018-12-04
話說,這個東西我寫了前前後後4天有餘, 光今天就寫了10小時.終於寫完了.感觸頗多啊.! 新的資料結構需要以前的資料結構結合使用,我沿著思路,進行設計,之後開始動筆,呵呵.開始寫,就是. 從Hash表,到鄰接表,再到二元堆積,磕磕絆絆,自己寫得比較著急,結果我還沒有那麼熟練,無法快速完成.能夠完成,我就已經很高興了.呵呵. 很多概念,是隨著寫代碼靈光起來的.寫著寫著,想起來書上原來有講過,呵呵.