患者到医院看病的顺序是:先排队等候,再看病治疗。要求设计一个算法,模拟病人等候就诊的过程。
其中:“病人到达"用命令“A”(或“a”)表示,“护士让下一位就诊”用“N”(或“n”)表示,“不再接收病人排队”用“S”(或“s”)表示。
#include <iostream>
#include <string.h>
#include <assert.h>
using namespace std;
class Queue {
public:
Queue(int n);
bool EnQueue(string x);
bool DeQueue(string& x);
bool IsEmpty();
bool IsFull();
string getTop();
void Print();
private:
string* elements;
int front, rear;
int maxsize;
};
int main() {
Queue q(1000);
char temp;
while (cin >> temp) {
if (temp == 'a' || temp == 'A') {
string n;
cin >> n;
q.EnQueue(n);
}
else if (temp == 'n' || temp == 'N') {
string n;
n=q.getTop();
if (n == "no")
cout << "无病人就诊" << endl;
else
cout << "病历号为" << n << "的病人就诊" << endl;
q.DeQueue(n);
}
else if (temp == 's' || temp == 'S') {
cout << "今天不再接收病人排队,下列排队的病人依次就诊:" ;
q.Print();
}
else {
cout << "输入命令不合法!" << endl;
}
}
}
Queue::Queue(int n)
{
maxsize = n;
elements = new string[maxsize];
front = rear = 0;
}
bool Queue::EnQueue(string x)
{
if(IsFull())
return false;
elements[rear] = x;
rear++;
return true;
}
bool Queue::DeQueue(string& x)
{
if (IsEmpty()) {
return false;
}
x = elements[front];
front++;
return true;
}
bool Queue::IsEmpty()
{
return rear == front? true : false;
}
bool Queue::IsFull()
{
return rear==maxsize-1?true:false;
}
string Queue::getTop()
{
if (rear == front)
return "no";
else
return elements[front];
}
void Queue::Print()
{
for (int i = front-1; i <= rear-1; i++) {
cout << elements[i] << " ";
}
cout << elements[rear] ;
}