原创 每日編程19之二個精妙小算法

(1)求單鏈表的倒數第四個元素 第一種最直觀的想法是,用二個指針first,second;初始時second比first多三步,當second走到結尾時,first的位置就是倒數第四個元素 這個算法的優點是思想直觀,容易實現。但需要考慮鏈

原创 每日編程16之判斷數是否爲平衡二叉樹

平衡二叉樹的定義是,對於樹中的任一節點,其左右子樹高度差不超過1(即只可以爲-1,0,1三種情況) 這裏的樹的高度是指從葉子節點(高度爲0)算起的左右子樹最高的值+1。這裏也有遞歸的邏輯。 判斷一顆樹(樹的唯一標誌/入口是其root節點)

原创 每日編程10之二叉樹的先序遍歷的非遞歸版本

這是用棧模擬的一個過程, 要注意的地方是: (1)入棧的順序是先右子樹,後左子樹,這是才能保證出棧是先左後右 初始化時:若根節點不爲NULL,將根節點入棧,否則return; 核心處理操作:打印數節點元素值 循環結束條件:棧爲

原创 每日編程9之二叉樹的先序遍歷遞歸版本

本文研究先序遍歷的方式建立二叉樹,打印二叉樹(遞歸方式) 首先是,先序遍歷建立二叉樹。 輸入:014xx5xx2x6xx (1)接受輸入元素element,建立一個新的節點,若該節點爲第一個節點,則將樹root指針指向它(這個也不需

原创 每日編程7之快速排序非遞歸版本

遞歸算法轉化爲非遞歸實現的核心思想是"用棧來模式遞歸函數棧"。 實現主要考慮:入棧/出棧的邏輯 對於快速排序來說。。 棧元素包括,輸入序列的左右下標,初始時將0,n-1 每次循環                取出棧頂元素(p,q),若q

原创 每日編程20之樹中二個節點的最近父節點

輸入是一棵樹中的二個節點指針(有可能是同一個指針) 輸出應該是指向這二個節點最近父節點的指針。 考慮採用遞歸的思想去做,後序遍歷二叉樹 遍歷0號節點,遍歷1號節點,遍歷4號節點,發現其爲first,繼續遍歷5號節點,遍歷2號節點,發現其

原创 每日編程20之用一個數組實現2個和3個棧

用一個數組實現2個棧很簡單,只要一個棧棧底在數組左邊,向右生長,另一個棧棧底在數組右邊,向左生長。判斷棧滿的條件是二個棧元素之和超過數組大小。 實現3個棧似乎有難度。。。 直觀的想法是,將數組靜態的分爲3個區域以實施3個棧,這樣的話,存

原创 每日編程17之字符串匹配樸素算法

字符串匹配樸素算法的核心思想是:從待匹配字符串的首字符開始依次和模式串匹配,若匹配成功則返回位置,若匹配不成功則接着匹配下一個字符開始的串。。直到,待匹配串餘下的長度小於模式串。。。 所以這裏要頻繁的調用了求字符串長度的函數,但如果每個字

原创 每日編程21之單鏈表相交,環的相關問題研究

首先如何判斷二個單鏈表是否相交,也就是所謂的Y型鏈表問題。 算法很簡單,只要分別遍歷二個鏈表,對比二個鏈表的表尾元素是否相同即可 那麼再進一步,如何找到這二個鏈表的交匯點。 只要在遍歷的時候,記錄2個鏈表的長度,M,N,假設M>N則長度

原创 每日編程18之中位數/任意第K大的元素

中位數(中指)是指一串元素序列中值處於中間的那個元素。 求中位數最直觀的一種想法是,先將數據排個序,然後取中間元素,平均複雜度爲O(nlogn)。 另一種巧妙的想法是利用快速排序的劃分步驟,每次將元素序列劃分二份,中位數必然存在於其中的一

原创 每日編程6之單鏈表反轉遞歸版本

既然鏈表逆序輸出可以用遞歸方法實現,單鏈表反轉也可以採用遞歸思想實現。 不同的地方時,後者需要破壞原有的鏈表結構 不曉得采用1個指針能不能實現 先考慮用2個指針p,q分別記錄原來的鏈表關係 初始時:p = NULL,q = head;

原创 一些高層的資源

大神博客 (1)http://wangcong.org/blog/ 名校資源 (1)斯坦福計算機系統實驗室 http://csl.stanford.edu/、 (2)MIT EE&&CS學院 http://www.eecs.mit.ed

原创 每日編程15之用二個隊列實現棧數據結構

看到這個問題,我現在的想到的解決方案是: 二個隊列中,始終有一個隊列(隊列1)爲空,另一個隊列(隊列2)爲棧中的元素,入棧的操作就直接將元素放入隊列2(所以棧滿的條件就是隊列2滿),出棧時將隊列2的元素依次出隊並向隊列1入隊,直到隊列2的

原创 每日閱讀1之內核設計與實現(第三版)4.5——linux調度實現之時間記賬

前面討論CFS調度算法的動機和內在邏輯,下面開始探索CFS是如何實現的。 相關代碼位於kernel/sched_fair.c文件中。 主要包含四個組成部分: (1)時間記賬 (2)進程選擇 (3)調度器入口 (4)睡眠與喚醒 今天,主要關

原创 每日編程28之求最大子數組(o(N)複雜度)

之前研究算法,還剩下三大難題——KMP,rb-tree和DP。。 本來是想把DP這一遺留問題解決,就看到了這個問題,後面才發現這個問題其實很簡單,完全用不到動態規劃的思想,或者是最簡單的一維DP。 問題描述, 一個數組,n個元素,有正有