資料結構學習(C++)——序言 (轉)

gugu99發表於2007-12-05
資料結構學習(C++)——序言 (轉)[@more@]

題外話:先前有一篇文章叫《用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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章