日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据结构--栈(附上STL栈)

發(fā)布時(shí)間:2023/12/15 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构--栈(附上STL栈) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

定義:
棧是一種只能在某一端插入和刪除數(shù)據(jù)的特殊線性表。他按照先進(jìn)先出的原則存儲(chǔ)數(shù)據(jù),先進(jìn)的數(shù)據(jù)被壓入棧底,最后進(jìn)入的數(shù)據(jù)在棧頂,需要讀數(shù)據(jù)的時(shí)候從棧頂開始彈出數(shù)據(jù)(最后被壓入棧的,最先彈出)。因此棧也稱先進(jìn)后出表。
允許進(jìn)行插入刪除操作的一端稱為棧頂,另一端稱為棧底。棧底固定,棧頂浮動(dòng)。插入元素稱為進(jìn)棧,刪除一個(gè)元素稱為進(jìn)棧,棧內(nèi)元素為零稱為空棧。

我們今天講一下STL(標(biāo)準(zhǔn)模板庫)的棧,和自己實(shí)現(xiàn)的棧(順序棧,鏈?zhǔn)綏?#xff09;

先說STL的棧 stack

stack成員函數(shù):
bool empty ( ) ————>棧為空返回true,否則返回false;
void pop ( ) ————>刪除棧頂元素,出棧;
void push(const TYPE&value)————> 插入新元素value,放置在棧頂進(jìn)棧;TYPE:類型int,char…;
size_type size ( ) ————> 返回堆棧中元素個(gè)數(shù);(注意注意!!!!切不可賦值給int ,很容易超過int的范圍
TYPE&top()————> 查看當(dāng)前棧頂元素;
注:TYPE取決于聲明的類型

stack聲明:

stack<TYPE>demo;

格式stack<類型(int double char....)> 名字

stack函數(shù)調(diào)用:

stack<type> demo;//type可以是int可以是double也可以自定義數(shù)據(jù)類型 demo.push(val); //返回值void demo.empty();//返回值為bool代表是否為空 demo.size();//返回棧內(nèi)元素?cái)?shù)量 demo.pop();//棧頂出棧 demo.top();//取出棧頂元素

自己寫的順序棧

一般都是類內(nèi)聲明了,類外定義,但是為了給大家直觀的感受,我就寫里面了,其次getTop的函數(shù)本來應(yīng)該是返回top值但是鑒于每次去之前都需要判斷是不是為空,就改成了我代碼里的樣子;

#include <iostream> #define MaxSize 5000 using namespace std; template <typename T> class Stack {T data[MaxSize];int top; public:void InitStack( ){top = -1;}bool StackEmpty( ){if( top==-1)return true;elsereturn false;}bool Push(T e){if(top==MaxSize-1)return false;data[++top]=e;return true;}bool Pop( ){if( top==-1)return false;return true;}bool GetTop(T &x){if( top==-1) return false;x = data[ top];return true;}bool Clear( ){top = -1;} }; int main() {} #include <iostream> using namespace std; template<class T>class Stack { private:struct Node{T data;Node *next;};Node *head;Node *p;int length;public:Stack(){head = NULL;length = 0;}void push(T n)//入棧{Node *q = new Node;q->data = n;if (head == NULL){q->next = head;head = q;p = q;}else{q->next = p;p = q;}length++;}T pop()//出棧并且將出棧的元素返回{if (length <= 0){abort();}Node *q;int data;q = p;data = p->data;p = p->next;delete(q);length--;return data;}int size()//返回元素個(gè)數(shù){return length;}T top()//返回棧頂元素{return p->data;}bool isEmpty()//判斷棧是不是空的{if (length == 0){return true;}else{return false;}}void clear()//清空棧中的所有元素{while (length > 0){pop();}} }; int main() {Stack<char> s;s.push('a');s.push('b');s.push('c');while (!s.isEmpty()){cout << s.pop() << endl;}system("pause");return 0; }

?

總結(jié)

以上是生活随笔為你收集整理的数据结构--栈(附上STL栈)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。