栈与队列的基础知识点

<栈> 栈(stack)又名堆栈,它是一种特殊的线性表。元素之间成线性结构。在c++中其头文件为<stack>

特性:运算受限制,只允许在栈顶进行插入删除操作,插入叫做进栈,入栈或者压栈(push),删除叫做出栈(pop),由于有这种特性,所以著名特点是后进先出。

定义:stack<type>s

现在展示一道题进行讲解吧,话不多说请看题,杭电acm题


根据题目要求,我们很清楚的知道,这就是一个关于栈的应用,当一辆辆列车进去之后,只能当后面的列车出来了,最前面的车才可以出来。正好符合栈的特性,因此,我们可以定义一个栈来模拟这个过程

完整代码如下:

#include<stdlib.h>
#include<iostream>
#include<stack>
using namespace std;
int main()
{
	char in[100]; char out[100]; int flag[200];
	int n;
	while (cin >> n) {
		int i, j; i = j = 0;
		cin >> in;
		cin >> out;
		stack<char>s;//定义为字符型的栈结构
		for ( i = 0; i <=n;)
		{
			if (s.empty())//判断栈为空,push第一个元素
			{
				s.push(in[i]);
				flag[i + j] = 0;
				i++;
			}
			if (!s.empty()&&s.top()!=out[j])//当栈不空且栈顶不为当前出栈的元素时继续输入
			{
				s.push(in[i]);
				flag[i + j] = 0;
				i++;
			}
			if (!s.empty()&&s.top() == out[j])//栈不空且和当前出栈元素相等时进行pop
			{
				s.pop();
				flag[i + j] = 1;
				j++;
			}
		}
		if (s.empty())
		{
			cout << "Yes." << endl;
			for (i = 0; i < 2*n; i++)
			{
				if (flag[i] ==0)//利用flag来进行判断时输入还是输出
					cout << "in"<<endl;
				else cout << "out" << endl;
			}
			cout << "FINSH" << endl;
		}
		else//当不满足上面的条件时输出NO
			cout << "NO." << endl<<"FINSH"<<endl;
	}
}

接下来说一下队列

<队列> 队列(queue)是一种特殊的线性表。在c++中头文件为<queue>

特性:它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。著名特点和栈相反,是先进先出。

定义:queue<int>q,queue<string>q,queue<node>q,

操作:插入q.push(),删除q.pop(),注意,q.pop()并不会返回元素值,而要用q.front()返回队头元素,用q.back()返回队尾元素

 

详细用法:
查看是否为空范例        M.empty()    是的话返回1,不是返回0;
从已有元素后面增加元素   M.push()
输出现有元素的个数      M.size()
显示第一个元素          M.front()
显示最后一个元素        M.back()
清除第一个元素          M.pop()
*/
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
queue <int> myQ;

cout<< "现在 queue 是否 empty? "<< myQ.empty() << endl; 

for(int i =0; i<10 ; i++)
{
myQ.push(i);
}
for(int i=0; i<myQ.size(); i++)
{
printf("myQ.size():%d\n",myQ.size());
cout << myQ.front()<<endl;
myQ.pop();
}

system("PAUSE"); 

return 0;
}

输出结果:
现在 queue 是否 empty? 1
myQ.size():10
0
myQ.size():9
1
myQ.size():8
2
myQ.size():7
3
myQ.size():6
4
请按任意键继续. . .




  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值