資料結構實驗課五-1

Snovvs發表於2020-12-03

利用順序儲存結構實現一個迴圈佇列,完成結構體的定義,以及入隊函式,出隊函式和主程式的編寫。其中入隊函式將鍵盤輸入的整數存入佇列的末尾;出隊函式將佇列最前面的元素列印到螢幕;入隊和出隊的人數可以由鍵盤指定。

#include<iostream>
using namespace std;

const int QueueSize = 100;
template<typename DataType>
class CirQueue
{
public:
	CirQueue();
	~CirQueue(); 
	void EnQueue();
	DataType DeQueue();
	DataType GetHead();
	int Empty();
private:
	DataType data[QueueSize];
	int front, rear;
};

template<typename DataType>
CirQueue<DataType>::CirQueue()
{
	rear = front = QueueSize -1;
}

template<typename DataType>
CirQueue<DataType>::~CirQueue(){}

template<typename DataType>
CirQueue<DataType>::Empty()
{
	if(rear == front)
	{
		printf("Null"); 
	}
}
template<typename DataType>
void CirQueue<DataType>::EnQueue()
{
	int b; 
	cout<<"請輸入要入隊的數字:"<<endl; 
	cin>>b;
	if ((rear + 1) % QueueSize == front)throw"上溢";
	rear = (rear + 1) % QueueSize;
	data[rear] = b;
}

template<typename DataType>
DataType CirQueue<DataType>::DeQueue()
{
	if (rear == front)throw"下溢";
	front = (front + 1) % QueueSize;
	cout<<"出隊的元素是:"<<endl; 
	cout<<data[front]<<endl;
}

template<typename DataType>
DataType CirQueue<DataType>::GetHead()
{
	if (rear == front)throw"下溢";
	return data[(front + 1) % QueueSize];
}

int main()
{
	int x;
	int c = 0;
	CirQueue<int> Q;
	int a;
	while(1){
	cout<<"請選擇功能:"<<endl;
	cout<<"1:入隊"<<endl;
	cout<<"2:出隊"<<endl;
	cout<<"0:退出"<<endl;
	cin>>x;
	switch (x)
	{
		case 0: return 0;break;
		case 1:Q.EnQueue();c = c+1;break;
		case 2:c = c-1;if(c == -1){cout<<"佇列為空!";return 0;}Q.DeQueue();break;
		default:cout<<"輸入錯誤,重新輸入!"<<endl; 
	}
	}
	return 0;
}

相關文章