當前位置:首頁 » 操作系統 » 數據結構與應用演算法

數據結構與應用演算法

發布時間: 2023-05-16 16:32:25

㈠ 如何將數據結構和演算法應用到實際之中

寫一些程序,尤其是比較底層的程序。就明白它們的用處了。
列舉下我們當初的作業(其實是老師從UC Santa Barbara\UC Berkley CS作業直接來題目)
(1)實現一個簡單的 TCP 傳輸層的協議機制
自己去設計協議,不用照搬 RFC 的標准,其實就是數據結構的用場。
需要考慮到數據包丟失(Loss)、損壞(Corruption)、亂序(Disorder)這樣的情況。
(2)實現操作系統的虛擬內存機制(基於Nachos系統)
如何去設計頁表。如何使用置換演算法。以及應用程序請求頁的時候,發生缺頁,從而導致的中斷如何處理。
(3)實現一個簡單的編譯器(MiniJava)
詞法:字元串匹配,表達式求值 等演算法;
語法:生成抽象語法樹;
語義:採用適當的設計模式(Visitor)來生成語義表、字典、然後轉化為目標代碼(可以是匯編、或者是類似的 Three-Address Code)
如果以上三個任務都完成並搞懂了,那麼恭喜:你不僅掌握了數據結構、演算法,而且也學習了計算機網路、操作系統、編譯原理中大部分的知識。

㈡ 什麼是數據結構和演算法

