二、設計與實現
順序棧:以基於順序表的形式來實現棧的特性。而順序表的底層放的是陣列
鏈棧:以基於鍊錶的形式來實現棧的特性。而鍊錶的底層放的就是鍊錶
(1)再進行操作前,我們要先想想應該怎麼插入元素?該如何知道陣列中當前哪個位置可以插入元素?那麼我們需要定義乙個標識用來標記可存放的位置
(2)用棧頂指標來儲存每個資料元素的下標,用來標記位置
int top;//每插入乙個元素,top++;每刪除乙個元素,top--
(3)在棧中,同樣有增刪改查,不過增加元素稱為壓棧,刪除元素稱為出棧(4)儲存結構如下(初始化後)
}pst中存放的是main函式中定義的棧st的位址。如果pst != null,那說明init中的pst已經指向了main中的st
(1)在棧中不是動態開闢的記憶體,所以要提前判斷棧空間中是否可以插入資料
(2)我們需要思考的是什麼情況下,不可以在去存放資料?
(3)在我們結構定義的時候巨集定義了乙個stack_size的變數,我們也知道,隨著棧中資料的存放,棧頂指標top一直在++,那麼當top++到與stack_size數值相等時,是不是就不能在存放了,此時棧滿。
(1)當資料域為空時,我們才可以插入資料。那麼也就是當top++到與空閒資料域的下標相等時,就可以插入元素
}與判滿操作類似
int
empty
(pstack pst)
在壓棧時,我們知道當top++到與空閒資料域的下標相等時,儲存資料,那取出資料的時候就是要在當top++到與空閒資料域的下標-1相等時,取出資料
int
pop(pstack pst)
//只刪除元素,不獲取元素
pst->top--
;return1;
}
如果是c++,就會存在異常處理機制,如果棧空,直接會丟擲異常。
//通過返回值返回狀態,由形參把棧頂元素帶出
intgettop
(pstack pst,elemtype* prt)
//拿到棧頂元素,但不刪除
*prt = pst->data[pst->top -1]
;return1;
}
int rt =0;
int flag =
gettop
(&st,
&rt);if
(flag)
資料結構 順序棧 Stack
08年9月入學,12年7月畢業,結束了我在軟體學院愉快豐富的大學生活。此系列是對四年專業課程學習的回顧,索引參見 棧是只能在某一端插入和刪除的特殊線性表。它按照後進先出的原則儲存資料,先進入的資料被壓入棧底 push 最後的資料在棧頂 top 需要讀資料的時候從棧頂開始彈出資料 top 最後乙個資料...
資料結構 棧(Stack)
只允許在一端進行插入或刪除操作的線性表。首先,棧是一種線性表,但限定這種線性表只能在某一段進行插入和刪除操作。棧頂 top 線性表允許進行插入和刪除的一端。棧底 bottom 固定的,不允許進行插入和刪除的另一端。空棧 不含任何元素。如上圖 a1為棧底元素,an為棧頂元素。由於棧只能在棧頂進行插入和...
資料結構 棧stack
棧的概念與資料結構 棧 有時稱為 後進先出棧 是乙個元素的有序集合,其中新增移除新元素總發生在同一端。這一端通常稱為 頂部 與頂部對應的端稱為 底部 棧的底部很重要,因為在棧中靠近底部的元素是儲存時間最長的。最近新增的元素是最先會被移除的。這種排序原則有時被稱為 lifo,後進先出。它基於在集合內的...