出版時(shí)間:2010-4 出版社:清華大學(xué)出版社 作者:楊峰 頁數(shù):377
Tag標(biāo)簽:無
前言
程序 = 數(shù)據(jù)結(jié)構(gòu) + 算法——著名的計(jì)算機(jī)科學(xué)家沃斯(Nikiklaus Wirth)自從著名的計(jì)算機(jī)科學(xué)家沃斯將程序設(shè)計(jì)形象地用上面的公式表示出來后,這條“黃金定律”便成為了人們學(xué)習(xí)程序設(shè)計(jì),進(jìn)行程序開發(fā)的準(zhǔn)則。要想成為一名真正專業(yè)的程序設(shè)計(jì)人員,基本的數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)和常用的算法知識是必須掌握的。脫離了這兩點(diǎn),編寫出來的程序一定不是健壯的好程序。然而單純地掌握了一些數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)和常用的算法知識也是遠(yuǎn)遠(yuǎn)不夠的。空洞地掌握所謂的數(shù)據(jù)結(jié)構(gòu)和算法等理論知識只是紙上談兵,這些知識必須要依托于一門程序設(shè)計(jì)語言才具有真正的生命力,才能夠轉(zhuǎn)化為真實(shí)的程序代碼,才能真正地解決實(shí)際問題。本書就是將數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)和常用的算法知識與目前廣泛應(yīng)用、最具群眾基礎(chǔ)的C語言相結(jié)合而產(chǎn)生的。本書的寫作思想是理論與實(shí)踐相結(jié)合,以實(shí)踐為核心,以實(shí)例為主要內(nèi)容。首先,本書總結(jié)歸納了數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)、常用的排序查找算法和經(jīng)典的算法思想,提綱挈領(lǐng)地闡述了核心的理論知識。這樣可以使沒有系統(tǒng)學(xué)習(xí)過或者不熟悉數(shù)據(jù)結(jié)構(gòu)和算法等知識的讀者對這部分知識有一個(gè)基本的了解,并掌握基本的數(shù)據(jù)結(jié)構(gòu)知識和常用而經(jīng)典的算法思想,以便更加深入地學(xué)習(xí)本書的其他內(nèi)容。其次,本書列舉了大量的編程實(shí)例,這些題目都按照知識體系進(jìn)行了內(nèi)容上的劃分。本書列舉的這些編程實(shí)例都是一些比較靈活有趣的題目,有些題目滲透了巧妙的算法思想,有些題目則必須借助特殊的數(shù)據(jù)結(jié)構(gòu)才能更加容易解答。通過這些題目的訓(xùn)練,可以使讀者開闊眼界,啟迪思維,提高編程的興趣。最重要的是能夠提高讀者算法設(shè)計(jì)的本領(lǐng),提高讀者靈活應(yīng)用各種數(shù)據(jù)結(jié)構(gòu)的本領(lǐng),提高讀者編寫程序解決實(shí)際問題能力。本書有何特點(diǎn)1.結(jié)構(gòu)清晰,知識全面本書分為兩部分。第1部分是基礎(chǔ)知識介紹,主要介紹數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ)知識和一些常用的算法思想。這部分內(nèi)容為核心的理論知識,可以幫助讀者學(xué)習(xí)和回顧數(shù)據(jù)結(jié)構(gòu)和算法的知識,使讀者在理論水平上有所提高,從而能夠更加順利地深入學(xué)習(xí)后續(xù)內(nèi)容。第2部分主要是編程實(shí)例的介紹,通過一些非常有趣的編程實(shí)例使讀者開闊眼界,發(fā)散思維,提高算法設(shè)計(jì)本領(lǐng),提高靈活應(yīng)用各種數(shù)據(jù)結(jié)構(gòu)的本領(lǐng),提高讀者編寫程序解決實(shí)際問題能力。
內(nèi)容概要
本書理論與實(shí)踐相結(jié)合,旨在幫助讀者理解算法,并提高C語言編程能力,培養(yǎng)讀者的編程興趣,并鞏固已有的C語言知識。全書分為2個(gè)部分共10章,內(nèi)容涵蓋了編程必備的基礎(chǔ)知識(如數(shù)據(jù)結(jié)構(gòu)、常用算法等),編程實(shí)例介紹,常見算法和數(shù)據(jù)結(jié)構(gòu)面試題等。本書最大的特色在于實(shí)例豐富,題材新穎有趣,實(shí)用性強(qiáng),理論寓于實(shí)踐之中。通過本書的學(xué)習(xí),可以使讀者開闊眼界,提高編程的興趣,提高讀者的編程能力和應(yīng)試能力?! ”緯綆?張光盤,內(nèi)容為本書源代碼和作者為本書錄制的5.5小時(shí)多媒體教學(xué)視頻。本書可作為算法入門人員的教程,也可以作為學(xué)習(xí)過C語言程序設(shè)計(jì)的人士繼續(xù)深造的理想讀物,也可作為具有一定經(jīng)驗(yàn)的程序設(shè)計(jì)人員鞏固和提高編程水平,查閱相關(guān)算法實(shí)現(xiàn)和數(shù)據(jù)結(jié)構(gòu)知識的參考資料,同時(shí)也為那些準(zhǔn)備參加與算法和數(shù)據(jù)結(jié)構(gòu)相關(guān)的面試的讀者提供一些有益的幫助。
書籍目錄
第1部分 基礎(chǔ)篇 第1章 數(shù)據(jù)結(jié)構(gòu)基礎(chǔ) 1.1 什么是數(shù)據(jù)結(jié)構(gòu) 1.2 順序表 1.2.1 順序表的定義 1.2.2 向順序表中插入元素 1.2.3 從順序表中刪除元素 1.2.4 實(shí)例與分析 1.3 鏈表 1.3.1 創(chuàng)建一個(gè)鏈表 1.3.2 向鏈表中插入結(jié)點(diǎn) 1.3.3 從鏈表中刪除結(jié)點(diǎn) 1.3.4 銷毀一個(gè)鏈表 1.3.5 實(shí)例與分析 1.4 棧 1.4.1 棧的定義 1.4.2 創(chuàng)建一個(gè)棧 1.4.3 入棧操作 1.4.4 出棧操作 1.4.5 棧的其他操作 1.4.6 實(shí)例與分析 1.5 隊(duì)列 1.5.1 隊(duì)列的定義 1.5.2 創(chuàng)建一個(gè)隊(duì)列 1.5.3 入隊(duì)列操作 1.5.4 出隊(duì)列操作 1.5.5 銷毀一個(gè)隊(duì)列 1.5.6 循環(huán)隊(duì)列的概念 1.5.7 循環(huán)隊(duì)列的實(shí)現(xiàn) 1.5.8 實(shí)例與分析 1.6 樹結(jié)構(gòu) 1.6.1 樹的概念 1.6.2 樹結(jié)構(gòu)的計(jì)算機(jī)存儲形式 1.6.3 二叉樹的定義 1.6.4 二叉樹的遍歷 1.6.5 創(chuàng)建二叉樹 1.6.6 實(shí)例與分析 1.7 圖結(jié)構(gòu) 1.7.1 圖的概念 1.7.2 圖的存儲形式 1.7.3 鄰接表的定義 1.7.4 圖的創(chuàng)建 1.7.5 圖的遍歷(1)——深度優(yōu)先搜索 1.7.6 圖的遍歷(2)——廣度優(yōu)先搜索 1.7.7 實(shí)例與分析 第2章 常用的查找與排序方法 2.1 順序查找 2.2 折半查找 2.3 排序的概述 2.4 直接插入排序 2.5 選擇排序 2.6 冒泡排序 2.7 希爾排序 2.8 快速排序 第3章 常用的算法思想 3.1 什么是算法 3.2 算法的分類表示及測評 3.2.1 算法的分類 3.2.2 算法的表示 3.2.3 算法性能的測評 3.3 窮舉法思想 3.3.1 基本概念 3.3.2 尋找給定區(qū)間的素?cái)?shù) 3.3.3 TOM的借書方案 3.4 遞歸與分治思想 3.4.1 基本概念 3.4.2 計(jì)算整數(shù)的劃分?jǐn)?shù) 3.4.3 遞歸的折半查找算法 3.5 貪心算法思想 3.5.1 基本概念 3.5.2 最優(yōu)裝船問題 3.6 回溯法 3.6.1 基本概念 3.6.2 四皇后問題求解 3.7 數(shù)值概率算法 3.7.1 基本概念 3.7.2 計(jì)算定積分 第2部分 編程實(shí)例解析 第4章 編程基本功 第5章 數(shù)學(xué)趣題(一) 第6章 數(shù)學(xué)趣題(二) 第7章 數(shù)據(jù)結(jié)構(gòu)趣題 第8章 數(shù)值計(jì)算問題 第9章 綜合題 第10章 算法設(shè)計(jì)與數(shù)據(jù)結(jié)構(gòu)面試題精粹
章節(jié)摘錄
插圖:其實(shí)階乘的數(shù)學(xué)定義可以用遞歸函數(shù)來簡單地描述:這樣的函數(shù)稱為遞歸函數(shù),因?yàn)樵摵瘮?shù)本身直接或間接地調(diào)用了該函數(shù)本身。基于階乘的遞歸函數(shù)的描述,就不難設(shè)計(jì)出計(jì)算n的階乘n!的遞歸算法??梢钥闯觯褂眠f歸算法解決階乘問題形式上更加簡潔,更易于人們理解。在設(shè)計(jì)遞歸算法時(shí)要注意以下幾點(diǎn)。(1)每個(gè)遞歸函數(shù)都必須有一個(gè)非遞歸定義的初始值,作為遞歸結(jié)束標(biāo)志,或遞歸結(jié)束的出口。就像實(shí)例3.5所描述的遞歸算法中的if(n-0)ret啪l;如果一個(gè)遞歸算法中沒有這個(gè)非遞歸定義的初始值,那么該遞歸調(diào)用是無法計(jì)算出具體的值的(或無法得到結(jié)果),同時(shí)該遞歸調(diào)用也無法結(jié)束。(2)在設(shè)計(jì)遞歸算法時(shí),要解決的問題需具有遞歸性。例如要計(jì)算,2的階乘n!,n!的定義本身具有遞歸性。這種所謂的遞歸性實(shí)際上就是一種反復(fù)調(diào)用自身過程的特性。(3)雖然采用遞歸算法解決問題,特別是一些復(fù)雜問題,更加方便且容易實(shí)現(xiàn),但是遞歸方法的運(yùn)行較低,時(shí)間和空間復(fù)雜度都比較高,因此對于一些對時(shí)間和空間要求較高的程序,建議使用非遞歸算法設(shè)計(jì)。在實(shí)際的算法設(shè)計(jì)中,遞歸與分治如同一對兄弟,經(jīng)常結(jié)合在一起使用。這是因?yàn)?,由分治的方法產(chǎn)生的子問題往往都是原問題的更小規(guī)模。反復(fù)使用分治的手段,可使子問題與原問題類型一致,但規(guī)模不斷縮小,最終使子問題比較容易求解。既然子問題與原問題的類型一致,這就具有了所謂的遞歸性,因此可以使用遞歸的方法用解決原問題的算法去解決同類型的子問題。在第2章中介紹的折半查找算法只是單純地使用了分治的策略,在下面的實(shí)例分析中將使用遞歸與分治思想相結(jié)合的方法進(jìn)行折半查找算法的設(shè)計(jì)。
編輯推薦
《妙趣橫生的算法(C語言實(shí)現(xiàn))》:5.5小時(shí)教學(xué)視頻、86個(gè)趣味算法題、61個(gè)算法面試題,一學(xué)就會!幫您開闊眼界,培養(yǎng)編程興趣,提高編程能力,增強(qiáng)求職的競爭力!特別提示《妙趣橫生的算法(C語言實(shí)現(xiàn))》配套多媒體教學(xué)視頻和涉及的實(shí)例代碼收錄于《妙趣橫生的算法(C語言實(shí)現(xiàn))》配書光盤中。另外,《妙趣橫生的算法(C語言實(shí)現(xiàn))》適合作為相關(guān)學(xué)校的教材使用。為了方便老師授課,《妙趣橫生的算法(C語言實(shí)現(xiàn))》專門配備了相應(yīng)的教學(xué)PPT?!睹钊M生的算法(C語言實(shí)現(xiàn))》內(nèi)容生動有趣,寓教于樂,旨在幫您開闊眼界,培養(yǎng)編程興趣,提高編程能力。增強(qiáng)求職的競爭力。如果您想在程序設(shè)計(jì)之路上走得更遠(yuǎn),請翻開《妙趣橫生的算法(C語言實(shí)現(xiàn))》,仔細(xì)研讀吧,它將助您一臂之力?!睹钊M生的算法(C語言實(shí)現(xiàn))》特色◎提供了5.5小時(shí)多媒體教學(xué)視頻,學(xué)習(xí)起來比較直觀?!蛱峁┝?4個(gè)數(shù)據(jù)結(jié)構(gòu)和算法的基礎(chǔ)知識實(shí)例,便于讀者入門?!蛱峁┝?6個(gè)經(jīng)典、有趣、貼近生活、實(shí)用性強(qiáng)的算法實(shí)例?!蛱峁┝?1個(gè)算法及數(shù)據(jù)結(jié)構(gòu)的面試題。增強(qiáng)求職者的競爭力?!騼?nèi)容梯度科學(xué),既適合入門,也適合進(jìn)一步提高和研究?!驎袑?shí)例用C語言實(shí)現(xiàn),便于讀者驗(yàn)證及加深對C語言的理解。◎既涵蓋基本理論,又包含大量實(shí)例,寓理論于實(shí)踐之中?!蛑v解由淺入深,通俗易懂,將復(fù)雜問題簡單化,讀者可以輕松掌握。
圖書封面
圖書標(biāo)簽Tags
無
評論、評分、閱讀與下載