資料結構學習(C++)——序言 (轉)
題外話:先前有一篇文章叫《用C++模板描述的連結串列、棧、佇列(宣告與實現)》,當時是第一次發表文章(我才註冊沒幾天),很不成熟,改了又改不說,還弄的老長,不利於閱讀。於是我重寫了一下,並且想做成一個系列,這從我的標題可以看出來。好,言歸正傳。
本篇為後面一系列文章的序言,旨在說明寫作的目的,以及寫作的風格;或者說是為自己可能的錯誤,預先給個託詞。如果您不想聽我在這廢話,請跳過本篇,直接閱讀後面的文章。但是這樣,我不能保證,您在閱讀的同時,不會罵我白痴。
為什麼寫這些文章
這些文章可以說是《資料結構(用面向方法與C++描述)》這本書的讀書筆記,但也不完全是。資料結構是專業必修課——幾乎每個計算機專業的學生都會推崇他的重要;同時,也是其他專業轉修計算機專業的一個難點。
從學習的角度來說,嚴蔚敏的《資料結構(C語言版)》是本不錯的書。但是,C語言不是描述的理想工具。《資料結構(C語言版)》的前言裡是這樣說的:“雖然C語言不是抽象資料型別的理想描述工具,但鑑於目前和近一、二年內,……並增添了C++語言的引用引數傳遞方式等,構成了一個類C描述語言。”
從抽象資料型別的定義——一個數學模型以及定義在該模型上的一組操作——可以看出,面嚮物件語言中類的概念和這個定義很接近,加之C語言的普及,用C++來描述於是就成了順理成章的事情。
於是,清華在2002年的考研參考書目中對《資料結構》的參考書做了改變,使用《資料結構(用物件導向方法與C++描述)》(殷人昆等編著,ISBN 7-302-03405-2/TP1845)作為參考書,而實際上考的也是(廢話,不是那叫誤導)。坦白的講,原書把教學目的和提供例項的目的搞混了,結果是個四不象:作為教科書,條理不清晰;提供各個方法的實現,也不是很實用,相反,重複建設太多。至於錯誤,可能有些是筆誤,比如少個友元宣告瞭,不是繼承而使用別的類的成員沒有指明瞭;還有一些,就是考慮不夠周全。
不管怎麼說,現在不是挑書的時候,你想考清華的計算機專業研究生嗎,這本書是你不二的選擇。我發現讀懂此書的最好方法,就是自己按照書上的思路,以及實際應用的分析,自己重新實現各種抽象資料型別。這樣做還有一個好處,為自己將來積累一點財富。
我的寫作風格
我選用的是VC6,因此,我不保證我提供的程式碼在別的編譯器也能透過——從頭到尾只使用了iostream.h,沒有任何別的庫,當然更沒有MFC,標準的C++程式碼應該沒什麼問題。全部是手工完成的程式碼,沒有使用ClassWizard,主要是不喜歡那些亂七八糟的預處理和註釋。這樣完成之後,發現C++的宣告和實現分開xx.h+xx..ccp這種文件結構並不招人喜歡——很亂。
於是我採用了單工程單cpp的結構,就是一個工程只有一個cpp,放main(),其他的部分都是標頭檔案,宣告和實現放在一起——其實這是違反C++規範的,C++要求函式必須宣告原型,實際上,我覺得這很羅嗦(我這是典型的C後遺症,以前用TC時為了不宣告原型,把函式都放到main()前面),宣告一下原型,我認為這和設定密碼需要確認一個道理。由於使用的環境,把宣告單獨集中起來作為一個檔案已經沒有必要——ClassView視窗很好用,就因為如此,我幾乎從來不去看類的宣告檔案。除非你提供的是一個庫,在你的工程中單獨的宣告檔案已經不是必須的了。當然,這裡的前提是從一個空的工程建立你的專案。如果你使用了AppWizard,我很難想象不使用ClassWizard的。因為這時文件的結構已經確定了,你所做的實際上是在修修補補。
什麼人適合讀這些文章
l 剛開始從C過渡到C++的人,看完這些後,會體會到C++的新特性。
l 和我一樣研讀那本黃皮書的人,希望看完之後能更好的理解和學習。
l 從未編寫過超過1000行程式碼的人,這樣我們才能達到共鳴。因為我們從來不使用工具和庫檔案,做的事都是在老手看來很蠢的事。
一些約定
假定你使用的是VC6,先建立一個 Console Application的empty project。後面將陸續往這個工程中新增檔案(就是將後面介紹的每一個檔案都新增進去,不然到時候找不到xx.h不要埋怨),每一個#ifndef xx_H~#endif和其中的部分為一個標頭檔案,檔名為xx.h。例如:
#ifndef List_H:namespace prefix = o ns = "urn:schemas--com::office" />
#define List_H
……
#endif
這一大塊為一個檔案,檔名為List.h
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-988547/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 資料結構學習(C++)——圖(總結) (轉)資料結構C++
- 資料結構學習(C++)——樹(總結) (轉)資料結構C++
- 資料結構學習(C++)——遞迴【1】 (轉)資料結構C++遞迴
- 資料結構學習(C++)——迴圈連結串列 (轉)資料結構C++
- 資料結構學習(C++)——雙向連結串列 (轉)資料結構C++
- 資料結構學習(c++)——二叉樹 (轉)資料結構C++二叉樹
- 資料結構學習(C++)——遞迴【2】(1) (轉)資料結構C++遞迴
- 資料結構學習(C++)——遞迴【2】(2) (轉)資料結構C++遞迴
- 資料結構學習(C++)——遞迴【2】(3) (轉)資料結構C++遞迴
- 資料結構學習(C++)——遞迴【2】(4) (轉)資料結構C++遞迴
- 資料結構學習(C++)——遞迴【3】(1) (轉)資料結構C++遞迴
- 資料結構學習(C++)——遞迴【3】(2) (轉)資料結構C++遞迴
- 資料結構學習(C++)——二叉樹【2】 (轉)資料結構C++二叉樹
- 資料結構學習(C++)續——排序【3】交換排序 (轉)資料結構C++排序
- 資料結構學習(C++)——圖【4】(最短路徑) (轉)資料結構C++
- 資料結構學習(C++)——二叉樹【3】 (轉)資料結構C++二叉樹
- 資料結構學習(C++)——圖【2】(DFS和BFS) (轉)資料結構C++
- 資料結構學習(C++)——二叉樹【1】 (轉)資料結構C++二叉樹
- 資料結構學習(C++)——圖【3】(無向圖)(上) (轉)資料結構C++
- 資料結構學習(C++)——圖【3】(無向圖)(下) (轉)資料結構C++
- 資料結構學習(C++)——棧應用(表示式求值) (轉)資料結構C++
- 資料結構學習(C++)續——排序【2】插入排序 (轉)資料結構C++排序
- 資料結構學習(C++)——圖【1】(基本儲存方法) (轉)資料結構C++
- 資料結構學習(C++)續——排序【1】測試程式 (轉)資料結構C++排序
- 資料結構學習(C++)續——排序【6】內部排序總結 (轉)資料結構C++排序
- 資料結構學習(C++)——線性鏈式結構總結(代後記)【1】 (轉)資料結構C++
- 資料結構學習(C++)——線性鏈式結構總結(代後記)【2】 (轉)資料結構C++
- 資料結構學習(C++)——圖【5】活動網路(AOV、AOE) (轉)資料結構C++
- 資料結構學習(C++)——單連結串列(定義與實現) (轉)資料結構C++
- 資料結構學習筆記(一) (轉)資料結構筆記
- 資料結構學習(C++)——稀疏矩陣(十字連結串列【2】) (轉)資料結構C++矩陣
- 資料結構學習(C++)——稀疏矩陣(十字連結串列【1】) (轉)資料結構C++矩陣
- C++資料結構和pb資料結構的轉換C++資料結構
- 資料結構學習資料結構
- 資料結構學習(C++)——棧和佇列(定義和實現) (轉)資料結構C++佇列
- 資料結構學習(C++)——佇列應用(事件驅動模擬) (轉)資料結構C++佇列事件
- 資料結構學習之樹結構資料結構
- 資料結構學習心得資料結構