stack與queue用法及它們的幾層含義
阿新 • • 發佈:2019-01-04
stack的預設儲存空間也是deque,可以使用的容器型別包括deque、vector、list,是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; }
佇列(優先佇列)和棧的運用很多,如執行緒、響應申請、或是涉及排隊理論的場合都可以運用,是很重要的資料結構型別之一。