原创 對於C語言free()函數的一些反思

上週在解決一道課後習題的時候,偶然間發現了一個自己從未注意過的問題,問題描述如下: 在遍歷一個循環鏈表時,我發現在我調用free()函數刪除了一個節點之後,仍然能用printf打印出原先的數據,起初我以爲是巧合,並未加以

原创 二叉樹幾種遍歷算法的非遞歸實現

二叉樹遍歷的非遞歸實現 相對於遞歸遍歷二叉樹,非遞歸遍歷顯得複雜了許多,但換來的好處是算法的時間效率有了提高。下面對於我學習非遞歸遍歷二叉樹算法的過程進行總結 爲了便於理解,這裏以下圖的二叉樹爲例,分析二叉樹的三種遍歷方式的實

原创 Git學習之路(一) 建立版本庫並實現文件操作

一.引入Git Git是目前最大的開源版本控制系統,那麼說到版本控制,到底什麼是版本控制呢?爲什麼要進行版本控制呢? 當我們在編寫代碼的過程中,有時候要增加一個新功能,於是若干天之後新功能實現了,但在反覆的測試過程中發現代碼中存在

原创 棧的思想用於求解迷宮問題

迷宮問題是一個經典的問題,當迷宮規模較大時,手工求解是十分困難的,所以用善於進行重複繁瑣計算的計算機來求解便十分合適。基本思想和解決“八皇后問題” 的思想一致,都是利用回溯法。從入口開始,探索每一個迷宮中沒有被牆擋住的位置,如果該

原创 面試中關於二叉樹的常見習題(持續更新)

這兩天看了幾篇關於面試中關於二叉樹的常見問題,感到思路得到了很大的拓展,對遞歸的理解也更加深入,下面將問題及代碼總結如下: Q1:求二叉樹第k層的結點個數 A:遞歸思路:空樹返回0;只有根節點返回1;其餘情況對左右子樹進行遞歸,

原创 二叉樹複習以及部分常見習題

今天覆習了二叉樹的鏈式存儲結構,又發現了之前忽略的一些細節問題,現在總結整理如下 問題一: 在字符串賦值函數中,未將全局變量初始化造成錯誤,說明對全局變量理解不夠深入,錯誤代碼及改正如下: Status StringAssign

原创 霍夫曼樹及霍夫曼編碼的C語言實現

從週五開始學習霍夫曼樹,一直到今天終於完成,期間遇到了各種各樣的棘手的問題,通過一遍遍在紙上分析每一步的具體狀態得以解決。現在對學習霍夫曼樹的過程加以記錄 首先介紹霍夫曼樹 霍夫曼樹(Huffman Tree),又稱最優二叉樹,是

原创 二叉樹順序存儲的實現

在實現二叉樹的順序存儲的過程中,遇到了一些問題,現記錄如下: #include<stdio.h> #include<stdlib.h> #include<math.h> #define OK 1 #define ERROR 0 #

原创 python網絡爬蟲學習(二)一個爬取百度貼吧的爬蟲程序

今天進一步學習了python網絡爬蟲的知識,學會了寫一個簡單的爬蟲程序,用於爬取百度貼吧的網頁並保存爲HTML文件。下面對我在實現這個功能時的代碼以及所遇到的問題的記錄總結和反思。 首先分析實現這個功能的具體思路: 通過對貼吧U

原创 藉助棧實現表達式的計算

這兩天要複習準備考試,博客沒有及時更新。另一方面,後綴表達式的轉化及求值的程序始終沒有寫好,讓我異常苦惱,心情也是莫名煩躁。現在表達式求值的程序已基本實現,仍有不足之處需要改進,各位可以參考,由於時間關係,無法細緻講解。將在考完試

原创 三種靜態查找的思路及具體實現

一.查找及其相關概念 查找,就是根據給定的某個值,在查找表中確定一個關鍵字等於數據值的數據元素的過程 查找表按操作方式可分爲兩種: 靜態查找表:只做查找操作的查找表 動態查找表:在查找過程中插入新的數據元素或刪除原有的數據元素 二

原创 數據結構與算法習題彙總(3)

Q:判斷一字符串是否爲迴文 A:對於這種要求輸入和輸出相反的情況,一般採用棧來解決,對於此題,只需將正序的字符串壓棧再將其全部彈出棧,判斷是否相同即可,代碼如下: #include<stdio.h> #include<stdli

原创 圖的鄰接表存儲及其實現

圖的鄰接矩陣存儲雖然直觀,但是我們容易發現其浪費空間的問題十分嚴重。在線性表中,我們引入鏈式存儲結構來彌補空間浪費的問題,同樣,在圖結構中,我們也可以用類似的方法來解決。 由此,我們想到了將數組與鏈表結合起來的方法,用數組存儲鏈表

原创 圖的鄰接矩陣存儲及其具體實現

一.圖的相關概念 1.圖的定義 2.圖的相關概念 要查看更詳盡的概念,請參閱《大話數據結構》 二.圖的鄰接矩陣存儲結構 由於圖在結構上的複雜性,我們無法簡單地用一個順序存儲結構來進行圖的存儲。由於無法用一個一維數組進行存儲,

原创 數據結構與算法習題彙總(4)

一. 用rear,front表示隊尾和隊首指針,實現循環隊列入隊,出隊算法 /*入隊列*/ status enterqueue(queue *Q,elemtype data){ if((Q->rear+1)%maxsiz