根據之前的順序棧模擬,棧只是棧頂來做插入和刪除操作,棧頂放在鍊錶的頭部還是尾部呢?
模擬單鏈表的頭指標和棧頂指標,為什麼不合二為一呢?
所以想出了把棧頂放在單鏈表的頭部
對於鏈棧來說,基本不存在棧滿的情況
鏈棧的結構**:
/* 鏈棧結構 */
typedef struct stacknode
stacknode,*linkstackptr;
typedef struct
linkstack;
鏈棧的進棧操作:
假設元素值是e的新結點是s,top為棧頂指標
其**結構:
/* 插入元素e為新的棧頂元素 */
status push(linkstack *s,selemtype e)
出棧操作:
假設變數p用來儲存要刪除的棧頂結點,將棧頂指標下移以為,最後釋放p即可
/* 若棧不空,則刪除s的棧頂元素,用e返回其值,並返回ok;否則返回error */
status pop(linkstack *s,selemtype *e)
對比順序棧和鏈棧,他們在時間複雜度上是一樣的,都是o(1),空間上,順序棧需要實現確定 乙個固定的長度,可能會存在記憶體空間浪費的問題,但是他的優勢是訪問時定位方便,而鏈棧要求每個元素都有指標域,這同時也增加了一些記憶體開銷,但是對於棧的長度沒有限制
所以,如果棧在使用中元素變化不可預料,最好是用鏈棧,反之使用順序棧會好一些
仿照順序棧的例子用鏈棧實現:
鏈棧及其基本操作
public inte ce istack import ch02.node public class linkstack implements istack 測試棧是否為空 public boolean isempty 求棧中的資料元素個數並由函式返回其值 public int length re...
棧 順序儲存結構及其基本運算
該文章主要介紹棧的順序儲存結構以及相關運算。標頭檔案 sqstack.h template class sqstackclass 順序棧類 原始檔 sqstack.cpp include include sqstack.h using namespace std const int maxsize ...
3 1雙棧結構及其基本操作
題目 將編號0和1的兩個棧存放於乙個空間v m 的陣列空間中,棧底分別處於陣列的兩端。當第0號棧的棧頂指標top 0 1時該棧為空 當第1號棧的棧頂指標top 1 m時,該棧為空。兩個棧均從兩端向中間增長 如下圖 試編寫雙棧初始化,判斷棧空,棧滿,進棧,出棧等演算法的函式。雙棧結構的定義如下 1.雙...