棧的基本操作(一)

2021-07-23 17:40:51 字數 1618 閱讀 2772

棧是一種只能在一端進行插入或刪除操作的線性表。其中允許進行插入或刪除操作的一端稱為(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...