本人乃一個數據痴迷者,在計算機的道路上,也是一個數據結構的痴迷者,現在大學裡面和同學搞開發也痴迷於資料庫,我就我個人的理解給你談一談:
首先,數據結構是一門計算機語言學的基礎學科,它不屬於任何一門語言,其體現的是幾乎所有標准語言的演算法的思想。
上面的概念有一些模糊,我們現在來具體說一說,相信你門的數據結構使用的是一門具體的語言比如C/C++語言來說明,那是為了輔助的學習數據結構,而數據結構本身不屬於任何語言(相信你把書上的程序敲到電腦裡面是不能通過的吧,其只是描述了過程,要調試程序,還需要修改和增加一些東西)。你們的書上開始應該在講究數據的物理存儲結構/邏輯存儲結構等概念,說明數據結構首先就是「數據的結構」,在內存上的存儲方式,就是物理的存儲結構,在程序使用人員的思想上它是邏輯的,比如:
你們在C/C++中學習到鏈表,那麼鏈表是什麼一個概念,你們使用指針制向下一個結點的首地址,讓他們串聯起來,形成一個接一個的結點,就像顯示生活中的火車一樣。而這只是對於程序員的概念,但是在內存中存儲的方式是怎樣的那?對於你程序員來說這是「透明」的,其內部分配空間在那裡,都是隨機的,而內存中也沒有一個又一根的線將他們串聯起來,所以,這是一個物理與邏輯的概念,對於我們程序員只需要知道這些就可以了,而我們主要要研究的是「邏輯結構」。
我可以給你一個我自己總結的一個概念:所有的演算法必須基於數據結構生存。也就是說,我們對於任何演算法的編寫,必須依賴一個已經存在的數據結構來對它進行操作,數據結構成為演算法的操作對象,這也是為什麼演算法和數據結構兩門分類不分家的概念,演算法在沒有數據結構的情況下,沒有任何存在的意義;而數據結構沒有演算法就等於是一個屍體而沒有靈魂。估計這個對於演算法的初學者可能有點暈,我們在具體的說一些東西吧:
我們在數據結構中最簡單的是什麼:我個人把書籍中線性表更加細化一層(這里是為了便於理解在這樣說的):單個元素,比如:int i;這個i就是一個數據結構,它是一個什麼樣的數據結構,就是一個類型為int的變數,我們可以對它進行加法/減法/乘法/除法/自加等等一系列操作,當然對於單個元素我們對它的數據結構和演算法的研究沒有什麼意義,因為它本來就是原子的,某些具體運算上可能演算法存在比較小的差異;而提升一個層次:就是我們的線性表(一般包含有:順序表/鏈表)那麼我們研究這樣兩種數據結構主要就是要研究它的什麼東西那?一般我們主要研究他們以結構為單位(就是結點)的增加/刪除/修改/檢索(查詢)四個操作(為什麼有這樣的操作,我在下面說到),我們一般把「增加/刪除/修改」都把它稱為更新,對於一個結點,若要進行更新一類的操作比如:刪除,對於順序表來說是使用下標訪問方式,那麼我們在刪除了一個元素後需要將這個元素後的所有元素後的所有元素全部向前移動,這個時間是對於越長的順序表,時間越長的,而對於鏈表,沒有順序的概念,其刪除元素只需要將前一個結點的指針指向被刪除點的下一個結點,將空間使用free()函數進行釋放,還原給操作系統。當執行檢索操作的時候,由於順序表直接使用下標進行隨機訪問,而鏈表需要從頭開始訪問一一匹配才可以得到使用的元素,這個時間也是和鏈表的結點個數成正比的。所以我們每一種數據結構對於不同的演算法會產生不同的效果,各自沒有絕對的好,也沒有絕對的不好,他們都有自己的應用價值和方式;這樣我們就可以在實際的項目開發中,對於內部的演算法時間和空間以及項目所能提供的硬體能力進行綜合評估,以讓自己的演算法能夠更加好。
(在這里只提到了基於數據結構的一個方面就是:速度,其實演算法的要素還應該包括:穩定性、健壯性、正確性、有窮性、可理解性、有輸入和輸出等等)
為什麼要以結點方式進行這些亂七八糟的操作那?首先明確一個概念就是:對於過程化程序設計語言所提供的都是一些基礎第一信息,比如一些關鍵字/保留字/運算符/分界符。而我們需要用程序解決現實生活中的問題,比如我們要程序記錄某公司人員的情況變化,那麼人員這個數據類型,在程序設計語言中是沒有的,那麼我們需要對人員的內部信息定義(不可能完全,只是我們需要那些就定義那些),比如:年齡/性別/姓名/出生日期/民族/工作單位/職稱/職務/工資狀態等,那麼就可以用一些C/C++語言描述了,如年齡我們就可以進行如下定義:
int age;/*age變數,表示人員公司人員的年齡*/
同理進行其他的定義,我們用結構體或類把他們封裝成自定義數據類型或類的形式,這樣用他們定義的就是一個人的對象的了,它內部包含了很多的模板數據了。
我就我個人的經歷估計的代碼量應該10000以內的(我個人的經理:只是建議,從你的第一行代碼開始算,不論程序正確與否,不論那一門語言,作為一個標准程序員需要十萬行的代碼的功底(這個是我在大學二年級感覺有一定時候的大致數據,不一定適合其他人),而十萬行代碼功底一般需要四門基礎遠支撐,若老師沒有教,可以自學一些語言)。

㈢ 數據結構與演算法分析 —— C 語言描述:樹的遍歷及應用

樹有很多應用,流行的用法之一是包括 UNIX、VAX/VMS 和 DOS 在內的許多常用操作系統中的目錄結構。

假設我們有一個根目錄 A,A 目錄下有一個目錄 B,B 目錄下有一個目錄 C,C 目錄下有一個文件 D。此時,文件 D 的全路徑名就為 A/B/C/D,其中,每一個 「/」 後的每一個 「/」在樹中都表示一山配山條邊,這個分級文件系統非常流行,因為它能夠使得用戶邏輯地組織數據。不僅如此,在不同目錄下的兩個文件還可以享有相同的名字,因為他們必然有從根開始的不同的路徑從而具有不同的路徑名。在 UNIX 文件系統中的目錄就是含有它的所有兒子的一個文件。(在 UNIX 文件系統中的每個目錄還有一項指向該目錄本身以及另一項指向該目錄的父目錄。因此,嚴格說來,UNIX 文件系統不是樹,而是類樹(treelike)。)

