順序棧和鏈棧

2021-09-05 08:52:21 字數 1392 閱讀 8781

//順序棧的儲存結構

#define maxsize 100

typedef struct sqstack;

順序棧的初始化操縱就是為順序棧動態分配乙個預訂大小的陣列空間(選乙個大小合適的桶)

void initstack(sqstack &s)
入棧操作就是指在棧頂插入乙個新的元素,新的元素為棧頂元素(給桶裡放燒餅,最上層的燒餅即是棧頂元素),而當棧滿時,則不能繼續放元素。

void push(sqstack &s,int data)else

}

出棧操作是將棧頂元素刪除

特別注意的是:出棧元素出棧之後,棧頂指標減一,棧裡的元素個數減一,而剛出棧的元素還在陣列中,不能被刪除,只是邏輯上的刪除,並不能物理上的刪除,就是在邏輯上,它已經是棧外元素了。

void pop(sqstack &s)else

}

當棧非空時,此操作返回棧頂元素的值,棧頂指標保持不變。

int gettop(sqstack &s)

}

注意:出棧和入棧時分別要考慮棧空和棧滿兩種問題。

因為順序棧和順序表一樣,受到最大空間的限制,雖然可以重新分配空間擴大容量,但是工作量比較大,應該盡量避免。因此無法估計到程式所需要的棧容量的大小時,應該採用鏈棧。

typedef struct stacknodestacknode,*linkstack;
鏈棧的初始化操縱就是構造乙個空棧,因為沒有必要設頭結點,所以直接將棧頂指標置空即可。

void initstack(stacknode *s)
鏈棧和順序棧入棧操作不同的是,鏈棧在入棧前不需要判斷棧是否滿,只需要為入棧元素動態分配乙個節點空間。

void push(linkstack s,int e)
和順序棧一樣,鏈棧在出棧前也需要判斷棧是否為空,不同的是,鏈棧在出棧後需要釋放出棧元素的棧頂棧頂空間。

void pop(linkstack &s)

stacknode *p=new stacknode;

p=s;//用p臨時儲存棧頂元素空間,一杯釋放

s=s->next;//修改棧頂指標

delete p;//釋放原棧頂元素空間

}

與順序棧一樣,當棧非空時,此操作返回當前棧頂元素的值,棧頂指標s保持不變。

int gettop(linkstack s)

}

這是棧的基本操作,有什麼錯誤的地方還希望能指出,共同進步。

棧,順序棧,鏈棧

棧作為一種限定性線性表,是將表的插入刪除限制為僅在表的一端進行,通常將表中允許插入刪除的一端叫做棧頂 top 因此棧頂的當前位置是動態變化的。棧的另一端叫做棧底 bottom 當棧中沒有元素時稱為空棧。插入操作稱為進棧或入棧,刪除操作稱為出棧或退棧。棧是先進後出的線性表,簡稱為lifo表。棧主要有兩...

棧 順序棧 鏈棧

棧 順序棧 鏈棧 分別用順序表和煉表實現棧,完成入棧 出棧 窺探棧頂元素等操作 commom.h ifndef common h define commom h include include include include include define elemtype int void swap...

C C 順序棧和鏈棧

順序棧 include using namespace std define maxsize 20 棧的順序儲存型別 struct sqstack s 初始化棧 void initstack sqstack s 判斷棧是否為空 bool isstackempty sqstack s 元素入棧 boo...