[D-OJ练习] 队列的链式存储结构与操作
请定义一个链式队列,可以对队列进行“入队”、“出队”、“清空队列”、“获取队首元素”等操作。键盘输入一些命令,可以执行上述操作。本题中,队列的元素为字符。
输入描述
输入各个命令,它们对应的格式如下: 入队:E a,a代表入队的元素,这里E和元素之间用空格分隔。 清空队列:C 获取队头元素:G 队头元素出队列:D 当输入的命令为Q时,程序结束。
输出描述
当输入的命令为D时,输出出队的元素值; 当输入的命令是G时,输出当前队首元素值; 如果没有元素可出队或可取,请输出None; 输出的元素各占一行。
输入样例
E a G C E b E c D D D Q
输出样例
a b c None
#include <iostream>
using namespace std;
struct Node {
char ch;
Node* next;
Node(char c):ch(c), next(NULL){}
};
class Queue {
private:
int length;
Node* phead;
Node* ptail;
public:
Queue();
void Push(char newCh);
void GetFirst();
char Pop();
void Clear();
};
Queue::Queue() {
length = 0;
phead = new Node(' ');
ptail = phead;
}
void Queue::Push(char newCh) {
Node* p = new Node(newCh);
ptail->next = p;
ptail = p;
length++;
}
void Queue::GetFirst(){
if(length==0){
cout << "None" << endl;
return ;
}
cout << phead->next->ch << endl;
}
char Queue::Pop(){
if(length==0){
return ' ';
}
Node* p = phead->next;
char c = p->ch;
phead->next = p->next;
delete p;
length--;
return c;
}
void Queue::Clear(){
Node* headNext = NULL;
Node* p = phead->next;
while(p){
headNext = p->next;
delete p;
p = headNext;
}
phead->next = NULL;
ptail = phead;
length = 0;
}
int main()
{
Queue q;
char choice;
char addCh,ch;
int isContinue = 1;
while (isContinue)
{
cin >> choice;
switch (choice)
{
case 'E':
cin >> addCh;
q.Push(addCh);
break;
case 'G':
q.GetFirst();
break;
case 'D':
ch = q.Pop();
if(ch == ' '){
cout << "None" << endl;
}else{
cout << ch << endl;
}
break;
case 'C':
q.Clear();
break;
case 'Q':
isContinue = 0;
break;
}
}
return 0;
}
本文来自博客园,作者:泥烟,CSDN同名, 转载请注明原文链接:https://www.cnblogs.com/Knight02/p/15799098.html