棧的定義及其基本運算

2022-05-05 23:57:16 字數 2009 閱讀 2797

基本定義

(stack)是n個元素a1,a2,…an,組成的有限序列,記作s =(a1,a2,…,an),並且只能在一端插入和刪除元素,n=0時稱為空棧

棧的特徵

由於棧只能從一端插入和刪除元素,故棧具有後進先出(last in,first out,lifo)的特性。稱插入和刪除的一端為棧頂(top),另一端為棧底(bottom)。稱插入元素為入棧壓棧(push),刪除元素為出棧彈棧(pop)。

棧的基本運算定義

1.初始化棧:設定棧為空棧。

2.判斷棧是否為空棧:若棧為空,則返回true,否則返回false。因此應為布林型別。

3.判斷棧是否滿棧:若棧已滿,則返回true,否則返回false。亦為布林型別。

4.取棧頂元素:若棧不空,則將棧頂元素的值送入變數x中,否則應返回出錯資訊。為此,該函式引數列表中應定義變數x。

5.入棧:將值為x的元素送入到棧頂,若棧已滿,返回出錯資訊。

6.出棧:若棧不空,則刪除當前元素,否則應返回出錯資訊。

以上即為棧的6項基本實現功能,其實棧作為一種應用非常廣泛的資料結構,在實際應用中還有許多操作。為實現上述操作,應定義乙個類stack。那麼如何儲存棧裡的元素?為此,可設定乙個陣列data[maxlen],同時,設定乙個與maxlen同型別的變數length(此處預設為int型變數,關於如何使主函式中的變數不受影響的內容,會在之後的類模板中提到(如果我會寫相關部落格的話)),該變數表示當前陣列的長度。以下為類stack的具體實現**:

#include

using

namespace

std;

#define maxlen 100 //定義陣列的長度

class

stack //初始化為空棧

bool isempty();

bool isfull();

int get_top(int& x);

int pop();

int push(int x);

int locate(int x); //該函式為本人上機時加入的函式,其作用為查詢數x在棧中的位置

private:

int data[maxlen];

int length;

}; bool

stack::isempty() //由於初始化棧時length=0,所以預設為空棧

bool

stack::isfull()

intstack::get_top(int& x)/*注意此處為取位址函式,這是因為我們無需輸出棧頂元素的值,只需得到該值的位址即可*/

intstack::pop()

intstack::push(int x)

return0;}

intstack::locate(int x)

}if(data[i] != x)

cout

<<"沒有找到該數!"

int main()

cout

<<"查詢數字1所在的位置:";

int y = 1;

s.locate(y);

cout

<<"逆序輸出棧的元素:";//棧的乙個基本應用

while(!s.isempty())

cout

}

:以上內容僅為棧的最基本運算,之後會寫一些本人在學習過程中遇到的關於棧的應用的題目,以上**為純手打,雖然先在ide裡除錯過,但由於本人水平所限,手敲過程中難免會有所紕漏,望廣大讀者批評指正,謝謝!

(好像也沒讀者。)

鍊錶的定義及其基本運算

include using namespace std typedef struct tagnodenode 該結點可看成是 存放了數值域data和指標域next的遞迴定義的指標 原來的結點宣告報錯。出錯原因為 typedef相當於為struct結構宣告了乙個新的名字,如 typedef int i...

鍊錶的定義及其基本運算

由於鍊錶的描述比較複雜,故此處僅貼出 並附上本人遇到的部分問題,以供學習參考之用。include using namespace std typedef struct tagnodenode 該結點可看成是 存放了數值域data和指標域next的遞迴定義的指標 原來的結點宣告報錯。出錯原因為 typ...

棧 順序儲存結構及其基本運算

該文章主要介紹棧的順序儲存結構以及相關運算。標頭檔案 sqstack.h template class sqstackclass 順序棧類 原始檔 sqstack.cpp include include sqstack.h using namespace std const int maxsize ...