基本定義:
棧(stack)是n個元素a1,a2,…an,組成的有限序列,記作s =(a1,a2,…,an),並且只能在一端插入和刪除元素,n=0時稱為空棧。
棧的特徵:
由於棧只能從一端插入和刪除元素,故棧具有後進先出(last in,first out,lifo)的特性。稱插入和刪除的一端為棧頂(top),另一端為棧底(bottom)。稱插入元素為入棧或壓棧(push),刪除元素為出棧或彈棧(pop)。
棧的基本運算定義:
1.初始化棧:設定棧為空棧。以上即為棧的6項基本實現功能,其實棧作為一種應用非常廣泛的資料結構,在實際應用中還有許多操作。為實現上述操作,應定義乙個類stack。那麼如何儲存棧裡的元素?為此,可設定乙個陣列data[maxlen],同時,設定乙個與maxlen同型別的變數length(此處預設為int型變數,關於如何使主函式中的變數不受影響的內容,會在之後的類模板中提到(如果我會寫相關部落格的話)),該變數表示當前陣列的長度。以下為類stack的具體實現**:2.判斷棧是否為空棧:若棧為空,則返回true,否則返回false。因此應為布林型別。
3.判斷棧是否滿棧:若棧已滿,則返回true,否則返回false。亦為布林型別。
4.取棧頂元素:若棧不空,則將棧頂元素的值送入變數x中,否則應返回出錯資訊。為此,該函式引數列表中應定義變數x。
5.入棧:將值為x的元素送入到棧頂,若棧已滿,返回出錯資訊。
6.出棧:若棧不空,則刪除當前元素,否則應返回出錯資訊。
#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 ...