計算機是怎樣跑起來的 -- 數據結構的七要訣

程序中的變量是指什麼?

變量是數據的容器。變量中所存儲的數據是可以改變的。變量的實質是按照變量所存儲數據的大小被分配到的一塊內存空間。

要點1:瞭解內存和變量的關係

計算機所處理的數據都存儲在了被稱為內存的IC中。在一般的個人計算機中,內存內部分割成了若干個數據存儲單元,每個單元可以存儲8比特的數據。

因為依靠指定地址的方式編寫程序很麻煩,所以在高級語言中,都是使用變量把數據存儲進內存,或從內存中把數據讀出來的。

對於程序員來說,他們並不需要知道變量a被存儲到內存空間中的哪個地址上了。因為當程序運行時是由操作系統為我們從尚未使用的內存空間中劃分出一部分分配給變量a的。

計算機是怎樣跑起來的 -- 數據結構的七要訣

要點2:瞭解作為數據結構基礎的數組

數組實際上是為了存儲多個數據而在內存上集中分配出的一塊內存空間,並且為這塊空間整體賦予了一個名字。使用數組可以更加高效地編寫出能夠實現排序等算法的程序。

數組是數據結構的基礎,之所以這麼說是因為數組反映了內存的物理結構本身。在內存中存儲數據的空間是連續分佈的。而在程序中,往往要從內存整體分配出一塊連續的空間以供使用

要點3:瞭解數組的應用——作為典型算法的數據結構

數組是數據結構的基礎,只要使用數組就能通過程序實現各種各樣的算法以處理大量的數據。

通過使用數組和for語句,就能編寫出實現了線性搜索和冒泡排序算法的程序。

要點4:瞭解並掌握典型數據結構的類型和概念

數組是一種直接利用內存物理結構(計算機的特性)的最基本的數據結構。不過還有一些數據結構是數據無法實現的。主要有以下一些:

:把數據像小山一樣堆積起來;隊列:把數據排成一隊;鏈表:可以任意地改變數據的排列順序;二叉樹:把數據分為兩路排列

計算機是怎樣跑起來的 -- 數據結構的七要訣

要點5:瞭解棧和隊列的實現方法

棧和隊列的相似點在於,它們都可以把不能立刻處理的數據暫存起來;不同點在於,棧對所存儲數據的存取方式是LIFO的,而隊列對所存儲數據的存取方式是FIFO的。

在實現棧這種數據結構時,首先要定義一個數組和一個變量。數組中所包含的元素個數就是棧的大小。變量中則存儲著一個索引,指向存儲在棧中最頂端的數據,該變量被稱為棧頂指針。棧的大小可以根據程序的需求任意指定。通過使用由數組棧頂指針以及入棧函數出棧函數所構成的集合,就能實現棧這種數據結構了。

實現隊列的數據結構的幾個要點:1. 一個任意大小的數組;2. 一個用於存放排在隊頭的數據對應的索引的變量;3. 一個用於存放排在隊尾的數據對應的索引的變量;4. 一對兒函數,分別用於把數據存入到隊列和從隊列中把數據取出來。

計算機是怎樣跑起來的 -- 數據結構的七要訣

要點6:瞭解結構體的組成

所謂結構體,就是把若干個數據項彙集到一處並賦予其名字後所形成的一個整體。

一旦定義完結構體,就可以把結構體當作是一種數據類型,用它來定義定量。被彙集到結構體中的每個數據項被稱作“結構體成員”。

接下來只要巧妙地運用結構體的數組就可以實現鏈表和二叉樹了。

要點7:瞭解鏈表和二叉樹的實現方法

鏈表是一種類似數組的數據結構,這個“數組”中的每個元素和另一個元素都好像是手拉手一樣。

鏈表中的一個結構體元素成員ptr存儲了數組中另一個元素的地址。存儲著本元素不接下來該與哪個元素相連的信息,即下一個元素的地址。ptr是以結構體的指針為數據類型的成員。這種特殊的結構體可以稱為“

自我引用的結構體”。

所以只要替換了ptr的值,就可以對數組中的元素排序,使元素的排列順序不同於其在內存上的物理排列順序。

在二叉樹的實現中,用的還是自我引用的結構體,只不過要改為要帶兩個連接信息的成員的自我引用結構體。

二叉樹多用於實現那些用於搜索數據的算法。因為搜索數據時並不是像簡單數組那樣沿一條線搜索,而是尋著二叉樹不斷生長出來的兩要樹杈中的某一枝搜索。


分享到:


相關文章: