本部落格我們利用動態順序表實現棧。與靜態順序表的區別就是靈活性更高。
我們動態順序棧存放的是自棧底到棧頂的資料元素,通過雙指標控制。
通常的習慣做法是以top = 0
表示空棧,鑑於c
語言中陣列下標約定從0
開始,則當以c
作為描述語言時,如此設定會帶來很大不便。另一方面,由於棧在使用過程中所需**大空間的大小很難估計,因此在初始化設空棧時不應該限定棧的最大容量,所以就有了此篇動態版順序表的實現,採用的做法是:先為棧分配乙個基本容量,然後再應用過程中,當棧的空間不夠使用時再逐段擴大。因此可以設定兩個常量:stack_init_size
(即儲存空間初始分配量)和stackincrement
(即儲存空間分配增量)。
#pragma once
//結點結構體定義
typedef struct sqstack;
//引數巨集定義,方便進行擴容
#define stack_init_size
100#define stackincrement
10
//建立乙個空棧s
void
initstack
(sqstack &s)
s.top =
s.base;
s.stacksize =
stack_init_size
;return0;
}
void
gettop
(sqstack s
, selemtype &e)
e =*(
s.top -1)
;return0;
}
//插入元素e為新的棧頂元素
void
push
(sqstack &
s, selemtype e)
s.top =
s.base +
s.stacksize;
s.stacksize +=
stackincrement;}
*s.top++
= e;
return0;
}
void
pop(sqstack &
s, selemtype &e)
e =*--
s.top;
//立即向回步進一步,將內容賦予e變數
return0;
}
資料結構遍歷順序棧 資料結構 順序棧的實現
資料結構 順序棧的實現 1 快速開始 棧是一種遵循元素後進 push 先出 pop 規則的線性表,即最後加入的元素最先出來,它的實現可以用陣列或者鍊錶。它的特點如下 先出,先入後出。除了頭尾節點之外,每乙個元素有乙個前驅,有乙個後繼。2 實現棧 我們已經說過了,棧是一種線性表,故其底層是基於陣列或者...
資料結構 順序棧的實現
棧是一種遵循元素後進 push 先出 pop 規則的線性表,即最後加入的元素最先出來,它的實現可以用陣列或者鍊錶。它的特點如下 我們已經說過了,棧是一種線性表,故其底層是基於陣列或者鍊錶的。那麼,我們的重點是維護一種規則,即後進先出。我們始終要有乙個變數l來記錄最後乙個元素的位置 當彈出時,將l位置...
資料結構之順序棧 C 版
include include define maxlistsize 100 預設的儲存空間最大容量 using namespace std typedef string elemtype typedef structstack void initstack stack s void destroy...