C++栈和队列

对于栈和队列,我有话说!

栈者,先进后出也。
如物存于箱再取之,必在这里插入代码片先取后存之物,然取先存之物也。
故而栈有栈底栈顶之分名。
对栈的操作有入栈出栈之分名。
在C++中,使用方式如下:

#include<stack>//引用栈头文件
#include<iostream>//由于包含输出操作,故引用该头文件
/*
在stack中有五个成员函数:
1.push()//在栈顶添加元素,需要一个参数(要添加的元素)
2.pop()//删除栈顶元素
3.top()//返回栈顶元素
4.empty()//判断该栈是否为空
5.size()//得到栈的大小,也就是存了几个元素了

以上成员函数皆用栈名加“.”运算符调用:栈名.函数名(参数表)
*/

//以下操作皆在入口函数main()中进行
std::stack<int> s;//定义一个 名叫s的 存储int型变量 的栈(尖括号中可以是任意数据类型)

for(int i=1;i<=10;i++)
{
	s.push(i);//调用push()成员函数添加元素入栈
}
while(!s.empty())//empty()的返回值类型为bool型,如果栈空就返回true,不空返回false
{//栈不为空则进入
	std::cout<<s.top()<<std::endl;//打印栈顶的元素
	s.pop();//删除栈顶的元素
}//该循环就是没了遍历该栈,显而易见,遍历结束后,栈会为空。

队列者,先进先出也。
特性如日常之排队,故得此名。
故而有队首队尾之分名。
对队列的操作有入队出队之分名。
在C++中,使用方法如下:

#include<queue>//引用队列头文件
#include<iostream>

/*
在queue中有五个成员函数:
1.push()//在队尾添加元素,需要一个参数(要添加的元素)
2.pop()//删除队首元素
3.front()//返回队首元素
4.back()//返回队尾元素
5.empty()//判断该队列是否为空
6.size()//得到队列的大小,也就是存了几个元素了

以上成员函数皆用队列名加“.”运算符调用:队列名.函数名(参数表)
*/

std::queue<int> q;//定义一个 名叫s的 存储int型变量 的队列(尖括号中可以是任意数据类型)

for(int i=1;i<=10;i++)
{
	s.push(i);//调用push()成员函数添加元素入队
}//该步操作与stack差不多
/*接下来我们有一个问题,那就是如何将队列逆序过来排列
分析:要想逆序,那就需要把队列元素全拿出去在从之前在队尾的元素先入队,然后仅次于它的一次入队
	 那么很明显,我们如果借助另一个队列的话,根据队列的特性是无法完成该操作的,
	 我们需要借助一个特性是先进去的东西后出来的结构才能完成,依据这个特性,很明显,我们有stack
*/
//在上面我们对stack遍历之后使得stack为空了,那我在这里就不新建一个了,直接使用上面的stack

//先把队列元素一次取出放进stack中
while(!q.empty())//判断队列是否为空
{
	s.push(q.front());//依据队列的先进先出,所以我们要从队首开始入栈,所以队列q调用front()函数获取队首元素
	q.pop();//在队首元素入栈后,在删除该元素使得下一个元素成为队首元素
}//在队列为空后,结束循环,队列中所有元素得以全部入栈

while(!s.empty())//判断栈是否为空
{
	q.push(s.top());//依据栈先进后出的特性,从栈顶到栈底依次入队,
	s.pop();//删除栈顶元素
}//循环结束后,栈为空,队列中元素相对于最初已经逆序

//接下来可以进行一个遍历来测试一下,我就不多赘述,遍历方法与遍历栈类似


以上就是栈和队列的基本内容,他们的各种组合调用万变不离其宗,只要好好理解两者的特性,熟悉成员函数的用法与意义,并且多用,就能熟练地写出你想要的东西。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值