1. 程式人生 > >stack與queue用法及它們的幾層含義

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;
}
執行結果如下:


佇列(優先佇列)和棧的運用很多,如執行緒、響應申請、或是涉及排隊理論的場合都可以運用,是很重要的資料結構型別之一。