棧也是一種線性表,棧中的元素具有線性關係,只不過它是一種特殊的線性表而已,也就是說,棧是一種只能在棧頂的位置進行插入和刪除操作的線性表。
圖1-棧的基本操作
棧的插入操作,叫做進棧,也稱為壓棧。類似子彈入彈夾,棧的刪除操作,叫做出棧,也有的叫做弾棧,退棧。如同彈夾中的子彈出夾。
對於棧中的a,b,c,d四個元素來說,a是最先進棧的元素,然後b,c,d依次進棧,由於d是最後進棧的,所以d元素是在棧頂,而a元素是在棧底。當出棧時,d元素在棧頂,所以d元素最先出棧,然後c,b,a依次出棧,而a元素是最後出棧的。因此我們可以發現:棧中的元素總是先進後出的。
順序棧的抽象資料型別定義如下
adt stack
//elemtype為型別識別符號
資料關係:
r =
資料操作:
initstack(&s):初始化棧。構造乙個空棧s。
destroystack(&s):銷毀棧。釋放棧s占用的儲存空間。
stackempty(s):判斷棧是否為空:若棧s為空,則返回真;否則返回假。
push(&s,e):進棧。將元素e插入到棧s中作為棧頂元素。
pop(&s,&e):出棧。從棧s中退出棧頂元素,並將其值賦給e。
gettop(s,&e):取棧頂元素。返回當前的棧頂元素,並將其值賦給e。
}
棧的順序儲存結構:
//定義棧的順序儲存結構
typedef
struct sqstack
sqstack;
因為棧是一種特殊的線性表,所以棧的順序儲存可以通過順序線性表來實現。
圖2-順序棧的儲存實現
順序棧4要素:
圖3-順序棧4要素
假設棧的大小以maxsize=5為例
1 . 棧滿條件:當top的下標等於maxsize - 1時,表示棧已經存滿元素了。
2 . 元素a進棧操作:先將top下標+1,將元素a放在top下標的位置
3 . 元素a出棧操作:先從top下標的位置將元素a出棧,然後top下標-1
4 . 棧空的條件:當top = -1,因為top = 0表示已經是指向棧中的最後乙個元素,所以當top = -1則表示棧為空,沒有元素了。
受限的線性表 棧 順序棧
include define maxsize 50 typedef int datatype using namespace std 棧的資料結構 順序棧 資料運算 1.初始化乙個空棧 初始指標 1 2.資料元素入棧 如果棧沒滿,資料元素入棧 3.資料元素出棧 如果棧沒空,資料元素出棧 4.得到棧頂...
c語言 棧(受限制線性表)
它的特殊之處在於限制了這個線性表的插入和刪除的位置,它始終只在棧頂進行。這也 就使得棧底是固定的,最先進棧的只能在棧底。棧的插入操作,叫做進棧,也成壓棧。類似子彈入彈夾 棧的刪除操作,叫做出棧,也有的叫做彈棧,退棧。如同彈夾中的子彈出夾 用陣列實現棧 pragma once include incl...
線性表 棧 佇列
輔助定義 define maxsize 5 define ok 0 define error 1 typedef int selemtype typedef int status 棧 順序 鏈式 相關結構體定義 順序棧 typedef struct sqstack 順序棧共享空間 typedef s...