資料結構 第三章 棧與佇列

2021-07-31 10:56:28 字數 2326 閱讀 9881

定義:

限定僅在表尾進行插入和刪除操作的線性表。即後進先出的線性表(last in first out)表尾即棧頂top,表頭即棧低bottom。

儲存方式:

順序棧、鏈棧;

順序棧

一組位址連續的儲存單元,一次存放自棧低到棧頂的資料元素。

結構:兩個指標top,base,乙個int size描述棧的大小;

空棧:top = base;

非空棧:base指向棧低,top指向棧頂元素的下乙個位置上。

#define maxsize 100  //順序棧儲存空間的初始分配量

typedef structsqlstack;

鏈棧採用鏈式儲存結構實現棧,通常用單鏈表表示。

結構:stacknode(elemtype data,stacknode next);

主要操作:對棧頂的插入和刪除

數制轉換

十進位制資料n和其他進製的轉換是計算機實現計算的基本問題,演算法基於的原理:

n=(n div d)*d+n mod d

div:整除

mode:取餘數

括號匹配的檢驗

表示式求值

遞迴:若在乙個函式、過程或資料結構定義的內部又直接或間接出現定義本身的應用,則稱為遞迴。

通常在3中情況下使用遞迴:

1. 定義是遞迴的(fact階乘函式、fib二階的fibonacci數列)

2. 資料結構是遞迴的(依次輸出鍊錶中各個節點的遞迴)

3. 問題的解法是遞迴(hanoi問題)

* 遞迴過程與遞迴工作棧*

暫時沒時間下,有時間補上

遞迴演算法的效率分析

暫時沒時間寫,有時間不上

將遞迴轉換為非遞迴方法

遞迴的優點:結構清晰,程式易讀;

遞迴的缺點:需要系統提供隱式棧這種結構來實現,占用記憶體空間較多,執行效率低。

目的:提高演算法的時間、空間效能,所以使用遞迴演算法來分析問題,用非遞迴演算法來解決問題;

將遞迴換為非遞迴的方法(兩種)

迴圈方法

1.單項遞迴

2.尾遞迴

利用棧消除遞迴

定義:是一種先進先出(first in first out)fifo的線性表。

儲存表示:順序表示和鏈式表示;

順序儲存結構

一組位址連續的儲存單元依次存放佇列頭到佇列尾的元素;

結構:兩個指標隊頭front和隊尾rear;

這種儲存會出現假溢位問題;

迴圈佇列

為了解決假溢位現象,將順序佇列臆造為乙個環狀的空間,稱之為迴圈佇列。

隊頭、尾指標的環狀增1的操作用「模」運算來實現。

區別隊滿和隊空的方法:

1.少用乙個空間,佇列有m個空間,當有m-1個元素時,就判定佇列已滿。

隊空:q.font = q.rear

隊滿:(q.rear+1)%maxqsize = q.font

2.設定標誌位

鏈隊

鍊錶表示的佇列即鏈隊;

佇列的應用

列印二項式係數表

資料結構 第三章 棧與佇列

3.1 棧 3.1.1 抽象資料型別棧的定義 棧是限定僅在表尾進行插入或刪除操作的線性表。因此,對棧來說,表尾端有其特殊含義,稱為棧頂。相反地,表頭端稱為棧底。棧是後進先出 lifo 的線性表。基本操作 top 返回棧頂元素 pop 彈出棧頂元素 push a 將元素a壓入棧 empty 判斷是否為...

資料結構第三章棧和佇列

第四章 棧和佇列 1.棧 限定僅在表尾進行插入或刪除操作的線性表,表尾端稱為棧頂,表頭端稱為棧底。棧頂移動,棧底固定。特點 先進後出 後進先出 typedef struct sqstack status push sqstack s,selemtype e status pop sqstack s,...

資料結構 第三章 棧和佇列

目錄 3.1 堆疊的基本概念 3.2 堆疊的順序儲存結構 一 構造原理 二 實現 三.多棧共享連續空間問題 3.3 堆疊的鏈式儲存結構 一.構造原理 二 實現 3.4 佇列的基本概念 3.5佇列的順序儲存結構 一.構造原理 二 實現 三.迴圈佇列 3.5 佇列的鏈式儲存結構 一.構造原理 二 實現 ...