順序棧與鏈棧,定義,結構,基本操作

2021-09-27 03:05:18 字數 1561 閱讀 3082

一、棧

定義:棧是僅在表尾進行插入或刪除操作的線性表,表頭端稱為棧底,表尾端稱為棧頂,對於棧中的進棧與退棧,進棧的第乙個元素在棧中位置為棧底元素,退棧的第乙個元素為棧頂元素,遵循著先進後出,後進先出的原則。而棧又分為了順序棧和鏈棧。

(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...