stack与queue用法及它们的几层含义

        stack的默认存储空间也是deque可以使用的容器类型包括dequevectorlist,是LIFO(先入后出)栈,即只能从一端进出,并且先入后出。

stack有以下三层含义:(1)数据结构:作为一组数据的存放方式,像上述说的一样LIFO,是本文重点讲述内容;

                                     (2)代码运行方式:调用栈,表示函数或子例程像堆积木一样存放,以实现层层调用;

                                     (3)内存区间:存放数据的一种内存区域,程序运行的时候需要内存空间存放数据。一般来                                               说,系统会划分出两种不同的内存空间,一种叫栈stack,一种叫堆heap。

先讲讲stack作为数据结构的用法,包括入栈出栈访问栈顶删除元素遍历输出等基本操作,还是以程序代码的方式展现。

// stack函数的基本操作
#include<iostream>
#include<stack>
#include<list>
#include<vector>
#include<string>
using namespace std;
int main()
{
	stack<int,vector<int> > s;
	for(int i=0;i<10;i++)
	{
		s.push(i);//stack的push压栈操作 
	}
	cout<<"stack s的大小为:"<<s.size()<<endl; //size函数
	cout<<"stack s的top操作:"<<s.top()<<endl;//top操作必须保证stack非空,否则会编译错误
	while(!s.empty())//遍历输出
	{
		cout<<s.top()<<"\t";
		s.pop(); 
	}
	

	stack<string,list<float> > s1;//两个尖括号间一定要留空格
	for(int i=0;i<10;i++)
	{
		s1.push(i+0.1);//stack的push压栈操作 
	}
	cout<<"stack s1的大小为:"<<s1.size()<<endl; //size函数
	cout<<"stack s1的top操作"<<s1.top()<<endl;
	while(!s1.empty())
	{
		cout<<s1.top()<<"\t";
		s1.pop(); 
	}
	return 0;
}
运行结果如下:


      再来说说队列queue的基本操作吧,queue是一个受限制的deque,实现FIFO的功能(当然,还有个priority_queue优先队列可以实现优先级高的元素先出队的操作,其用法和queue基本相似),即只能队首删除元素,队尾插入元素。

      操作包括尾部插入(push)首部弹出(pop)取队首元素引用(front)取队尾元素引用(back)获取队列空间大小(size)判空(empty)等基本用法。

# include<iostream>//queue的基本用法
# include<list>
# include<queue>
using namespace std;
int main()
{
	queue<char,list<float> > s;
	for(int i=1;i<11;i++)
		s.push(i+0.1);//队尾插入元素
	cout<<"队列的大小为:"<<s.size()<<endl;//队列的大小
	cout<<"获取队尾元素:"<<s.back()<<endl;
	cout<<"获取队首元素:"<<s.front()<<endl;
	while(!s.empty())//队列判空 
	{
		cout<<s.front()<<"\t";
		s.pop();//队首弹出元素 
	}
	return 0;
}
运行结果如下:


队列(优先队列)和栈的运用很多,如线程、响应申请、或是涉及排队理论的场合都可以运用,是很重要的数据结构类型之一。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值