[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;
}
本文来自博客园,作者:泥烟,CSDN同名, 转载请注明原文链接:https://www.cnblogs.com/Knight02/p/15799097.html