C++基礎(chǔ)學(xué)習(xí)之利用兩個(gè)棧實(shí)現(xiàn)一個(gè)隊(duì)列
1 .給出類(lèi)類(lèi)型如下:有兩個(gè)成員變量,分別是兩個(gè)stack容器,存放的元素類(lèi)型是 int;stack的特點(diǎn)是:先進(jìn)后出;而隊(duì)列queue的特點(diǎn)是先進(jìn)先出;現(xiàn)在用兩個(gè) stack容器來(lái)實(shí)現(xiàn)隊(duì)列:
實(shí)現(xiàn)代碼:
-------------------------------------
------------- queue.h ---------------
#pragma once
#include <iostream>
#include <stdlib.h>
#include <stack>
using namespace std;
class Queue
{
private:
stack<int> s1;
stack<int> s2;
public:
//入隊(duì)
void Push(const int& val);
//出隊(duì)
void Pop();
//返回隊(duì)首元素
int& Front();
//返回隊(duì)尾元素
int& Back();
//判斷隊(duì)列是否為空
bool Empty();
//返回隊(duì)列大小
int Size();
};
----------------------------------------
------------- queue.cpp ----------------
#include "queue.h"
//入隊(duì)
void Queue::Push(const int& val)
{
//棧s1作隊(duì)列的隊(duì)尾,s2作為隊(duì)列的隊(duì)頭
s1.push(val);
cout<<val<<" ";
}
//出隊(duì)
void Queue::Pop()
{
while (!s1.empty())
{
int val = s1.top();
s2.push(val);
s1.pop();
}
s2.pop();
}
//返回隊(duì)首元素
int& Queue::Front()
{
while (!s1.empty())
{
s2.push(s1.top());
s1.pop();
}
int temp = s2.top();
while (!s2.empty())
{
int var = s2.top();
s1.push(var);
s2.pop();
}
return temp;
}
//返回隊(duì)尾元素
int& Queue::Back()
{
return s1.top();
}
//判斷隊(duì)列是否為空
bool Queue::Empty()
{
if (s1.empty()&&s2.empty())
{
return true;
}
else
return false;
}
//返回隊(duì)列大小
int Queue::Size()
{
return s1.size()+s2.size();
}
--------------------------------------
--------------- test.cpp -------------
#include "queue.h"
void test()
{
Queue q1;
cout<<"入隊(duì)列操作:"<<endl;
cout<<"插入的隊(duì)列元素分別是:"<<endl;
q1.Push(1);
q1.Push(2);
q1.Push(3);
q1.Push(4);
q1.Push(5);
q1.Push(6);
cout<<"判斷隊(duì)列是否為空!"<<endl;
if (q1.Empty())
{
cout<<"empty."<<endl;
}
else
{
cout<<"not empty."<<endl;
}
cout<<"獲取隊(duì)頭元素:"<<endl;
cout<<q1.Front()<<endl;
cout<<"獲取隊(duì)尾元素:"<<endl;
cout<<q1.Back()<<endl;
cout<<"獲取隊(duì)列的大小操作:"<<endl;
cout<<q1.Size()<<endl;
printf("出隊(duì)列操作:\n");
q1.Pop();
}
int main()
{
test();
system("pause");
return 0;
}
分析過(guò)程:
讓s1作為存儲(chǔ)空間,而s2作為臨時(shí)緩沖區(qū)。
進(jìn)行入隊(duì)操作時(shí),將元素壓入s1。
進(jìn)行出隊(duì)操作時(shí),將s1的元素逐個(gè)“倒入”(彈出并壓入)s2,將s2的頂元素彈出作為出隊(duì)元素,之后再將s2剩下的元素逐個(gè)“倒回”s1。

總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。
- C++線性表深度解析之動(dòng)態(tài)數(shù)組與單鏈表和棧及隊(duì)列的實(shí)現(xiàn)
- C++?棧和隊(duì)列的實(shí)現(xiàn)超詳細(xì)解析
- C++用兩個(gè)棧實(shí)現(xiàn)一個(gè)隊(duì)列(面試官的小結(jié))
- C++利用兩個(gè)棧實(shí)現(xiàn)隊(duì)列的方法
- C++ 數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)兩個(gè)棧實(shí)現(xiàn)一個(gè)隊(duì)列
- C++中實(shí)現(xiàn)隊(duì)列類(lèi)鏈?zhǔn)酱鎯?chǔ)與棧類(lèi)鏈?zhǔn)酱鎯?chǔ)的代碼示例
- C++數(shù)據(jù)結(jié)構(gòu)深入探究棧與隊(duì)列
相關(guān)文章
C基礎(chǔ) mariadb處理的簡(jiǎn)單實(shí)例
下面小編就為大家?guī)?lái)一篇C基礎(chǔ) mariadb處理的簡(jiǎn)單實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-06-06
淺談C++中的構(gòu)造函數(shù)分類(lèi)及調(diào)用規(guī)則
這篇文章主要介紹了C++中的構(gòu)造函數(shù)分類(lèi)及調(diào)用規(guī)則,文中根據(jù)參數(shù)寫(xiě)出了幾種不同類(lèi)型的構(gòu)造函數(shù)并解釋了如何調(diào)用,需要的朋友可以參考下2016-03-03
VC實(shí)現(xiàn)給窗體的一個(gè)按鈕添加事件的方法
這篇文章主要介紹了VC實(shí)現(xiàn)給窗體的一個(gè)按鈕添加事件的方法,通過(guò)三個(gè)簡(jiǎn)單步驟實(shí)現(xiàn)窗體按鈕添加事件,需要的朋友可以參考下2015-05-05

