Time of Update: 2018-12-04
/*17-8-09-11-21.20.h -- 第十七章第八題 */#ifndef LAST_H_#define LAST_H_#define ADD_AN_ITEM 1#define SIZE 20/*定義資料類型*//*Name_And_Pet 暴露給使用者的資料類型*/typedef struct name_and_pet{char petname[SIZE] ;/*寵物名*/char petkind[SIZE] ;/*寵物種類*/} Name_And_Kind ;typedef
Time of Update: 2018-12-04
/* 17-8-09-11-21.54.c -- 第十七章第八題 *//*17-8-10-17-10.56.c -- 當初決定先去看資料結構回頭再弄這東西我覺得是正確的*/#include <stdio.h>#include <string.h>#include <stdlib.h>#include "17-8-09-11-21.20.h"/*局部函式宣告*/static Item * Make_Item (const Name_And_Kind *
Time of Update: 2018-12-04
1,動態儲存裝置方式與靜態儲存方式①區別與聯絡區別:局部變數與全域變數是從範圍的角度對變數類型的劃分,而靜態儲存方式以及動態儲存裝置方式則是從變數存在的時間,即生存期角度對變數類型的劃分。前者從空間的角度入手,後者從時間的角度入手。聯絡:兩者相互交織,一起結合來刻畫變數的類型。②定義:靜態儲存方式:程式運行期間由系統分配固定的儲存空間的方式。動態儲存裝置方式:程式運行期間根據需要進行動態分配儲存空間的方式。③鋪墊使用者區分為:程式區、靜態儲存區、動態儲存裝置區。資料分別存放在靜態儲存區與動態儲存
Time of Update: 2018-12-04
層序遍曆,寫完了,感慨下. 不同於前序走訪,中序遍曆,後序遍曆,層序遍曆沒有使用棧模式,而是使用了隊列. 隊列中的資料,即QueueItem是二叉搜尋樹結點指標,這樣可以儲存結點,並且可以方便處理棧為空白時傳回值的問題.也就是可以返回NULL. 用一個函數實現,該函數接受一個Tree類型的變數.沒有傳回值. 首先樹的根結點入隊,而後以隊列不為空白為條件進行迴圈.迴圈內部首先從隊列中刪除一個結點,並通過DeleteQueue ()
Time of Update: 2018-12-04
void PostorderThreading (Tree * const ptree) ;static void Postorder_Threading (Tree * const ptree, Node * * const previous) ;void PostorderThreadedTraversal (const Tree tree, void (* pfun) (const Item item)) ;static void
Time of Update: 2018-12-04
話說這個東西原本以為很快就會寫好,即使是前天才看是看的.實現部分用的就是一個表和size個鏈表.可事實上我寫了不下8小時...寫完了就好啊,不然我會很鬱悶呢. 主要卡殼的地方就是定義資料類型的時候,我反反覆複更改了不下五遍.不想回憶起那些錯誤的行為,我想把我實現的思想說出來來協助自己強化記憶. 分離連結散列表用來解決衝突的問題,一旦發生衝突時就可以把資料放入相應索引指標指向的鏈表中.
Time of Update: 2018-12-04
int Insert (Tree * const ptree, const Item * const pitem){Node * new_node ;Node * parent, * scan = *ptree ;if (NULL == (new_node = Make_Node (pitem)))return 0 ;if (TreeIsEmpty (ptree)){*ptree = new_node ;(*ptree) -> left = NULL ;(*ptree) ->
Time of Update: 2018-12-04
/*threaded_tree.h -- 線索樹標頭檔*/#define LINK 0#define THREAD 1/*資料類型定義*/typedef int Item ;typedef struct node{Item item ;struct node * left ;struct node * right ;int left_tag ;int right_tag ;} Node ;typedef struct node * Tree ;/*介面函式宣告*//*操作:初始化一棵線索樹*//
Time of Update: 2018-12-04
Tree min_avl_tree(const int height){int last_node_assigned = 0 ;return gen_tree (height, &last_node_assigned) ;}Tree gen_tree (const int height, int * const lastnode){Tree tree ;if (height >= 0){tree = (Node *) malloc (sizeof (Node)) ;tree
Time of Update: 2018-12-04
/*threaded_tree.c -- 線索樹實現檔案*/#include <stdio.h>#include <stdlib.h>#include "threaded_tree.h"/*局部函式宣告*/static Node * Make_Node (const Item * const pitem) ;static int Left_Is_Greater_Than_Right (const Item left, const Item right) ;static
Time of Update: 2018-12-04
Tree generate_ideal_binary_search_tree (const int height, int * const assigned_min){Tree tree ;if (height >= 0){tree = (Node *) malloc (sizeof (Node)) ;tree -> left = generate_ideal_binary_search_tree (height - 1, assigned_min) ;tree ->
Time of Update: 2018-12-04
我的第一顆AVL樹.弄了一天,雖然還沒有最終測試完畢./* AVLTree.h -- AVl樹標頭檔*//*資料類型定義*/typedef int Item ;typedef struct node{Item item ;struct node * left ;struct node * right ;int height ;} Node ;typedef Node * Position ;typedef Position Tree
Time of Update: 2018-12-04
/* AVLTree.c -- AVL樹實現檔案*/#include <stdio.h>#include <stdlib.h>#include "AVLTree.h"/*局部函式宣告*/static int Left_Above_And_Beyond_Right (const Item left, const Item right) ;static int Left_Is_Less_Than_Right (const Item left, const Item
Time of Update: 2018-12-04
終於完成了AVL樹插入常式的非遞迴實現.話說我是前天開始接觸AVL樹,今天用了一天時間完成了非遞迴插入常式.準確地說,應該是6小時.即使測試正確,還是願意以此種形式溫習、理解一下.也想顯擺顯擺,因為在我看來,學AVL樹第三天寫出非遞迴插入常式很了不起了.如果你覺得我好笑,那你也不應該怪我,你該認為我是一個笨到用了三天才解決此問題又在這裡炫耀的一個可悲的人;如果你覺得我了不起,那麼我是一個天才. 後記:今天又弄了大約3個小時才徹底弄完...哎,昨天的話說得好冒失,,,不過留在那裡就當警鐘了.
Time of Update: 2018-12-04
static Node * search_the_deepmost_node (const Tree tree){Node * left_node, * right_node ;if (tree != NULL){left_node = search_the_deepmost_node (tree -> left) ;right_node = search_the_deepmost_node (tree -> right) ;if (NULL == left_node
Time of Update: 2018-12-04
/* splay_tree.h -- 伸展樹標頭檔 *//*資料類型定義*/typedef int Item ;typedef struct node{Item item ;struct node * left ;struct node * right ;} Node ;typedef Node * Position ;typedef Node * SplayTree ;/*介面函式宣告*//*操作:初始化一棵伸展樹*//*操作前:ptree
Time of Update: 2018-12-04
void PreorderThreading (Tree * const ptree) ;static void Preorder_Threading (Tree * const ptree, Node * * const previous) ;void PreorderThreadedTraversal (const Tree tree, void (* pfun) (const Item item)) ;void PreorderThreading (Tree * const ptree){
Time of Update: 2018-12-04
/*Separate_Chaining_Hash -- 分離連結散列表實現檔案*/#include <stdio.h>#include <stdlib.h>#include "Separate_Chaining_Hash.h"/*局部資料類型定義*/typedef struct pair{ListNode * parent ;ListNode * current ;} Pair ;/*局部函式宣告*/int Get_Prime_Size (const int size)
Time of Update: 2018-12-04
學樹第四天,第一課伸展樹.寫了8小時,好睏啊.感覺真好.寫完自己又讀了一遍,記下了. 貼出來,還希望有人願意跟我交流./* splay_tree.c -- 伸展樹實現檔案*/#include <stdio.h>#include <stdlib.h>#include "splay_tree.h"/*局部資料類型定義*/typedef Position Stack_Item ;typedef struct stack_node{Stack_Item item
Time of Update: 2018-12-04
/*open_addressing_hash.h -- 開放定址散列表標頭檔*/enum KindOfEntry {Legitimate, Empty, Deleted} ;/*資料類型定義*/typedef int Item ;typedef struct cell{Item item ;enum KindOfEntry info ;} Cell ;typedef struct hashtable{int size ;Cell * lists ;} * HashTable ;/*介面函式宣告*