栈和队列
【定义和特点】
栈:栈(stack)又名堆栈,它是限定在表的一端进行插入和删除操作的线性表(后进先出)。这一端被称为栈顶,相对地,把另一端称为栈底。不含元素的空表称为空栈。
队列:和栈相反,队列(queue)是一种先进先出的线性表。它只允许在表的前端进行删除操作,而在表的后端进行插入操作。允许插入的一端称为队尾(rear),允许删除的一端称为队头(front)。
向一个栈插入新元素又称作入栈,从一个栈删除元素又称作出栈。在队列中插入一个队列元素称为入队,从队列中删除一个队列元素称为出队。和线性表一样,栈和队列的存储结构也包括顺序和链式两种。
【栈的使用】
头文件:#include<stack>
声明一个栈:stack <数据类型> 数据名 如:stack <int> a
基本用法:
a.push(); //向栈内压入一个成员
a.pop(); //从栈顶弹出一个成员
a.empty(); //为空返回true,否则返回false
a.top(); //返回栈顶,但不删除成员
a.size(); //返回栈的大小
【队列的使用】
头文件:#include<queue>
声明一个队列:queue <数据类型> 数据名 如:queue <int> q
基本用法:
q.push(); //在队尾插入数据
q.pop(); //在队首删除数据
q.empty(); //为空返回true,否则返回false
q.front(); //返回队首元素
q.back(); //返回队尾的元素
q.size(); //返回队列的大小
【案例分析】
大数A+B
#include<iostream>
#include<string>
#include<stack>
using namespace std;
int main()
{
int t,i,num;
string a,b;
stack <int> stk;
cin>>t;
for(i=1;i<=t;i++)
{
if(i>1)
cout<<endl;
cin>>a>>b;
int l1=a.size(),l2=b.size();
int j=0;
while(l1>0||l2>0)
{
num=j;
if(l1>0)
{
num+=a[l1-1]-'0';
l1--;
}
if(l2>0)
{
num+=b[l2-1]-'0';
l2--;
}
j=num/10;
stk.push(num%10);
}
if(j)
stk.push(j);
cout<<"Case "<<i<<':'<<endl;
cout<<a<<" + "<<b<<" = ";
while(!stk.empty())
{
cout<<stk.top();
stk.pop();
}
cout<<endl;
}
return 0;
}
【传送门】
STL 之 string、 vector 、bitset 的基本用法
C++ STL 之 set 与 multiset 的基本用法