資料結構之線性結構 棧 順序儲存

2021-07-23 11:29:38 字數 2654 閱讀 9584

棧是一種受限的線性表,它規定只能夠在表的尾部進行插入和刪除,我們把允許插入和刪除元素的一端稱為棧頂,而另一段稱為棧底,沒有任何元素的元素棧稱為空棧。

棧中的元素進出的規則為先入後出,即先進入棧的元素後出棧而後進入棧的元素先出棧。在對棧棧中的元素進行操作時只能夠操作棧頂的元素。

棧中儲存元素的三種狀態:

當儲存的元素超過了棧的儲存空間則會發生棧中元素的溢位。

向棧中插入元素叫做入棧:

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 約定列表的最後乙個元素為...