真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

堆棧模擬隊列(封裝版).C++-創(chuàng)新互聯(lián)

設已知有兩個堆棧S1和S2,請用這兩個堆棧模擬出一個隊列Q。

成都創(chuàng)新互聯(lián)專注于企業(yè)成都全網(wǎng)營銷推廣、網(wǎng)站重做改版、江陰網(wǎng)站定制設計、自適應品牌網(wǎng)站建設、H5場景定制、成都做商城網(wǎng)站、集團公司官網(wǎng)建設、成都外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應式網(wǎng)頁設計等建站業(yè)務,價格優(yōu)惠性價比高,為江陰等各大城市提供網(wǎng)站開發(fā)制作服務。

所謂用堆棧模擬隊列,實際上就是通過調(diào)用堆棧的下列操作函數(shù):

  • int IsFull(Stack S):判斷堆棧S是否已滿,返回1或0;
  • int IsEmpty (Stack S ):判斷堆棧S是否為空,返回1或0;
  • void Push(Stack S, ElementType item ):將元素item壓入堆棧S;
  • ElementType Pop(Stack S ):刪除并返回S的棧頂元素。

實現(xiàn)隊列的操作,即入隊void AddQ(ElementType item)和出隊ElementType DeleteQ()。

輸入說明

輸入首先給出兩個正整數(shù)N1和N2,表示堆棧S1和S2的大容量。隨后給出一系列的隊列操作:A item表示將item入列(這里假設item為整型數(shù)字);D表示出隊操作;T表示輸入結束。

輸出說明

對輸入中的每個D操作,輸出相應出隊的數(shù)字,或者錯誤信息ERROR:Empty。如果入隊操作無法執(zhí)行,也需要輸出ERROR:Full。每個輸出占1行。

示例輸入

3 2
A 1 A 2 A 3 A 4 A 5 D A 6 D A 7 D A 8 D D D D T

示例輸出

ERROR:Full
1
ERROR:Full
2
3
4
7
8
ERROR:Empty

類MyStack:

MyStack.h

#pragma once
class MyStack
{
public:
	MyStack(int N);//構造函數(shù);
	~MyStack();//析構函數(shù);
public://主要是函數(shù)成員與數(shù)據(jù)成員
	bool IsFull();//是可以在聲明文件中實現(xiàn),通常在實現(xiàn)文件實現(xiàn)
	bool IsEmpty();
	void Push(int item);
	int pop();
private:
	const int m_N;
	int       m_top;
	int   *   m_data;
};

MyStack.cpp

#include "MyStack.h"
#include "iostream"
using namespace std;

MyStack::MyStack(int N)
	:m_N(N)//初始化;
{
	//cout<< "調(diào)用MyStack的構造函數(shù)"<< endl;
	m_top = m_N;
	m_data = new int[m_N];
}
MyStack::~MyStack(void)//析構函數(shù),不能重載;
{
	//cout<< "調(diào)用MyStack的析構函數(shù)"<< endl;
	delete[] m_data;
}
bool MyStack::IsFull()
{
	return m_top == 0;
}
bool MyStack::IsEmpty()
{
	return m_top == m_N;
}
void MyStack::Push(int item)
{
	m_data[--m_top] = item;//壓入堆棧
}
int MyStack::pop()
{
	return m_data[m_top++];//挪出堆棧
}

類 MyQueue:

MyQueue.h

#pragma once
#include"MyStack.h"
class MyQueue
{
public:
	MyQueue(int sizeOut,int sizeIn);
	~MyQueue(void);
public:
	bool IsEmpty();
	bool IsFull();
	void push(int data);
	int  pop();
private:
	MyStack m_out;
	MyStack m_in;
};

MyQueue.cpp

#include "MyQueue.h"
#include"iostream"
using namespace std;
MyQueue::MyQueue(int sizeOut, int sizeIn)
	:m_out(sizeOut),m_in(sizeIn)
{

}
MyQueue::~MyQueue(void)
{

}
bool MyQueue::IsEmpty()
{
	return m_out.IsEmpty() && m_in.IsEmpty();
}
bool MyQueue::IsFull()
{
	return m_in.IsFull() && !m_out.IsEmpty();
}
void MyQueue::push(int data)
{
	if (!m_in.IsFull())
	{
		m_in.Push(data);
	}
	else
	{
		if (m_out.IsEmpty())//前提為空
		{
			while (!m_in.IsEmpty())//入棧非空時循環(huán)進行
			{
				if (!m_out.IsFull())//出棧是否為滿
				{
					m_out.Push(m_in.pop());//沒滿進行入棧導出到出棧
				}
				else
				{
					cout<< "ERROR:Full"<< endl;//提示已滿
					break;
				}
			}
			m_in.Push(data);
		}
	}
}
int MyQueue::pop()
{
	if (!m_out.IsEmpty())//如果出棧不為空
	{
		return m_out.pop();//直接返回
	}
	else
	{
		while (!m_in.IsEmpty())//入棧不為空,將入棧導入出棧
		{
			m_out.Push(m_in.pop());
		}
		return m_out.pop();//返回出棧的值
	}
}

main函數(shù):

#include"iostream"
#include"MyStack.h"http://引用封裝的頭文件
#include"MyQueue.h"
using namespace std;

int main()
{
	int sizeOut;
	int sizeIn;
	cout<< "請輸入輸出棧的大小"<< endl;
	cin >>sizeOut;
	cout<< "請輸入輸入棧的大小"<< endl;
	cin >>sizeIn;//輸入結束的換行符會影響后續(xù)的輸入,導致getline讀入為空
	cin.ignore();//忽略掉換行符,以后面讀入
	if (sizeOut<= sizeIn)
	{
		cout<< "輸出棧的大小一定要大于輸入棧的大小,程序終止"<< endl;
		return 0;
	}
	MyQueue myQueue(sizeOut, sizeIn);
	char buf[200];
	cout<< "請輸入你要執(zhí)行的操作比如A 1 A 2 A 3 A 4 A 5 D A 6 D A 7 D A 8 D D D D T,其中A是入列,D是出列,T是結束"<< endl;
	cin.getline(buf,200);//讀入buf
	char* pbuf = buf;
	while (*pbuf != 'T')
	{
		if (*pbuf == 'A')
		{
			pbuf++;
			while (*pbuf< '0' || *pbuf >'9')//整數(shù)域
			{
				if (*pbuf == 'T')
				{
					return 0;
				}
				pbuf++;
			}
			if (!myQueue.IsFull())//判斷是否已滿
			{
				myQueue.push(*pbuf - '0');//沒滿則壓入元素
			}
			else
			{
				cout<< "ERROR:Full"<< endl;//已滿提示
			}
			pbuf++;
		}
		else if (*pbuf == 'D')
		{
			if (!myQueue.IsEmpty())//判斷是否為空
			{
				cout<< myQueue.pop()<< endl;//非空進行輸出
			}
			else
			{
				cout<< "ERROR:Empty"<< endl;//已空提示
			}
			pbuf++;
		}
		else
		{
			pbuf++;
		}
	}
	return 0;
}

使用編譯器vs.2022

你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧


當前文章:堆棧模擬隊列(封裝版).C++-創(chuàng)新互聯(lián)
當前URL:http://weahome.cn/article/dochei.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部