原创 最小生成樹之kruskal

這個算法非常簡單,是基於邊的 從權值最小的邊開始,依次加入到最小樹中,如果當前邊會和之前的邊構成環路,那麼不加入當前邊,進行下一個邊的加入,直到所有邊都檢測一遍。檢測環路可以用一個頂點數組來標記,每加入一條邊,就把頂點標記爲1,如果當前邊

原创 程序員面試,寫代碼要點

代碼編寫規範。 聲明指針時,若沒有給他賦值,一定要賦值NULL。當函數需要對輸入的數據進行修改時,例如輸入是鏈表、二叉樹等結構是,需要向面試官詢問是否可以修改。寫函數後,第一條語句就要對輸入是否合法做判斷,指針、變量大小等等。要緊湊,可以

原创 C語言中 sizeof 與 struct

C語言中,struct是由不同類型的變量組成的。 當struct在內存存儲時,是按照內存對齊來存放的,即開始和結束的地址都是n的倍數,這個n是由struct最長的變量類型決定的。 也就是struct的大小一定是n的整數倍。 例如一個st

原创 劍指offer--位運算(22、34、63)

offer22 輸入一個整數,求該整數的二進制表達中有多少個1。例如輸入10,由於其二進制表示爲1010,有兩個1,因此輸出2。 典型的位運算題目 void bit_find(const int& num,int* bit_array)

原创 劍指offer--算法(7、14、16、21、25、28、59、37、43、51、46、58)

offer7 輸入一個英文句子,翻轉句子中單詞的順序,但單詞內字符的順序不變。句子中單詞以空格符隔開。爲簡單起見,標點符號和普通字母一樣處理。 例如輸入“I am a student.”,則輸出“student. a am I”。 可

原创 劍指offer--簡易哈希表(13、36、57)

offer13 在一個字符串中找到第一個只出現一次的字符。如輸入abaccdeff,則輸出b。 可以採用256的一個數組存儲字符出現的次數,因爲只有256個字符。先遍歷一遍字符串更新數組信息,然後再從頭遍歷字符串,找到數組中值爲1的第一個

原创 6種排序的時間測試代碼

double* CreatArray(int len) //創建長度爲len的隨機數組 { int i; double* p=(double*)malloc(sizeof(double)*len); srand(time(0))

原创 數據結構之排序算法之O(nlogn)

上一次寫了冒泡,選擇,和插入排序。 這一次寫一下堆排序、歸併、快速排序。 堆排序 堆排序,主要是利用完全二叉樹在數組中的存儲方式(層序遍歷),i 位置的節點的兒子是 2i 和 2i+1 。 最大堆的定義是,每個結點的值都比他的兒子大的一顆

原创 劍指offer--數據結構之二叉樹(1、4、6、11、12、27、48、50、60)

offer1 輸入一棵二元查找樹,將該二元查找樹轉換成一個排序的雙向鏈表。要求不能創建任何新的結點,只調整指針的指向。 二元查找樹的中序遍歷就是已經排序的序列,改成雙向鏈表,可考慮,先把左子樹改造成雙向鏈表,保存好最後一個指針,然後將鏈

原创 劍指offer--數據結構之棧(2,18,24,39)

offer2  題目:定義棧的數據結構,要求添加一個min函數,能夠得到棧的最小元素。要求函數min、push以及pop的時間複雜度都是O(1)。 方法,定義一個輔助棧,在正常棧裏實現push和pop操作時,每次都更新輔助棧的信息,輔助棧

原创 劍指offer--簡易動態規劃(3、10、20、26,61)

動態規劃的思想是在前一步的信息已經保存好,下一步在之前保存信息的基礎上做下一步計算。 offer3 題目:輸入一個整形數組,數組裏有正數也有負數。數組中連續的一個或多個整數組成一個子數組,每個子數組都有一個和。求所有子數組的和的最大值

原创 數據結構之排序算法之O(n^2)

在數據結構中講解了7中排序算法,冒泡、選擇、插入、希爾、堆排序、歸併、快速排序。希爾排序感覺有點神,還沒搞明白,以後再說。 本篇講述冒泡、選擇、插入這3種時間複雜度O(n^2)的算法 冒泡排序 冒泡排序非常簡單,但是如果正常寫的話還是有優

原创 劍指offer--細節(17、38、44)

offer17 輸入一個表示整數的字符串,把該字符串轉換成整數並輸出。例如輸入字符串"345",則輸出整數345。 需要考慮到爲負數,字符串中出現其他的非數字字符,數值溢出等情況。 bool str_to_int(const char

原创 劍指offer--數據結構之鏈表(9、19、35)

offer9 輸入一個單向鏈表,輸出該鏈表中倒數第k個結點。鏈表的倒數第0個結點爲鏈表的尾指針。 可以先設置一個指針 p1,在鏈表中前進k步,然後加入新的指針 p2,和 p1同步遍歷,直到 p1到尾部,那麼 p2就是倒數第k個結點。 需

原创 圖的深度優先遍歷和廣度優先遍歷

首先這裏的操作都是基於鄰接矩陣的。 深度優先遍歷的過程是 首先從一個頂點V開始,輸出當前的頂點。從當前頂點的一個鄰接頂點開始,繼續深度優先遍歷。當然要排除掉已經遍歷過的點。當前頂點的鄰接頂點前全部遍歷一遍void DfsMgraph(co