亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C++基礎學習之利用兩個棧實現一個隊列

 更新時間:2019年05月19日 14:42:27   作者:lixiaogang_theanswer  
這篇文章主要給大家介紹了關于C++基礎學習之利用兩個棧實現一個隊列的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用C++具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧

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

實現代碼:

-------------------------------------
------------- 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ū)。

進行入隊操作時,將元素壓入s1。

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

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。

相關文章

  • c語言中字符串分割函數及實現方法

    c語言中字符串分割函數及實現方法

    下面小編就為大家?guī)硪黄猚語言中字符串分割函數及實現方法。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-05-05
  • Visual Studio C++指針靠前靠后的問題全面解析

    Visual Studio C++指針靠前靠后的問題全面解析

    這篇文章主要介紹了Visual Studio C++指針靠前靠后的問題全面解析,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • EasyC++內部鏈接性和無鏈接性

    EasyC++內部鏈接性和無鏈接性

    這篇文章主要介紹了EasyC++內部鏈接性和無鏈接性,當我們使用static關鍵字,將變量的作用于限制在整個文件時,該變量的鏈接性為內部鏈接性,然而無鏈接性的變量其實就是在代碼塊當中使用static關鍵字創(chuàng)建的,接下來一起進入文章了解更多內容吧
    2021-12-12
  • Matlab實現統(tǒng)計集合中各元素出現次數的示例代碼

    Matlab實現統(tǒng)計集合中各元素出現次數的示例代碼

    統(tǒng)計數組中各個元素數量是一個很常用的功能,本文主要為大家介紹了如何利用Matlab優(yōu)雅的統(tǒng)計集合中各元素出現的次數,感興趣的可以了解一下
    2022-05-05
  • C++ 中回調函數詳解及簡單實例

    C++ 中回調函數詳解及簡單實例

    這篇文章主要介紹了C++ 中回調函數詳解及簡單實例的相關資料,需要的朋友可以參考下
    2017-06-06
  • C++ OpenCV學習之圖像像素值統(tǒng)計

    C++ OpenCV學習之圖像像素值統(tǒng)計

    在圖像分析的時候,我們經常需要對單通道圖像的像素進行統(tǒng)計。本文將主要介紹利用C++ OpenCV實現的圖像像素值統(tǒng)計的幾種方法,需要的可以參考一下
    2022-01-01
  • c++雙向鏈表操作示例(創(chuàng)建雙向鏈、雙向鏈表中查找數據、插入數據等)

    c++雙向鏈表操作示例(創(chuàng)建雙向鏈、雙向鏈表中查找數據、插入數據等)

    這篇文章主要介紹了c++雙向鏈表操作示例,包括創(chuàng)建雙向鏈、刪除雙向鏈表、雙向鏈表中查找數據、插入數據等,需要的朋友可以參考下
    2014-05-05
  • C語言用數組實現反彈球消磚塊

    C語言用數組實現反彈球消磚塊

    這篇文章主要為大家詳細介紹了C語言用數組實現反彈球消磚塊,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • 深入了解C語言的動態(tài)內存管理

    深入了解C語言的動態(tài)內存管理

    所謂動態(tài)和靜態(tài)就是指內存的分配方式。動態(tài)內存是指在堆上分配的內存,而靜態(tài)內存是指在棧上分配的內存,本文將用5600字帶你深入了解動態(tài)內存管理,感興趣的可以學習一下
    2022-07-07
  • 如何利用tinyxml操縱xml及注意問題

    如何利用tinyxml操縱xml及注意問題

    這篇博客,我們詳細講述如何利用tinyxml操縱xml。以及在操作的過程中,我們應該注意的問題
    2013-01-01

最新評論