資料結構 (四)棧

2021-09-28 11:15:22 字數 2422 閱讀 9497

總體來說,棧的知識比線性表、順序表簡單很多。但是同時也有許多需要注意的點,稍稍不注意就可能會出現錯誤,因此,雖然簡單一點,但也要細心學習。

一、基本知識

棧:限定僅在表尾進行插入和刪除操作的線性表。允許插入和刪除的一端稱為棧頂,另一端稱為棧底。

空棧:不含任何資料元素的棧。

棧的操作特性:後進先出

注意:棧只是對錶插入和刪除操作的位置進行了限制,並沒有限定插入和刪除操作進行的時間。

二、棧的順序儲存結構及實現

順序棧類的宣告

const int  max_size=100;

template class seqstack

順序棧的實現——入棧

template void seqstack::push ( t  x)

順序棧的實現—判斷是否是空棧

template bool seqstack::empty ()

順序棧的實現——取棧頂

template t seqstack::gettop ( )

順序棧的實現——出棧

template t seqstack:: pop ( )

***~~雙端棧

兩棧共享空間類的宣告

const int stack_size=100;  

template class bothstack

;

兩棧共享空間的實現——插入

如果棧滿,則丟擲上溢異常;

判斷是插在棧1還是棧2;

2.1 若在棧1插入,則

top1加1;

在top1處填入x;

2.2 若在棧2插入,則

top2減1;

在top2處填入x;

template void bothstack::push(int i, t x)

兩棧共享空間的實現——刪除

若是在棧1刪除,則

1.1 若棧1為空棧,丟擲下溢異常;

1.2 刪除並返回棧1的棧頂元素;

若是在棧2刪除,則

2.1 若棧2為空棧,丟擲下溢異常;

2.2 刪除並返回棧2的棧頂元素;

template t bothstack::pop(int i)   

if (i==2)

}

判斷某個棧空演算法

template bool bothstack::empty(int i)

if(i==2)

}

取某個棧棧頂的演算法

template t bothstack::gettop(int i)

if(i==2)

}

三、棧的鏈結儲存結構及實現

鏈棧的類宣告

template class linkstack

;

~linkstack( );

void push(t x);

t pop( );

t gettop( );

bool empty( );

private:

node*top;

}

鏈棧的實現——插入(入棧)

template void linkstack::push(t x)

鏈棧的實現——刪除(出棧)

template t linkstack::pop( )

鏈棧的實現——鏈棧的析構(鏈棧的銷毀)

template linkstack::~linkstack( )

}

資料結構 四 棧

棧是限定僅在表尾進行插入和刪除的線性表 typedef struct sqstack 棧的順序基本操作 1 進棧操作 status push sqstack s,selemtype e s top s data s rop e return ok 2 出棧操作 status pop sqstack ...

資料結構之棧(四)

本文將繼續擴充套件stack在arithmetical expression的處理方面的應用,其中包括 postfix2prefix postfix2infix 和 infix2postfix 一 postfix2prefix 它是通過多次入棧和出棧來完成的。主要步驟是 遍歷 postfix str...

java資料結構(四) 棧

樹結構是一種描述非線性關係的資料結構。對於樹的基本概念不想過多贅述,可以自行查閱相關資料,這裡主要講解一種簡單的樹結構 二叉樹。二叉樹是樹的一種特殊形式,它有n個結點,每個結點最多有兩個子結點。二叉樹的子樹仍然是二叉樹,二叉樹的兩個子樹分別是左子樹和右子樹,因此二叉樹也是有序樹。二叉樹又分為 完全二...