C++之stack & queue & deque
1 stack
C++ stack(堆栈)是一个容器的改编,它实现了一个先进后出的数据结构(FILO)
使用该容器时需要包含头文件#include<stack>
定义stack对象:
stack<int>s1; stack<string>s2;stack的基本操作有:
1)入栈:s.push(x);
2)出栈:s.pop();注意:出栈操作只是删除栈顶的元素,并不返回该元素。
3)访问栈顶:s.top();
4)判断栈空:s.empty();当栈空时返回true。
5)访问栈中的元素个数:s.size();
举例:
#include<iostream> #include<stack> using namespace std; int main(void) { stack<double>s;//定义一个栈 for(int i=0;i<10;i++) s.push(i); while(!s.empty()) { printf("%lf\n",s.top()); s.pop(); } cout<<"栈内的元素的个数为:"<<s.size()<<endl; return 0; }
2 queue
与stack 模板类很相似,queue 模板类也需要两个模板参数,一个是元素类型,一个容器类
型,元素类型是必要的,容器类型是可选的,默认为deque 类型。
queue 模板类的定义在头文件#include <queue>。
定义queue 对象:
queue<int> q1; queue<double> q2;
queue 的基本操作:
1)入队:q.push(x); 将x 接到队列的末端。
2)出队:q.pop(); 弹出队列的第一个元素,注意,并不会返回被弹出元素的值。
3)访问队首元素:q.front(),即最早被压入队列的元素。
4)访问队尾元素:q.back(),即最后被压入队列的元素。
5)判断队列空:q.empty(),当队列空时,返回true。
6)访问队列中的元素个数:q.size()
举例:
#include <iostream> #include <queue> using namespace std; int main() { int e, n, m; queue<int> q1; for (int i = 0; i<10; i++) q1.push(i); if (!q1.empty()) cout << "dui lie bu kong\n"; n = q1.size(); cout << n << endl; m = q1.back(); cout << m << endl; for (int j = 0; j<n; j++) { e = q1.front(); cout << e << " "; q1.pop(); } cout << endl; if (q1.empty()) cout << "dui lie kong\n"; system("PAUSE"); return 0; }
3 deque
所谓的deque是”double ended queue”的缩写,双端队列不论在尾部或头部插入元素,都十分迅速。而在中间插入元素则会比较费时,因为必须移动中间其他的元素。双端队列是一种随机访问的数据类型,提供了在序列两端快速插入和删除操作的功能,它可以在需要的时候改变自身大小,完成了标准的C++数据结构中队列的所有功能。
头文件:#include<deque>。
基本操作:
1)deque<Type> k; ------ 定义一个deque的变量(定义时已经初始化) 例如: deque<int> k;
2)k.empty() ------ 查看是否为空范例,是的话返回1,不是返回0
3)k.clear() ------ 清除队列里的所有数据
4)k.push_front(i) ------ 从已有元素前面增加元素i(队伍大小不预设)
5)k.push_back(i) ------ 从已有元素后面增加元素i(队伍大小不预设)
6) k.pop_front() ------ 清除第一个元素
7) k.pop_back() ------ 清除最后一个元素
8)k.front() ------ 显示第一个元素 例如n = k.front();
9) k.back() ------ 显示最后一个元素
10) k.size() ------ 输出现有元素的个数
举例:
#include<stdio.h> #include<deque> using namespace std; int main(void) { int i; int a[10] = {0,1,2,3,4,5,6,7,8,9}; deque<int> q; for(i=0;i<=9;i++) { if(i%2==0) q.push_front(a[i]); else q.push_back(a[i]); } /*此时队列里的内容是: {8,6,4,2,0,1,3,5,7,9}*/ q.pop_front(); printf("%d\n", q.front()); /*清除第一个元素后输出第一个(6)*/ q.pop_back(); printf("%d\n", q.back()); /*清除最后一个元素后输出最后一个(7)*/ return 0; }