一、棧
定義:棧是僅在表尾進行插入或刪除操作的線性表,表頭端稱為棧底,表尾端稱為棧頂,對於棧中的進棧與退棧,進棧的第乙個元素在棧中位置為棧底元素,退棧的第乙個元素為棧頂元素,遵循著先進後出,後進先出的原則。而棧又分為了順序棧和鏈棧。
(2)順序棧的基本操作:
1、順序棧的初始化
演算法步驟:
a.確定棧的可儲存元素數目
b.根據棧的大小來申請相應大小的儲存空間(陣列)
c.把獲得的陣列空間首位址賦給top、base指標,讓指標同時指向陣列空間的首位址
status initstack(sqstack &p)
2、順序棧的入棧操作:
當資料元素加入棧中時,top指標隨著加入元素而加一。
演算法步驟:
a.因為棧的儲存空間已經限定好,所以要先判斷能不能繼續儲存資料
b.把新資料i加入棧中
c.top加一
status intostack(sqstack &p,int i)
3、順序棧的出棧操作:
當資料元素被移出棧時,top指標減一。
a.因為要將棧內元素移出棧前提是棧中必有元素存在,所以要先判斷棧是否為空
b.top減一
status movestack(sqstack &p)
(3)鏈棧:鏈棧是指採用鏈式儲存結構實現儲存資料的棧,其基本結構與單鏈表的結點相同。
鏈棧的儲存結構:
typedef struct snodesnode,*linkstack;
(4)鏈棧的基本操作:
1、鏈棧的初始化
鏈棧的初始化就是構造乙個空棧
status initstack(linkstack &s)
2、入棧操作:
入棧操作與單鏈表的插入操作類似,需將新結點的位址賦給棧頂指標,新結點中的指標指向原棧頂的位址。
演算法步驟:
a.構造乙個新結點p來儲存新資料元素e
b.修改結點中next指標指向
c.修改棧頂指標s的指向,使其指向新結點p
status push(linkstack &s,char e)
p=new snode;
p->data=e;
p->next=s;
s=p;
return ok;
}3、出棧操作:
由於棧元素的出棧滿足「後進先出」的原則,所以出棧元素即為棧頂元素,出棧時,只需保留棧點資料,改變棧頂指標即可。
a.要可出棧,則必須要有棧內資料,即該棧非空,若為空,返回error
b.定義乙個新結點,儲存需出棧的結點位址,以備釋放記憶體
c.將需出棧的結點資料儲存在e中返回
d.使棧頂指標指向需出棧的結點的下乙個結點位址
status pop(linkstack &s,char &e)
順序棧 鏈棧基本操作
include stdafx.h include stdio.h include stdlib.h define stack max size 7 int stackdata stack max size define stack max size 14 int stackdata stack ma...
順序棧 鏈棧基本操作
include stdafx.h include stdio.h include stdlib.h define stack max size 7 int stackdata stack max size define stack max size 14 int stackdata stack ma...
順序棧 鏈棧基本操作
include stdafx.h include stdio.h include stdlib.h define stack max size 7 int stackdata stack max size define stack max size 14 int stackdata stack ma...