大學是測控技術與儀器專業,雖然在嵌入式和c語言時,零散地了解過資料的儲存內容,後來在工作中,影象處理方面也接觸過k-d樹等資訊,但是沒有系統的對資料結構學習過。有幸大叔開課,對資料結構有了乙個整體的把握。
就像打辯論一樣,定義先行。
資料結構:計算機儲存、組織資料的方式。
由於學過嵌入式,也曾用彙編程式設計實現過一些功能,對暫存器有一番個人理解。當初大學老師也說,組合語言能夠更加深入地理解資料儲存的關係。在此也建議,讀者可以嘗試使用一下組合語言寫一點簡單的東西。在我的理解中,其實資料都是無窮個0和1。通過高低電平表示,資料的增刪改查實質都是通過電路的控制。就好像寫程式語言一樣,我們可以在乙個函式裡包含另外乙個函式,我們如今使用的if和while也都是封裝好的內容,底層如何控制電流我們是無從而知的。我們總是站在巨人的肩膀上,如果我們研發一些東西,從基礎的0和1開始寫,那肯定很費事。就好像砍樹,我們使用語言,其實就是使用斧頭,斧頭是別人製作好的,我們能夠更專注於如何發力,而不是如何製作出一把更好的斧頭。
隱約覺得有點跑題了,所以這個時候要but一下。
but,在研發的過程中,對於基礎的理解也是十分必要的。如今擺在我們面前的不是一把斧頭,我們需要了解材質,了解工藝才能更好地知道我們需要哪把斧頭。同樣的,我們了解了資料結構,才能更好地在研發中選擇合適的語句,合適的工具。
進入主題,資料基礎結構的心得。大學裡乙個學期的內容,大叔通過半小時進行簡單的講解,受益匪淺.
常用的結構和儲存方式可以分:陣列、堆、棧、佇列、鍊錶、樹、圖、雜湊表。
也可以分為:連續儲存和離散儲存。
棧 :堆疊是不同的兩個概念,之前都是混淆的,後來有次筆試時才了解到(很顯然,當時不會唄)。棧其實就是乙個箱子,箱子很窄,我們每次只能將東西丟進去,由於很窄,我們沒辦法從側邊拿出東西,只能從最上面拿。就是所謂的「後進先出」。
佇列 :和棧很相似,然而是「後進後出」模式。之前好像在嵌入式的彙編中接觸過,有兩個指標,分別指向隊前列和隊後列。
樹 :「樹」這個名字真的是非常形象,可以這樣理解。有一堆資料,首先根據乙個特徵,將資料分成兩份,同樣的道理,在分開的兩份中,再依據不同的特點區分,就好像無窮個if..else語句巢狀一樣。這樣,當我們要查詢資料時,我們只需要根據資料的分類特點,快速的找到內容。比如將數字按奇偶分開,當要找5時,我們只需要在奇數裡找。當面對龐大的資料時,這種方式就帶來了好處。
雜湊表:其實就是類似鍵值對的存在,就好比函式,一一對應,方便查詢。
在課程中,印象最深的就是對儲存內容的修改。
當我們將1,2,3,4,5儲存好之後,如果希望刪除3,最簡單的方法是,重新建立儲存1,2,4,5。然後將原來的內容刪除,這樣的方法是十分依賴執行速度的。如果資料內容龐大,每修改乙個資料,都要執行很久。而針對這問題,提高資料增刪改查執行速度的方法,便是犧牲儲存空間。就好像硬體條件和軟體一樣,硬體上簡單了,軟體上必然要複雜,反之同理。也舉乙個例,比如原來1,2,3,4,5儲存在同乙個箱子裡,如果要改,就必須全部刪除,並重新建立乙個箱子放進剩餘的數字,而犧牲儲存空間的方式就是,將5個數字存在5個箱子裡,然後記住箱子的先後順序,當要刪除乙個內容時,直接刪除該箱子即可,同時修改先後順序,這樣就利用了儲存空間來加快執行速度。
總的一句話:我們會發現,當我們想提公升某一方面時,不得已就要抑制另乙個方面;
其實這是假象,我們確實有可能將所有方面都提公升,只不過當這種方法出現後,舊方法就被淘汰了,如是而已。
bing之初體驗
哈哈,期待已久的微軟搜尋引擎bing 必應 的中文版今天終於推出了。剛開始使用google搜尋其主頁時怎麼也搜尋不到,還以為微軟食言。後來轉念一想,bing很可能是google未來的最大競爭對手,在當前這個還不為人所熟知的階段,很有可能給對方穿穿小鞋的。於是用在ie自帶的搜尋工具條上鍵入bing之後...
Statspack之初體驗
呵呵,今晚之前從來沒有做過statspack 好像有點丟人 這幾天乙個資料庫實在被折磨得不行了,明明sga max size有1.5g,但是實際看整個例項才用了200 m記憶體,慢得要死,頻繁讀寫硬碟,偏偏硬碟又不是磁碟陣列,io狂慢,唉,痛苦啊。於是決定花點時間學下例項優化,今天列印了幾頁perf...
ZigBee之初體驗
古人說 工欲善其事,必先利其器 簡單看懂原理圖還是有必要的,雖然自己幾乎沒有硬體基礎,短時期畫所謂的版子不具現實意義。晶元原理圖自從有人說u是晶元標誌,p是埠,c是電容,r是電阻,s是按鍵,led是led燈。後才漸漸明白 引腳標記相同的,學長說表示版子內部已連線,至於露在外面的引腳他們說是用來跳線用...