c數據結構與演算法設計
① 數據結構與演算法分析 —— C 語言描述:二叉樹
二叉樹(binary tree)是一棵樹,其中每個節點的兒子都不能多於兩個。
二叉樹的一個性質是平均二叉樹的深度要比 N 小的多,這個性質有時很重要。分析表明,這個平均深度為 ,而對於特殊類型的二叉樹,即二叉查找樹(binary search tree)。其深度的平均值是 。不幸的是,在最壞情況下,這個深度可以大到 N-1 的。
因為一棵二叉樹最多有兩個兒子,所以我們可以用指針直接指向它們。樹節點的聲明在結構上類似於雙鏈表的聲明,在聲明中,一個節點就是由 key(關鍵字)信息加上兩個指向其他節點的指針(Left 和 Right)組成的結構。
應用於鏈表上的許多法則也可以應用到樹上。特別地,當進行一次插入時,必須調用 malloc 創建一個節點。節點可以在調用 free 刪除後釋放。
我們可以用在畫鏈表時常用的矩形框畫出二叉樹,但是,樹一般畫成圓圈並用一些直線連接起來,因為二叉樹實際上就是圖(graph)。當涉及樹時,我們也不顯示地畫出 NULL 指針,因為具有 N 個節點的每一棵二叉樹都將需要 N+1 個 NULL 指針。
二叉樹有許多與搜索無關的重要應用。二叉樹的主要用處之一是在編譯器的設計領域。
上圖就是一個表達式樹(expression tree)。表達式樹的樹葉是操作樹(operand),比如常數或者變數,而其他的節點為操作符(operator)。由於這里所有的操作都是二元的,因此這棵特定的樹正好是二叉樹,雖然這是最簡單的情況,但是節點含有的兒子還是有可能多於兩個的。一個節點也有可能只有一個兒子,如果有一目減算符(unary minus operator)的情形。可以將通過遞歸計算左子樹和右子樹所得到的值應用在根處的算符操作中而算出表達式樹 T 的值。上面里的例子中,左子樹的值是「((3+1) 3)/((9-5)+2)」,右子樹的值是「(3 (7-4)+6)」,因此整棵樹的表達式就是圖上的結果。
我們可以通過遞歸產生一個帶括弧的左表達式,然後列印出在根處的運算符,最後再遞歸地產生一個帶括弧的右表達式而得到一個(對兩個括弧整體進行計算的)中綴表達式(infix expression)。這種一般的方法(左,節點,右)稱為中序遍歷(inorder traversal);由於其產生的表達式類型,這種遍歷很容易記憶。
另一個遍歷策略是遞歸列印出左子樹、右子樹,然後列印運算符。如果我們應用這種策略於上面的樹,則輸出將是「31+3 95-2+/743- 6+-」。這種遍歷策略一般稱為後序遍歷(postorder traversal)。
第三種遍歷策略是先列印出運演算法,然後遞歸地列印出右子樹和左子樹。同樣的,應用這種策略於上面的樹,則輸出將是「-/ ++313-952+ 3-746」,這是一種不太常用前綴(prefix)記法,這種遍歷策略為先序遍歷(preorder traversal)。
這里我們只給出一種演算法,來把後綴表達式轉變成表達式樹。這里的要點是,一次一個符號地讀入表達式。如果符號是操作符,那麼我們就建立一個單節點樹並將一個指向它的指針推入棧中。如果符號是操作符,那麼我們就從棧中彈出指向兩棵樹 和 的那兩個指針( 的先彈出)並形成一棵新的樹,該樹的根就是操作符,它的左、右兒子分別指向 和 。然後將這棵新樹的指針壓入棧中。
② 數據結構與演算法分析 有兩個版本,一個是C版本,另一個是C++描述版。他們有什麼區別呢
區別就在於:對於數據結構,如果用c語言實現鏈表結構,則只能提供一些鏈表的操作函數,無法將鏈表當成一個整體對象,而用C++則可以實現一個鏈表類,將鏈表封裝成一個整體。而對於演算法來說,則一樣,C++中的具體演算法也是用C語言實現的。
③ 求好書推薦!! C語言, 數據結構 和 演算法設計等 (分後補!)
額,跟你這么說吧,我看過的c語言里邊比較適合學習的有三本:譚浩強的那本c語言,比較適合入門,如果你有點基礎可以看看《c語言程序設計》和《c程序設計語言》這兩本都是機械工業出版社出版的外國經典書,看的順序最好按我給你說的。c程序設計語言是C語言之父寫的,誰看誰知道,什麼叫做經典。
數據結構方面也可以看看機械工業出版社出版的大理石紋封面系列的翻譯的外國經典的書,名字好像是《數據結構》、《數據結構與演算法》(c語言版),如果學校里學了嚴蔚敏的也可以在好好研究下她老人家的,也比較不錯。
想學演算法的話,就看《演算法導論》依然是機械工業出版社出版的大理石紋封面,很給力。另外我的經歷告訴我,看書學技術盡量看國外的經典的書,風趣有味,誰看誰知道。希望對你有幫助哈。像c++的話人民郵電出版社出版的有幾本不錯的。
④ 自學c語言中的數據結構與演算法,看哪些書比較好
自學c語言中的數據結構與演算法,我把它分為入門,鞏固,應用,提高,進化這幾個階段,不同階段可以看不同書籍。
《數據結構與演算法分析——C語言描述》 ,一般大學普遍教程。
《演算法設計與分析》
《演算法引論》
《Elements of Programming》
《C Interfaces and Implementation》
這個相關書籍貌似沒得,可以自己是一些功能,如下:
《Algorithm Design Manual》
《The Science of Programming》
《編程珠璣》
《Algorithms 4th》
《Advanced Data Structures》
如果你想成為一個碼農或是熟練工(Code Monkey),你大可以不學演算法,因為演算法對你確實沒有用;但如果你想成為一個優秀的開發者(Developer),扎實的演算法必不可少,因為你會不斷的掉進一些只能藉助演算法才能爬出去的坑裡。所以,騷年加油把。
⑤ 數據結構的結構與演算法和C語言的區別是什麼
數據結構描述的是數據集合的組織與綁定操作,而C語言是一種描述語言,描述的是演算法
⑥ c語言的演算法有哪些
C語言的演算法主要包括排序演算法、查找演算法、數據結構相關演算法、字元串處理演算法等。
C語言作為編程語言中的一種,它本身的特性並沒有特定的演算法與之對應。但是,在進行編程的過程中,根據需求不同會設計到各種演算法的應用。以下是關於C語言中常見演算法的
排序演算法:排序是數據處理中非常常見的操作,C語言中常用的排序演算法包括冒泡排序、選擇排序、插入排序、快速排序等。這些排序演算法可以根據數據規模、實際需求進行選擇。例如,冒泡排序和選擇排序適合小規模數據的排序,而快速排序在處理大規模數據時效率更高。
查找演算法:在大量數據中查找特定元素時,需要用到查找演算法。C語言中常用的查找演算法包括線性查找、二分查找等。線性查找適用於無序數據,而二分查找則適用於有序數據,且數據規模較大時效率更高。
數據結構相關演算法:數據結構如數組、鏈表、棧、隊列等在C語言編程中廣泛應用,針對這些數據結構也有相應的演算法。例如,對於鏈表,有插入節點、刪除節點等演算法;對於棧,有入棧、出棧等演算法;對於樹結構,有樹的遍歷、搜索等演算法。
字元串處理演算法:在C語言中處理字元串時,也會涉及到一些特定的演算法。例如,字元串的拼接、分割、查找子串等都需要相應的演算法支持。
此外,還有一些更高級的演算法如圖論演算法、動態規劃演算法等,在解決復雜問題時也會用到。這些演算法的選擇和應用會根據具體問題和需求來確定。在C語言編程中,熟練掌握和運用各種演算法,能夠大大提高程序的效率和性能。
⑦ 演算法和數據結構有什麼區別
一、指代不同
1、演算法:是指解題方案的准確而完整的描述,是一系列解決問題的清晰指令。
2、數據結構:指相互之間存在一種或多種特定關系的數據元素的集合。
二、目的不同
1、演算法:指令描述的是一個計算,當其運行時能從一個初始狀態和(可能為空的)初始輸入開始,經過一系列有限而清晰定義的狀態,最終產生輸出並停止於一個終態。
2、數據結構:研究的是數據的邏輯結構和數據的物理結構之間的相互關系,並對這種結構定義相適應的運算,設計出相應的演算法,並確保經過這些運算以後所得到的新結構仍保持原來的結構類型。
三、特點不同
1、演算法:演算法中執行的任何計算步驟都是可以被分解為基本的可執行的操作步驟,即每個計算步驟都可以在有限時間內完成。
2、數據結構:核心技術是分解與抽象。通過分解可以劃分出數據的3個層次;再通過抽象,舍棄數據元素的具體內容,就得到邏輯結構。
⑧ 數據結構與演算法分析:C語言描述的內容簡介
《數據結構與演算法分析:C語言描述(原書第2版)》內容簡介:書中詳細介紹了當前流行的論題和新的變化,討論了演算法設計技巧,並在研究演算法的性能、效率以及對運行時間分析的基礎上考查了一些高級數據結構,從歷史的角度和近年的進展對數據結構的活躍領域進行了簡要的概括。由於《數據結構與演算法分析:C語言描述(原書第2版)》選材新穎,方法實用,題例豐富,取捨得當。《數據結構與演算法分析:C語言描述(原書第2版)》的目的是培養學生良好的程序設計技巧和熟練的演算法分析能力,使得他們能夠開發出高效率的程序。從服務於實踐又鍛煉學生實際能力出發,書中提供了大部演算法的C程序和偽碼常式,但並不是全部。一些程序可從互聯網上獲得。
《數據結構與演算法分析:C語言描述(原書第2版)》是《Data Structures and Algorithm Analysis in C》一書第2版的簡體中譯本。原書曾被評為20世紀頂尖的30部計算機著作之一,作者Mark Allen Weiss在數據結構和演算法分析方面卓有建樹,他的數據結構和演算法分析的著作尤其暢銷,並受到廣泛好評.已被世界500餘所大學用作教材。
在《數據結構與演算法分析:C語言描述(原書第2版)》中,作者更加精煉並強化了他對演算法和數據結構方面創新的處理方法。通過C程序的實現,著重闡述了抽象數據類型的概念,並對演算法的效率、性能和運行時間進行了分析。
全書特點如下:
●專用一章來討論演算法設計技巧,包括貪婪演算法、分治演算法、動態規劃、隨機化演算法以及回溯演算法
●介紹了當前流行的論題和新的數據結構,如斐波那契堆、斜堆、二項隊列、跳躍表和伸展樹
●安排一章專門討論攤還分析,考查書中介紹的一些高級數據結構
●新開辟一章討論高級數據結構以及它們的實現,其中包括紅黑樹、自頂向下伸展樹。treap樹、k-d樹、配對堆以及其他相關內容
●合並了堆排序平均情況分析的一些新結果
《數據結構與演算法分析:C語言描述(原書第2版)》是國外數據結構與演算法分析方面的標准教材,介紹了數據結構(大量數據的組織方法)以及演算法分析(演算法運行時間的估算)。《數據結構與演算法分析:C語言描述(原書第2版)》的編寫目標是同時講授好的程序設計和演算法分析技巧,使讀者可以開發出具有最高效率的程序。 《數據結構與演算法分析:C語言描述(原書第2版)》可作為高級數據結構課程或研究生一年級演算法分析課程的教材,使用《數據結構與演算法分析:C語言描述(原書第2版)》需具有一些中級程序設計知識,還需要離散數學的一些背景知識。