溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

C++基礎(chǔ)學(xué)習(xí)之利用兩個棧實現(xiàn)一個隊列

發(fā)布時間:2020-10-04 08:04:54 來源:腳本之家 閱讀:117 作者:lixiaogang_theanswer 欄目:編程語言

1 .給出類類型如下:有兩個成員變量,分別是兩個stack容器,存放的元素類型是 int;stack的特點是:先進(jìn)后出;而隊列queue的特點是先進(jìn)先出;現(xiàn)在用兩個 stack容器來實現(xiàn)隊列:

實現(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:
 //入隊
 void Push(const int& val);
 //出隊
 void Pop();
 //返回隊首元素
 int& Front();
 //返回隊尾元素
 int& Back();
 //判斷隊列是否為空
 bool Empty();
 //返回隊列大小
 int Size();
};


----------------------------------------
------------- queue.cpp ----------------

#include "queue.h"

//入隊
void Queue::Push(const int& val)
{
 //棧s1作隊列的隊尾,s2作為隊列的隊頭
 s1.push(val);
 cout<<val<<" ";
}

//出隊
void Queue::Pop()
{
 while (!s1.empty())
 {
 int val = s1.top();
 s2.push(val);
 s1.pop();
 }
 s2.pop();
}

//返回隊首元素
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; 
}

//返回隊尾元素
int& Queue::Back()
{
 return s1.top();
}

//判斷隊列是否為空
bool Queue::Empty()
{
 if (s1.empty()&&s2.empty())
 {
 return true;
 }
 else
 return false;
}

//返回隊列大小
int Queue::Size()
{
 return s1.size()+s2.size();
}



--------------------------------------
--------------- test.cpp -------------
#include "queue.h"
void test()
{
 Queue q1;
 cout<<"入隊列操作:"<<endl;
 cout<<"插入的隊列元素分別是:"<<endl;
 q1.Push(1);
 q1.Push(2);
 q1.Push(3);
 q1.Push(4);
 q1.Push(5);
 q1.Push(6);
 cout<<"判斷隊列是否為空!"<<endl;
 if (q1.Empty())
 {
 cout<<"empty."<<endl;
 }
 else
 {
 cout<<"not empty."<<endl;
 }
 cout<<"獲取隊頭元素:"<<endl;
 cout<<q1.Front()<<endl;
 cout<<"獲取隊尾元素:"<<endl;
 cout<<q1.Back()<<endl;
 cout<<"獲取隊列的大小操作:"<<endl;
 cout<<q1.Size()<<endl;
 printf("出隊列操作:\n");
 q1.Pop();
}
int main()
{
 test();
 system("pause");
 return 0;
}

分析過程:

讓s1作為存儲空間,而s2作為臨時緩沖區(qū)。

進(jìn)行入隊操作時,將元素壓入s1。

進(jìn)行出隊操作時,將s1的元素逐個“倒入”(彈出并壓入)s2,將s2的頂元素彈出作為出隊元素,之后再將s2剩下的元素逐個“倒回”s1。

C++基礎(chǔ)學(xué)習(xí)之利用兩個棧實現(xiàn)一個隊列

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對億速云的支持。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI