数据结构--栈(附上STL栈)
定義:
棧是一種只能在某一端插入和刪除數(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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电磁炉电源灯一直闪烁是什么原因
- 下一篇: String(字符串) 比较大小 如果有