資料結構與演算法基本

2021-10-04 22:43:07 字數 2573 閱讀 9689

棧的演算法:

計算機內部空間是連續儲存的,但是可以通過邏輯上改變記憶體的物理結構,資料在記憶體上呈現出的是連續分布狀態

主要的典型資料結構

在實現棧這種資料結構時,首先要定義乙個陣列和乙個變數。陣列中所包含的元素個數就是棧的大小(棧中最多能存放多少個資料)。

變數中則儲存著乙個索引,指向儲存在棧中最頂端的資料,該變數被 稱為「棧頂指標」。

棧的大小可以根據程式的需求任意指定。假設最多 也就有 100 個資料,那麼定義乙個能把它們都儲存下來的棧就可以了, 這樣的話就可以定義乙個元素數為 100 的陣列。這個陣列就是棧的基礎。

接下來編寫兩個函式,乙個函式用於把資料存入到棧中,也叫作壓入到棧中;另乙個函式用於從棧中把資料取出來,也叫作從棧中彈出來。在這兩個函式中,都需要更新棧中所儲存的資料的總數,以及更 新棧頂指標的位置。也就是說通過使用由陣列、棧頂指標以及入棧函 數和出棧函式所構成的集合,就能實現棧這種資料結構了

2.了解結構體的組成:

要想理解用 c 語言程式實現鍊錶和二叉樹的方法,就必須先了解 何謂「結構體」。所謂結構體,就是把若干個資料項匯集到一處並賦予 其名字後所形成的乙個整體。

例如,可以把學生的語文、數學、英語 的考試成績匯集起來,做成乙個叫作 testresult 的結構體。

一旦定義完結構體,就可以把結構體當作是一種資料型別用它來定義變數

如果把結構體 testresult 用作資料型別並定義出了乙個名 為 xiaoming 的變數(代表小明的成績),那麼在記憶體上就相應地分配出了一塊空間,這塊空間由用於儲存 chinese、math、english 這三個成員 (member)資料所需的空間匯集而來。被匯集到結構體中的每個資料項都被稱作「結構體的成員」。

在為結構體的成員賦值或是讀取成員的值時,可以使用形如 xiaoming.chinese(表示小明的語文成績)的表示式, 即以「.」分割變數和結構體的成員

如果要編寫乙個用於處理 100 名學生考試成績的程式,就需要定 義乙個以 testresult 為資料型別、包含 100 個元素的陣列。通過定義, 在記憶體上就分配出了一塊空間,能夠儲存 100 個資料的集合,每個資料的集合中都含有 chinese、math、english 三個資料項。接下來只要巧妙地運用結構體的陣列就可以實現鍊錶和二叉樹了。

3.了解鍊錶和二叉樹的實現方法:

下面講解如何使用結構體的陣列實現鍊錶。鍊錶是一種類似陣列 的資料結構,這個「陣列」中的每個元素和另乙個元素都好像是手拉著 手一樣。在現有的以結構體 testresult 為資料型別的陣列 student[100] 中,為了讓各個元素「把手拉起來」,就需要在結構體中再新增乙個成員

這裡的成員 ptr 儲存了陣列中另乙個元素的位址。在 c 語言中,把儲存著位址的變 量稱為「指標」。這裡的「*」(星號)就是指標的標誌。諸位可以看到, ptr 就是以結構體 testresult 的指標(struct testresult*)為資料型別的 成員。這種特殊的結構體可以稱為「自我引用的結構體」。之所以叫這 個名字,是因為在結構體 testresult 的成員中,含有以 testresult 的指 針為資料型別的成員,這就相當於 testresult 引用了與自身相同的資料 型別。

在結構體 testresult(已變成了自我引用的結構體)的陣列中,每 個元素都含有乙個學生的語文、數學、英語成績以及成員 ptr。ptr 中存 儲著本元素接下來該與哪乙個元素相連的資訊,即下乙個元素的位址。 在鍊錶的初始狀態中,會按照元素在記憶體上的分布情況設定成員 ptr 的值

在二叉 樹的實現中,用的還是自我引用的結構體,只不過要改為要帶有兩個 連線資訊的成員的自我引用結構體

二叉樹多用於實現那些用於搜尋資料的演算法,比如「二分查詢法」。 比起只使用鍊錶,使用二叉樹能夠更快地找到資料。因為搜尋資料時 並不是像在簡單陣列中那樣沿一條線搜尋,而是尋著二叉樹不斷生長 出來的兩根樹杈中的某一枝搜尋,這樣就能更快地找到目標資料了

因此陣列對於演算法和資料結構來說很重要,需要大家靈活使用

資料結構與演算法(基本認知)

是對特定問題求解步驟的一種描述,是指令的有限序列 評價演算法的優劣 時間複雜度和空間複雜度其實就是所耗時間與空間關於輸入資料規模的函式 1 時間複雜度 算出結果的時間花費多少 2 空間複雜度 算出結果需要的記憶體位元組的多少 3 可讀性和可維護性 是相互之間存在的一種或者多種特定關係的資料元素的集合...

資料結構與演算法分析記錄 基本資料結構

單鏈表 struct node 找到某一元素 position find elementtype x,list list 刪除某一元素 void delete elementtype x,list l 找到目標元素前的元素 position findprevious elementtype x,li...

演算法與資料結構 五 基本排序演算法

前面幾篇基本上把基本的資料結構都回顧完了,現在開始回顧那些常見的排序演算法。排序是將一組無序的資料根據某種規則重新排列成有序的這麼乙個過程,當時在大學需要我們手工自己實現的主要有三種 選擇排序 插入排序和氣泡排序。因為它比較簡單,所以這裡把他們放到一起作為最基本的排序演算法。插入排序的思路是這樣的 ...