假設我們想要列出目錄中所文件中所有文件的名字。我們的輸出格式將是:深度為 的文件的名字被 次跳格(tab) 鎖進後列印出來。

演算法的核心為遞歸程序 ListDir。為了顯示根時不進行鎖進,該常式需要從目錄名和深度 0 開始。這里的深度是一個內部薄記變數,而不是主調常式能夠期望知道的那種參數。因此,驅動常式 ListDirectory 用於將遞歸常式和外界連接賣塌起來。

演算法的邏輯簡單易懂。ListDir 的參數是到樹中的某種引用。只要引用合理,則引用涉及的名字在進行適當次數的跳格鎖進後被列印出來。如果是一個目錄,那麼我們遞歸地一個逗中一個地處理它所有的兒子。這些兒子出在一個深度上,因此需要鎖進一段附加的空格。

這種遍歷的策略叫做先序遍歷(preorder traversal)。在先序遍歷中,對節點的處理工作是在它的諸兒子節點被處理之前進行的。當程序運行時,每個父節點恰好最多隻執行一次,因為每個名字只輸出一次。不僅如此,對於每個節點的每一個兒子節點最多隻能執行一次。在遍歷過程中,每個 for 循環終止在 NULL 指針上,但每個節點最多有一個這樣的指針。因此,每個節點總的工作量是常數。如果有 N 個文件名需要輸出,則運行時間就是 O(N)。

另一種遍歷樹的方法是後序遍歷(postorder traversal)。在後序遍歷中,在一個節點處的工作是在它的諸兒子節點被計算後進行的。

由於目錄本身也是文件,因此它們也有大小。設我們想要計算被該樹所有文件佔用的磁碟區塊的總數。最自然的做法是找出含有子目錄中的塊的個數。於是,磁碟塊的總數就是子目錄中的塊的總數加上該目錄使用的一個塊。

如果不是一個目錄,那麼 SizeDirectory 只返回所佔用的塊數。否則,將被佔用的塊數與其所有子節點(遞歸地)發現的塊數相加。

㈣ 什麼是數據結構什麼是演算法演算法與程序有什麼關系

在計算機編程領域,數據結構與演算法的應用是無處不在。比如圖像視頻處理、數據壓縮、資料庫、游戲開發、操作系統、編譯器、搜索引擎、AR、VR、人工智慧、區塊鏈等領域,都是以數據結構與演算法為基石。

數據結構與演算法屬於開發人員的基本內功,也能訓練大腦的思考能力,掌握一次,終生受益。扎實的數據結構與演算法功底,能讓我們站在更高的角度去思考代碼、寫出性能更優的程序,能讓我們更快速地學習上手各種新技術(比如人工智慧、區塊鏈等),也能讓我們敲開更高級編程領域的大門。

數據結構與演算法更是各大名企面試題中的常客,如果不想被行業拋棄、想進入更大的名企、在IT道路上走得更遠,掌握數據結構與演算法是非常有必要。

熱點內容
主存儲器屬於外存儲器嗎 發布:2025-05-15 16:54:00 瀏覽:755
顯示屏看股票都有哪些配置 發布:2025-05-15 16:52:39 瀏覽:397
android行情 發布:2025-05-15 16:52:25 瀏覽:438
活動上線前伺服器配置要注意什麼 發布:2025-05-15 16:38:43 瀏覽:949
王者榮耀安卓區怎麼免費轉蘋果 發布:2025-05-15 16:18:02 瀏覽:763
威朗pro高配都有哪些配置 發布:2025-05-15 15:57:09 瀏覽:958
資料庫分頁查詢數據 發布:2025-05-15 15:45:13 瀏覽:522
phpmyadmin上傳限制 發布:2025-05-15 15:39:52 瀏覽:432
如何給手機配置真正的電腦 發布:2025-05-15 15:39:52 瀏覽:765
抽腳本命令 發布:2025-05-15 15:39:45 瀏覽:662