程序設計是計算機專業(yè)人員十分重要的基本功,是軟件設計的基礎。然而,程序設計的基本功并不在程序設計中,而在程序設計外。程序設計課程提供了特定的指令、語法、語句的編寫規(guī)則,學習這些規(guī)則僅僅是一種最基礎的編程訓練,不能解決如何提高編程能力的問題。這與許多應用型普通高校初學程序設計課程的學生反映出來的情況是一致的,
即由于數(shù)學基礎和物理基礎方面的原因,如果程序設計中必備的數(shù)理邏輯推理和思維能力不強,
就會使這部分學生普遍感到學習程序設計課程困難,這種困難有可能使
他們對自己的編程能力產(chǎn)生懷疑,從而影響他們對計算機專業(yè)的認同感和歸屬感。
程序設計是用來解決問題的,解決問題的關鍵是面對實際問題時有沒有解題思路,
進而在解題思路的基礎上找出解決問題的步驟,對其優(yōu)化,最終形成一個解題的算法。在軟件設計的實踐中,問題千奇百怪,五花八門,沒有一個定式,但迄今為止,大多數(shù)在計算機領域已經(jīng)出現(xiàn)的問題都有一些共性,有一些相同的數(shù)據(jù)現(xiàn)象。研究這些共性和數(shù)據(jù)現(xiàn)象,尋求解決各類問題的普適算法,可以有效提高編程能力,使得計算機專業(yè)的學生喜歡編程、熱愛編程,并具備較強的編程能力,成為一個合格的計算機專業(yè)人才。在計算機類專業(yè)課程體系中,數(shù)據(jù)結構就是這樣一門
能夠提供解決具有共性問題的通用方法和有效提高編程能力的基礎性課程。
數(shù)據(jù)結構原本是計算機類專業(yè)的重要核心基礎課程,近年來,隨著信息技術的飛速發(fā)展,該課程的重要性已經(jīng)為從事信息技術及其相關專業(yè)教學和研究的同仁所認識,F(xiàn)在,數(shù)據(jù)結構已經(jīng)不再是計算機類專業(yè)獨有的課程,逐漸演變成我國大學中許多專業(yè)的重要基礎課,如數(shù)學類、電子技術類、信息技術類等專業(yè)。
我國計算機類專業(yè)分為科學研究型、工程技術開發(fā)型、技術推廣應用型三個層次。本書編寫的深度和難度定位在后兩個層次。本書參考了國內(nèi)外經(jīng)典教材,較全面地組織、安排書中的內(nèi)容; 提供了大量的經(jīng)典算法,并適當引入考研典型例題,具有很強的實用性、易讀性、針對性,融入了編者多年的教學經(jīng)驗和體會; 體系結構科學合理,內(nèi)容精煉。每章都附有一定量的習題,其中,部分選自近年來的考研題目,以幫助學生深入學習和理解相關章節(jié)的內(nèi)容,并為學生考研提供一定的幫助。
本書第2~9章附有實訓部分,對相應章節(jié)的教學內(nèi)容給出實訓要求和實訓項目,并將一些典型算法作為實訓案例,給出了類定義、算法實現(xiàn)的源代碼。讀者可以在Python語言編程環(huán)境下直接運行。本書提供了資源包,其他算法可參考本書的資源包。
近年來,隨著大數(shù)據(jù),云計算和人工智能技術的興起,Python語言成為流行的編程語言,一些高校的計算機類專業(yè)開始引入Python作為程序設計入門語言,因此,用Python語言描述的數(shù)據(jù)結構、算法設計與分析等課程成為教學需求。在此背景下,我們編寫了本書。
本書共分10章,分別為緒論、線性表、
棧和隊列、串、數(shù)組和廣義表、
樹與二叉樹、圖、查找、排序以及文件。
第1章概述數(shù)據(jù)結構可能涉及的內(nèi)容和分析方法,講述了算法和程序的差異、算法的評價
與分析等問題。
第2~5章講述線性表結構、特殊線性表棧和隊列、串、數(shù)組與廣義表。從順序存儲結構和鏈表結構兩個方面來闡述線性表的存儲結構和建立在存儲結構上的算法設計,以及線性表的廣泛應用,如棧、隊列、串、數(shù)組、廣義表等,并進一步討論了這些數(shù)據(jù)結構的應用,如程序調(diào)用、皇后問題、火車編組問題等。
第6章主要討論樹。介紹了樹的性質(zhì)、
存儲結構和基本運算。討論了二叉樹的創(chuàng)建,前序、中序、后序、層次和歐拉遍歷算法,以及二叉樹的其他問題。還討論了線索二叉樹及其應用、哈夫曼樹和哈夫曼編碼、二叉排序樹、平衡二叉樹、二叉表示樹、判定樹等問題。
第7章討論圖。內(nèi)容包括圖的定義、圖的存儲結構
、圖的遍歷和圖的連通分量、最小生成樹、最短路徑、拓撲排序和關鍵路徑等。
第8章和第9章討論目前常見的查找算法和排序算法。在查找算法中,從靜態(tài)查找表、動態(tài)查找表和哈希表三方面來研究查找算法。靜態(tài)查找表的數(shù)據(jù)結構是線性表,動態(tài)查找表主要有二叉樹查找、B樹查找等,哈希表的構造和查找則用哈希算法來實現(xiàn)。在排序算法中分為內(nèi)排序和外排序兩部分: 內(nèi)排序中主要討論了插入排序、交換排序、選擇排序、歸并排序和基數(shù)排序等經(jīng)典的排序算法; 外排序討論了磁盤排序、勝者樹和敗者樹、最佳歸并樹和磁帶排序等。
第10章討論了文件。從文件的存儲結構入手討論文件的管理,介紹了順序文件、索引文件、索引順序文件、散列文件、多關鍵字文件等。
上述內(nèi)容涵蓋了目前國內(nèi)數(shù)據(jù)結構教材的幾乎所有內(nèi)容,有的進行了深入的討論,有的比較初步,這與本書編寫的指導思想有關。
本書由王震江任主編,王勇剛、萬英、楊七九、和添錦任副主編。其中,全書的基本內(nèi)容由王震江編寫,萬英編寫了第1~3章的代碼,王勇剛編寫了第4、6、7章的代碼,和添錦編寫了第5章的代碼,楊七九編寫了第8章的代碼,王震江編寫了第9章的代碼。王震江對全書進行了統(tǒng)稿和審查,統(tǒng)一了圖例,并統(tǒng)一編寫了實訓內(nèi)容和要求。書中提供的算法全部通過了上機調(diào)試。
由于作者水平有限,編寫倉促,書中難免存在疏漏之處,敬請讀者不吝賜教。
本書配套教學大綱、PPT課件、思政內(nèi)容、微課視頻等豐富的教學資料。讀者掃描本書封底文泉課堂涂層下的二維碼并綁定微信賬號后,即可觀看視頻。其他教學資源(教學大綱、思政內(nèi)容、課件等)可以從清華大學出版社官方微信公眾號書圈(itshuquan)下載。
編者
2022年1月
于麗江