栈和队列都是所有数据结构中最基础的结构了,其实这两者是十分类似的,但是实质性的区别就在于进出端顺序的处理。
1.关于栈:它是满足后进先出(LIFO, Last In First Out)的。
举个例子:首先把要放入栈里面的元素想象成每一个盘子,就是说每当你往桌上叠放洗好的盘子时,先放的盘子呢就会在最底下,最后放的盘子呢,就会在最上面,而重点来了,当你要使用盘子的时候呢,最后放的盘子会在最上面所以会最先被使用。
关于栈在c++编程中的相关操作:
使用标准库的栈时,头文件为:#include<stack>;
定义栈:stack<int> s (中间的int可根据数据的类型进行改变)
栈提供的操作:
s.empty() 如果栈为空返回true,否则返回false
s.size() 返回栈中元素的个数
s.pop() 删除栈顶元素但不返回其值
s.top() 返回栈顶的元素,但不删除该元素
s.push(a) 在栈顶压入新元素a
代码实例:
#include<iostream>
#include<stack>
using namespace std;
int main()
{
int n;
double item;
stack<double>numbers;
cin>>n;
for(int i=0;i<n;i++){
cin>>item;
numbers.push(item); //入栈
}
//empty()如果栈顶元素为空返回结果为true
while(!numbers.empty()){
cout<<numbers.top()<<endl; // 删除栈顶元素
numbers.pop(); //出栈
}
cout<<endl;
return 0;
}
2.关于队列: C++队列Queue是一种容器适配器,它给予程序员一种先进先出(FIFO)的数据结构。
举个例子:平时生活中,比如银行办理业务,排队进行,先到先行先完成先走。
关于队列在c++编程中的相关操作:
使用标准库的队列时,头文件为:#include<queue>;
定义栈:queue<int> q (中间的int可根据数据的类型进行改变)
队列提供的操作:
q.empty() 如果队列为空返回true,否则返回false
q.size() 返回队列中元素的个数
q.pop() 删除队列首元素但不返回其值
q.front() 返回队首元素的值,但不删除该元素
q.push(a) 在队尾压入新元素a
q.back() 返回队列尾元素的值,但不删除该元素
代码实例:
#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<<"队列不为空\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<<"队列为空\n";
return 0;
}
问题:(如何用两个队列来实现元素在栈中的出栈顺序?)