棧是一種受限的線性表,它規定只能夠在表的尾部進行插入和刪除,我們把允許插入和刪除元素的一端稱為棧頂,而另一段稱為棧底,沒有任何元素的元素棧稱為空棧。
棧中的元素進出的規則為先入後出,即先進入棧的元素後出棧而後進入棧的元素先出棧。在對棧棧中的元素進行操作時只能夠操作棧頂的元素。
棧中儲存元素的三種狀態:
當儲存的元素超過了棧的儲存空間則會發生棧中元素的溢位。
向棧中插入元素叫做入棧:
top指標用於記錄棧頂元素的位置
刪除棧中的元素:
兩個棧之間的空間共享:棧的線性儲存在一開始就會指定使用多少記憶體空間來儲存資料,但當我們向棧中儲存的資料量大於棧記憶體時則超出部分無法儲存,若此時還有另外乙個棧,在這個棧中儲存空間還沒有用完,則很浪費,我們可以將兩個棧鏈結實現棧之間的空間共享,鏈結方式為將乙個棧的棧底與另乙個棧的棧頂鏈結,此時這個棧的棧頂下標改為上乙個棧的儲存空間大小n-1
棧的順序儲存優點 :
只需要記錄棧頂的元素的位置而不用記錄元素的插入位置,而且在插入元素的時候不用再移動元素。
棧的順序儲存缺點 :
棧的順序儲存在一開始會分配固定大小記憶體空間來儲存元素,在後面儲存元素的時候記憶體空間不容易擴充套件。
2、儲存函式內部的非靜態區域性變數和一些編譯器生成的零時變數。
al_stackseq.h**
#ifndef al_stackseq_include
#define al_stackseq_include
#include
template
class al_stackseq
;template
inline al_stackseq::al_stackseq(dword dwsize):m_pelements(null),m_dwmaxsize(dwsize),m_dwsize(0x00)
getbuffer();
}template
inline al_stackseq::~al_stackseq()
}template
inline
bool al_stackseq::isempty() const
template
inline
bool al_stackseq::pop(t & ttypeout)
ttypeout = m_pelements[size() - 1];
m_dwsize--;
return
true;
}template
inline
bool al_stackseq::push(t & ttemplate)
m_pelements[size()] = ttemplate;
m_dwsize++;
return
true;
}template
inline dword al_stackseq::size() const
template
inline
bool al_stackseq::top(t & ttypeout) const
ttypeout = m_pelements[size()-1];
return
false;
}template
inline
void al_stackseq::clear()
template
inline
void al_stackseq::getbuffer()
if (m_pelements==null)
return;
}t *plasttype = null;
plasttype = m_pelements;
if (m_dwmaxsize==stackseq_maxsize)
if (m_dwmaxsize>stackseq_maxsize/2)
else
if (m_dwmaxsize>0)
//資料的複製
for (dword dwcopy=0;dwcopydelete plasttype;
plasttype = null;
}template
inline
bool al_stackseq::isfull() const
#endif
此時** :
void stackseqtest()
cstackseq.clear();
}int main(int argc, char *argv)
執行結果:
線性資料結構 棧的順序儲存結構
堆疊最基本的特徵就是先進後出,後進先出 通常是由乙個一維陣列和乙個記錄棧頂元素位置的變數組成。typedef int position struct snode typedef struct snode stack stack createstack int maxsize bool isfull ...
資料結構(棧 順序儲存 )
棧是特殊的線性表,規定插入和刪除在同一端進行 進行插入和刪除的那一端成為棧頂,另一端為棧底 插入為進棧,刪除為出棧 先進後出 ps 例如 abc進棧 出棧共有幾種情況 上溢 超出規定的空間大小還進行插入操作 下溢 棧中元素已經用完了還進行刪除操作 include include include de...
順序儲存 資料結構 棧
備註 以列表為基礎進行對此的封裝,以便達到棧的效果及作用 1 2棧的順序儲存結構 3重點 4 56 自定義棧異常 7class stackerror exception 8pass910 基於列表實現順序棧 11class sstack 12def init self 13 約定列表的最後乙個元素為...