結構pop 12 鏈棧結構及其基本操作

2021-10-14 23:00:58 字數 1436 閱讀 8429

根據之前的順序棧模擬,棧只是棧頂來做插入和刪除操作,棧頂放在鍊錶的頭部還是尾部呢?

模擬單鏈表的頭指標和棧頂指標,為什麼不合二為一呢?

所以想出了把棧頂放在單鏈表的頭部

對於鏈棧來說,基本不存在棧滿的情況

鏈棧的結構**:

/* 鏈棧結構 */

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