學習之前(before learning)
資料結構作為cs課程中的重中之重(其實cs的所有課程都很重要),作為開啟「資料結構及其操作」的一把鑰匙,實在是不敢大意。學習了半個學期,之前因為活動和其他一些瑣事,一直沒有完整的時間來學習這門課程(比較習慣大段大段的時間來學習,碎片化的時間會讓我感到極大的不舒服)。現在手頭上的事情逐步地少了,拖拉了這麼久的學習筆記也終於可以一片一片地pop出來了。總感覺自己的資料結構成了最早push進去最晚pop出來的棧幀。
1.mooc-陳越、何欽銘教授主講《資料結構》;
2.《data structures and algorithm analysis in c》-mark allen weiss ;
3.《c prime plus 中文版》- stephen prata(雲巔工作室 譯)
資料結構基礎入門(base of data sructures)通過可以看到關鍵字為「資料結構」和「演算法」,可見資料結構是與演算法密不可分的(看到這裡的時候我只是覺得資料結構卻是和演算法結合的很緊密,但並沒有明白資料機構到底是什麼)。
緊接著陳老師通過舉例:如何在書架上擺放圖書,引入了
「解決問題方法的效率跟資料的組織方式有關」
這一觀點。
至此,我大概了解了陳老師所想表達的觀點,即:
資料通過不同的演算法進行組成成為有結構的資料,再通過不同演算法對資料進行操作,結構化的資料與對資料的操作集共同形成了資料結構(自己總結的,如有不妥還請指出)
在陳老師的課中,還舉例了設計列印函式printn並對迴圈及遞迴演算法進行比較
通過比較即可發現迴圈和遞迴演算法實現時,資料量對於遞迴演算法的效率影響是十分大的,並且在資料量達到1e7級別時,記憶體隨即崩盤。
如果對於c語言有一定了解的話,可以知道:編譯器是被分配乙個預設大小的堆疊空間,一旦堆疊超過這個空間隨即就會崩潰(雖然我們可以通過調整編譯器預設空間來解決這一問題,但這個比較還反映了利用遞迴演算法時造成的空間複雜度過高的問題)我們在如下**中可以發現
void print(int n)
}
一旦使用此遞迴演算法,意味著無論資料量多大,程式都會一路遞迴到n=0的情況,才會講棧幀逐個pop出去,這樣帶來的巨大問題就是堆疊佔用量超出了編譯器所擁有的預設空間,導致程式甚至編譯器崩潰。
陳老師由此匯出了另乙個結論:
解決問題方法的效率,跟空間的利用效率有關
緊接著陳老師利用clock()函式對不同演算法計算多項式進行了比較
並得出了另乙個觀點即:解決問題方法的效率,跟演算法的巧妙程度有關
陳老師最後給出了什麼是資料結構???這一問題的回答,即:
資料物件必定與一系列加在其上的操作相關聯
完成這些操作所用的方法就是演算法
c語言實現(c-support)
struct book;
在manybook.c的主程式部分我們宣告了相應的library變數
struct book library[maxbks]; //定義結構變數
並通過訪問結構變數中的成員完成對圖書的管理,如:
while(count < maxbks && gets(library[count].title)!=null&&library[count].title[0]!='\0')
通過上述程式完成對書本資訊的錄入,值得關注的是:
gets(library[count].author);
這行**,為:對於library結構變數中第(count+1)個變數中author成員的賦值。
學習之後(after learning)
文章中如有寫得錯誤或不盡如人意的地方,煩請您指出。
請您喝咖啡哈
資料結構 學習筆記01
第一章 概 論 1.資料 資訊的載體,能被計算機識別 儲存和加工處理。2.資料元素 資料的基本單位,可由若干個資料項組成,資料項是具有獨立含義的最小標識單位。3.資料結構 資料之間的相互關係,即資料的組織形式。它包括 1 資料的邏輯結構,從邏輯關係上描述資料,與資料儲存無關,獨立於計算機 2 資料的...
資料結構學習 01
程式 資料結構 演算法 資料結構 資料的組織形式 演算法 解決實際問題的方法 總結 演算法是為了解決實際問題而設計的,資料結構是演算法需要處理的問題載體。演算法的五大特性 輸入 演算法具有0個或多個輸入 輸出 演算法至少有1個或者多個輸出 有窮性 演算法不會無限迴圈,並且每一步可以在可接受的時間內完...
資料結構學習01
有關演算法的時間複雜度與空間複雜度 1.演算法的時間複雜度 指事先預估演算法的時間開銷t n 和問題規模n的關係.2.演算法的空間複雜度 3.對於空間複雜度,有幾種情況 一是 中只有一般的順序語句,那麼占用的記憶體空間則是常數個,與問題規模n無關,空間複雜度就是o 1 二是 中有一些特別的儲存結構,...