[D-OJ练习] 队列的顺序存储结构与操作

请定义一个顺序队列,可以对队列进行“入队”、“出队”、“清空队列”、“获取队首元素”等操作。键盘输入一些命令,可以执行上述操作。本题中,队列的元素为字母, 队列的最大元素个数为100。

输入描述

 

输入各个命令,它们对应的格式如下:
入队:E a,a代表入队的元素,这里E和元素之间用空格分隔。
清空队列:C
获取队头元素:当输入的命令为D时,输出出队的元素值;
当输入的命令是G时,输出当前队首元素值;
如果没有元素可出队或可取,

输出描述

 

当输入的命令为D时,输出出队的元素值;
当输入的命令是G时,输出当前队首元素值;
如果没有元素可出队或可取,请输出None;

输入样例

E a
G
C
E b
D
D
Q

输出样例

a
b
None

#include<iostream>
using namespace std;
const int MAX = 100;
class Queue{
	private:
		char ch[MAX];
		int head;
		int tail;
	public:
		Queue();
		void Push(char c);
		char GetFirst();
		void Pop();
		void Clear();
};
Queue::Queue(){
	head = 0;
	tail = 0;
}

void Queue::Push(char c){
	if((tail+1)%MAX == head){//队满 
		return ;
	}
	tail = (tail+1)%MAX; 
	ch[tail] = c;
}

char Queue::GetFirst(){
	if(head == tail){//队空 
		return ' '; 
	}
	return ch[(head+1) % MAX]; 
} 

void Queue::Pop(){
	if(head == tail){//队空 
		cout << "None";
		return ; 
	}
	head = (head+1) % MAX;
	cout << ch[head];
}

void Queue::Clear(){
	head = 0;
	tail = 0;
}
int main()
{
	Queue q;
	char choice;
	char newCh,ch;
	while((cin >> choice) && choice != 'Q')
	{
		switch(choice)
		{
		case 'E':
			cin >> newCh;
			q.Push(newCh);
			break;
		case 'G':
			ch = q.GetFirst();
			if(ch==' '){
				cout << "None";
			}else{
				cout << ch;
			}
			break;
		case 'D':
			q.Pop();
			break;
		case 'C':
			q.Clear();
			break;
		
		}
	}
	return 0;
}

posted @ 2021-09-24 17:42  泥烟  阅读(47)  评论(0编辑  收藏  举报