队列模拟银行排队系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//C语言版本
#include
using namespace std;
typedef struct queue
{
int queuesize; //数组的大小
int head,tail; //队列的头和尾下标
int *q; //数组头指针
int number; //队里的元素个数
}Queue;
int s=1; //下一位顾客进入的序号
void InitQueue(Queue *queue)
{
queue ->queuesize = 8;
queue ->q = (int *)malloc(sizeof(int) * queue ->queuesize); //分配内存
queue ->tail = 0;
queue ->head = 0;
queue->number=0;
}
int EnQueue(Queue *queue, int key)
{
int tail = (queue ->tail+1) % queue ->queuesize;
if (queue->head==tail) //此时队列没有空间
{
printf("the queue has been filled full!\n");
return 0;
}
else
{
queue ->q[queue ->tail] = key;
queue ->tail =tail;
queue->number++;
}
return 1;
}
int DeQueue(Queue *queue)
{
queue ->head = (queue ->head+1) % queue ->queuesize;
queue->number--;
return 1;
}
int IsQueueEmpty(Queue *queue)
{
if(queue->number==0)
{
return 1;
}
else
{
return 0;
}
}
int IsQueueFull(Queue *queue)
{
if(queue->number==queue->queuesize)
{
return 1;
}
else
{
return 0;
}
}
int Return(Queue *queue)
{
return queue->q[queue->head];
}
void menu()
{
printf("a:新顾客进入\nb:顾客完成业务\nc:显示当前办理业务的顾客\nz:退出\n");
}
int main()
{
char command;
Queue *que=new Queue;
int t;
InitQueue(que);
menu();
cin>>command;
while(command!='z')
{
switch(command)
{
case 97:if(EnQueue(que,s))
printf("%d号顾客进入,当前有%d人在等候\n",s++,que->number-1);break;
case 98:if(IsQueueEmpty(que))
printf("the queue is NULL\n");
else if(que->number-1==0)
{
printf("%d号顾客完成业务,当前无顾客等待\n",que->q[que->head]);
DeQueue(que);
}
else
{
DeQueue(que);
printf("%d号顾客完成业务,请%d号顾客办理业务,当前有%d人在排队\n",que->q[que->head]-1,que->q[que->head],que->number-1);
}break;
case 99:t=Return(que);
if(IsQueueEmpty(que))
printf("当前无顾客\n");
else
printf("当前正在办理业务的是%d号顾客\n",t);break;
default:printf("错误的命令");
}
cin>>command;
}
return 0;
}
//C++版本
#include
using namespace std;
class Node
{
friend class Queue;
private:
int number;
Node *next;
public:
Node(int );
Node();
~Node();
};
class Queue
{
private:
Node *tail;
Node *head;
int number; //队列中的结点数
public:
Queue();
~Queue();
void Enter(int i); //新结点进栈
void Remove(); //结点出栈
bool IsQueueEmpty();
void ReturnFirst();
};
Node::Node()
{
next=NULL;
}
Node::Node(int i)
{
number=i;
next=NULL;
}
Nod
e::~Node()
{
}
Queue::Queue()
{
head= new Node; //分配内存;
tail=head;
number=0;
}
Queue::~Queue()
{
}
void Queue::Enter(int i)
{
Node *node=new Node(i);
tail->next=node;
tail=tail->next;
number++;
cout<}
void Queue::Remove()
{
if(IsQueueEmpty())
cout<<"当前无顾客"<
{
cout<
Node *s=head->next;
head->next=s->next;
free(s);
number--;
if(head->next==NULL)
{
cout<<"当前无顾客"<
}
else
cout<<"请"<
}
}
bool Queue::IsQueueEmpty()
{
if(head==tail)
return true;
else
return false;
}
void Queue::ReturnFirst()
{
if(IsQueueEmpty())
cout<<"当前无顾客"<
cout<
void menu()
{
printf("a:新顾客进入\nb:顾客完成业务\nc:显示当前办理业务的顾客\nz:退出\n");
}
int main()
{
char command;
Queue queue;
int i=1; //下一个进入的顾客的序号
menu();
cin>>command;
while(command!='z')
{
switch(command)
{
case 97:queue.Enter(i++);break;
case 98:queue.Remove();break;
case 99:queue.ReturnFirst();break;
default:printf("错误的命令\n");
}
cin>>command;
}
return 0;
}