原创 自己實現的getenv和getenv_r,驗證線程是否可重入,即是否線程安全

UNIX高級環境編程中說到getenv函數是不可重入的,因爲它用的是全局的靜態存儲區,由於對它進行了些操作(strcpy)而沒有加鎖,所以當多個線程訪問的時候會出現錯誤. 書上給了程序,如何驗證呢,是個問題.所以我們可以把環境變量中的值重

原创 hash表線性探測法

準備把最近寫的一些代碼一一貼出來,也算是總結吧。只能怪大學時候寫的代碼很少,所以讀研瘋狂寫代碼,把數據結構裏面的所有東西都實現了一遍,包括圖論中裏面的算法。//hash table 的線性探測法,進行溢出處理 #include<stdio

原创 數組中,只有一個/兩個/三個數只有一個,其他都爲偶數個,找出只有一個的數

解決方案1: 先排序,後比較,時間複雜度爲O(nlogn+n) 解決方案2: 採用位運算。 因爲 0^ a=a, a^a=0; 所以只有1個不同時,循環異或一遍,結果便是。 只有兩個不同時,循環異或一遍,結果便是x=a^b,因爲a!=b

原创 圖論所有的算法實現。DFS,BFS,Dijkstra,Floyd,Topsort,Kruskal,Prim,

參考資料: //http://blog.csdn.net/cxllyg/article/details/7606184 //http://2728green-rock.blog.163.com/blog/static/4363679020

原创 hash表的拉鍊法解決衝突

//拉鍊法對hash table的溢出處理 #include<stdio.h> #include<string.h> #include<malloc.h> #define MAX_CHAR 10 #define TABLE_SIZE 13

原创 fflush用法的注意事項

今天寫代碼的時候調試程序,老是出現段錯誤,通過gdb發現在用scanf輸入數據時,裏面的字符'\n'被讀入了。 廢話不多說,通過例子講解。 #include<stdio.h> void main() { int i; char c;

原创 用宏實現簡單的多態 簡單小技巧

<pre name="code" class="plain">#include<stdio.h> #include<malloc.h> #define List(X) \ struct list_##X \ {\ X data;\ s

原创 用棧實現表達式求值

以前文章中寫過一個表達式求值,但是邏輯有點亂,所以重新寫了一個,該程序目前只支持個位數內的加減乘除,和以前的實現思想不一樣,採用的是後綴表達式的思想,不知道的可以到網上去查查資料。覺得這樣的思想,更容易理解。 通過這個程序讓我收穫挺大,由

原创 項目需要寫了一個,內核紅黑數代碼的封裝使用

/* * ============================================================================= * * Filename: rbtree.h *

原创 並查集

並查集是一個非常精巧的數據結果,可以用來解決等價類劃分問題,當時做了一個網上的ACM題和查一些資料才發現,離散數學的作用強大。也就是說現實生活中滿足自反性,對稱,傳遞三個性質的問題我們都可以用並查集來解決劃分類的問題。比如說求連通子圖的問

原创 二叉樹的各種操作的(遞歸非遞歸)的實現,如(遞歸非遞歸)先序後序中序層次遍歷 二叉樹的高度 葉子節點數,所有節點數

//BinaryTree.h #define CHAR //當CHAR定義時,用字符的處理模式 //當CHAR沒有被定義時,採用整數處理模式 #ifdef CHAR //數據類型的定義 typedef char DataType; #el

原创 實現一個字符串中單詞個數的統計,並按照單詞字典序輸出單詞以及單詞的出現個數。使用strsep

請你實現一個字符串中單詞個數的統計,並按照單詞字典序輸出單詞以及單詞的出現個數。Hint:a.不考慮標點符號.b.如果有單詞是大寫將單詞轉換爲小寫統

原创 多線程線程互斥量屬性中的遞歸和非遞歸屬性

多線程屬性類型分爲4中,正常的非遞歸,遞歸,默認,以及具有死鎖檢查機制. 遞歸和非遞歸的區別: 非遞歸:當一個線程已獲得鎖,其他線程阻塞,不允許該線程獲得鎖兩次,否則死鎖. 遞歸:允許該線程獲得鎖多次,只要釋放鎖的次數等於獲得鎖的次數即可

原创 strtok,strtok_r,strtsep

分割字符串的時候,一般想到用strtok,但是該函數使用時需要很小心,而且結果有的時候讓人費解。 比如說網上這段代碼: 比如,分隔符=“,” 字符串=“Fred,John,Ann” 通過strtok 就可以把3個字符串 “Fred”  

原创 二叉查找樹帶父節點指針的創建,銷燬,查找,刪除,插入,找前驅後繼,找最小值最大值(遞歸和非遞歸的實現)

#include<stdio.h> #include<malloc.h> #include<stdlib.h> #include<time.h> typedef int bool ; #define true 1 #define f