棧是一種只能在一端進行插入或刪除操作的線性表。其中允許進行插入或刪除操作的一端稱為(top),棧頂由乙個稱為棧頂指標的位置指示器(其實就是乙個變數,對於順序棧,就是記錄棧頂元素在陣列位置標號的乙個整型變數;對於鏈式棧,就是記錄棧頂元素所在結點位址的指標)來指示,它是動態變化的。表的另一端稱為棧底,棧底是固定不變的。棧的插入和操作一般稱為入棧和出棧。本篇文章以順序棧為主。
棧的特點
先進先出(filo)。
棧的儲存結構
棧有兩種主要的儲存結構:順序棧和鏈式棧。棧是一種在操作上稍加限制的線性表,即其本質就是線性表,而線性表有兩種主要的儲存結構—順序表和鏈式表,因此棧有兩種儲存結構。
棧的數學性質
當n個編號元素以某種順序進棧,並且可以在任意時刻出棧,所獲得的編號元素排列的數目n恰好滿足catalan函式的計算,即
1.順序棧定義
typedef
structsqstack;
如圖為順序棧的示意圖。
對於順序棧,一共有4個要素,包括兩個特殊狀態和兩個操作。
兩個特殊狀態
棧空狀態(st.top==-1)
棧滿狀態(st.top==maxsize-1)
兩個操作
元素進棧操作:++(st.top);st.data[st.top]=x;。 既然規定了top為1的時候棧空,則元素進棧操作必須是先移動指標,再進入元素,因為陣列下標不存在-1。
**元素出棧操作**x=st.data[st.top];–(st.top);。進棧操作的次序決定了出棧操作次序,由於進棧是先變動指標,再進入元素,所以出棧操作必須是先取出元素,再變動指標。
2.順序棧的基本演算法操作
1.初始化順序棧
初始化乙個棧,只需要將棧頂指標置為-1即可。
void initstack(sqstack &st)
2.判斷棧空
棧st為空時返回1,否則返回0。
int isempty(sqstack st)else
}
3.進棧演算法int push(sqstack &st,int x)
++(st
.top);
st.data[st
.top]=x
;//先移動指標再進棧
return 1
;}
4.出棧演算法int pop(sqstack &st,int &x)
x=st
.data[st
.top];//取出元素再移動指標
--(st
.top);
return 1
;}
棧(一) 棧的基本操作
1.棧的簡介 棧是一種後入先出的資料結構,一般包含兩種最基本的操作 入棧 push 和出棧 pop 入棧操作 top指標上移,元素入棧。出棧操作 top指標下移。棧空的條件 top bottom 棧滿的條件 top maxsize 1 2.有資料序列1 2 3一次存入乙個棧stack中,則出棧順序可...
棧 的基本操作。
include include typedef struct node node,pnode typedef struct stack stack,pstack void initialize pstack mystack 棧的初始化。int push stack pstack mystack,in...
棧的基本操作
描述 棧是一種重要的資料結構,它具有push k和pop操作。push k是將數字k加入到棧中,pop則是從棧中取乙個數出來。棧是後進先出的 把棧也看成橫向的乙個通道,則push k是將k放到棧的最右邊,而pop也是從棧的最右邊取出乙個數。假設棧當前從左至右含有1和2兩個數,則執行push 5和po...