数据结构--栈(附上STL栈)
定義:
棧是一種只能在某一端插入和刪除數據的特殊線性表。他按照先進先出的原則存儲數據,先進的數據被壓入棧底,最后進入的數據在棧頂,需要讀數據的時候從棧頂開始彈出數據(最后被壓入棧的,最先彈出)。因此棧也稱先進后出表。
允許進行插入刪除操作的一端稱為棧頂,另一端稱為棧底。棧底固定,棧頂浮動。插入元素稱為進棧,刪除一個元素稱為進棧,棧內元素為零稱為空棧。
我們今天講一下STL(標準模板庫)的棧,和自己實現的棧(順序棧,鏈式棧)
先說STL的棧 stack
stack成員函數:
bool empty ( ) ————>棧為空返回true,否則返回false;
void pop ( ) ————>刪除棧頂元素,出棧;
void push(const TYPE&value)————> 插入新元素value,放置在棧頂進棧;TYPE:類型int,char…;
size_type size ( ) ————> 返回堆棧中元素個數;(注意注意!!!!切不可賦值給int ,很容易超過int的范圍
TYPE&top()————> 查看當前棧頂元素;
注:TYPE取決于聲明的類型
stack聲明:
stack<TYPE>demo;
格式stack<類型(int double char....)> 名字
stack函數調用:
stack<type> demo;//type可以是int可以是double也可以自定義數據類型 demo.push(val); //返回值void demo.empty();//返回值為bool代表是否為空 demo.size();//返回棧內元素數量 demo.pop();//棧頂出棧 demo.top();//取出棧頂元素自己寫的順序棧
一般都是類內聲明了,類外定義,但是為了給大家直觀的感受,我就寫里面了,其次getTop的函數本來應該是返回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()//返回元素個數{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; }?
總結
以上是生活随笔為你收集整理的数据结构--栈(附上STL栈)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电磁炉电源灯一直闪烁是什么原因
- 下一篇: vr拍摄用什么相机