原创 由malloc等函數想到的一些問題

malloc/calloc函數作用都是在堆上分配內存,區別是malloc函數分配好內存後沒有初始化內存,而calloc函數分配好函數後會把內存清零。還有一個alloca函數是在棧上分配內存。 之前個人總是想當然的認爲malloc函數是系統

原创 linux下將資源文件編進可執行文件

有時候需要將一些圖片, 音樂或者字符串文件隨可執行文件一起打包發佈。可以用objcopy命令。 1. 準備資源文件     文件名:strings.txt     內容: well done! 2. 準備C文件     文件名:  mai

原创 內部排序算法之快速排序

快速排序是一種性能較好的算法,有最好的平均性能。由冒泡排序算法改進,採用分治思想: 1.將整個區間劃分兩個子區間p1, p2和元素k, 使得p1區間的所有元素均小於k, p2區間的所有元素均大於或等於k(這裏k成爲樞軸元素), 2.再對p

原创 IntelliJ IDEA 插件開發筆記(一)

IntelliJ IDEA 插件開發action中的group-id記錄 http://keithlea.com/idea-actions/

原创 內部排序算法之簡單插入排序

先貼一段簡單插入排序的代碼: void insertion_sort(int* p, int n) { int i, k, j; for(i=1; i<n; ++i) {

原创 利用哈夫曼編碼壓縮文件的小工具

huffan壓縮算法在大學的教材重點講過, 實現起來相對輕鬆。主體思想是用較短的編碼表示頻率較高的字節, 用較長的編碼表示頻率較少的字節, 使得總體的編碼最短。由於哈夫曼編碼不是定長編碼, 所以必須得滿足任何一個字節B1的編碼不是另一個字

原创 使用A*算法尋找路徑

使用A*算法首先需要將地圖分成一個個塊,每個塊稱爲一個節點。 算法主要是維護兩張表,openList和closeList。 openList用來保存待考察的節點,closeList用來保存不需要考察的節點。 算法的思想就是不斷考察當前節點

原创 內部排序算法之希爾排序

希爾排序是在簡單插入排序上做了改進。待排序系列長度記爲N,增量d一般取從N/2, N/4, N/8...到1的序列。希爾增量的選取決定了排序的效率。將待排序系列中,元素下標間距爲d的所有元素分爲一組, 對每組進行簡單插入排序。當d減少到等

原创 內部排序算法之堆排序

堆排序是利用堆的性質, 從縮小的排序空間中不斷的選出堆頂元素,從而達到排序的效果。 堆排序的時間複雜度主要是在不斷的調整堆以滿足堆的性質,其評價性能和最差情況都是O(logN), 平均性能差於快速排序,但最壞情況優於快速排序。 堆可以作

原创 內部排序算法之冒泡排序

冒泡排序雖然簡單,但是之前沒有細細體會過程,經常寫錯循環條件。做個筆記,以防遺忘。 將所有元素的從第一個到最後一個, 相鄰的兩個元素之間全部兩兩比較一次,逆序則交換,稱爲一趟冒泡過程。 首先,明白這樣的事實: 1. N個元素, 相鄰兩個元

原创 libev學習(一)初識libev

libev內部封裝了socket IO 模型,用戶只需要向感興趣的事件註冊回調函數,簡化了socket服務端編程。 先貼上一段socket編程中的hello world,echo服務器代碼,對libev的用法有大致印象 #include

原创 畫二叉樹小工具

學習樹的時候,經常需要在紙上畫出邏輯存儲結構。不僅不環保, 還麻煩。寫了一個畫二叉樹的小工具dtree(drawtree)。源代碼參考下面鏈接。 先上個圖 該工具是基於終端字符圖形庫ncurses實現的, 其實如果完全不用第三方庫

原创 同步異步與阻塞非阻塞的區別

之前沒有仔細體會同步異步與阻塞非阻塞的區別,有時總將他們混淆,這次做下深入的理解。 同步異步通常是指通知的機制,與CPU的查詢和中斷機制有些類似。 同步方式, 需要自己不斷輪詢狀態且不能執行其他操作, 這時會佔用CPU時間做無用功。 而異

原创 erlang學習筆記之基礎篇(常見問題小結)

由於個人的興趣,之前自學過一段時間的erlang, 後來工作忙,慢慢遺忘了,現在計劃實現一個高併發的項目,考慮到複雜性和時間限制, 又重新系統的學習erlang。總結了一些容易出現的錯誤, 這些錯誤對於剛入門的我,有時不是很輕鬆就能解決。

原创 內部排序算法之選擇排序

個人覺得選擇排序算法是最容易理解的排序算法,我們在日常生活中經常用這種方法排序。 每次從待排序的系列中選出最小的元素後,待排序的元素數目減少1,直到待排序系列中的元素個數爲1,最後這個元素就是最大的元素, 排序完成。 選出待排序系列中最小