定義:順序棧:限定僅在表尾進行插入和刪除操作的線性表。即後進先出的線性表(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問題)
暫時沒時間下,有時間補上
遞迴演算法的效率分析
暫時沒時間寫,有時間不上
將遞迴轉換為非遞迴方法
遞迴的優點:結構清晰,程式易讀;目的:提高演算法的時間、空間效能,所以使用遞迴演算法來分析問題,用非遞迴演算法來解決問題;遞迴的缺點:需要系統提供隱式棧這種結構來實現,占用記憶體空間較多,執行效率低。
將遞迴換為非遞迴的方法(兩種)定義:是一種先進先出(first in first out)fifo的線性表。迴圈方法
1.單項遞迴
2.尾遞迴
利用棧消除遞迴
儲存表示:順序表示和鏈式表示;
順序儲存結構
一組位址連續的儲存單元依次存放佇列頭到佇列尾的元素;
結構:兩個指標隊頭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 佇列的鏈式儲存結構 一.構造原理 二 實現 ...