银行排队队列问题则么解决
求教队列问题,希望指教下问题描述】
目前银行、医院等单位通过“叫号机”模拟了人群排队的过程,用户取票进队。叫号排队是队列应用的一个典型例子,设计一个程序,演示叫号排队系统的实现过程。
【基本要求】
匀客户到达银行时,先取号(显示当前的客户号,以及正在等待的客户人数)。当有窗口空闲时,若有等待的客户,则显示信息:请XXXX号客户到YY号窗口办理。设定窗口数量为3个,允许的最多排队等待顾客数为30,超过30则系统禁止取票。
我做不下去了,指导下我吧
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<time.h>
#define N 30///队列最大人数
#define w3///银行窗口个数
typedef猀琀爀甀挀琀 Node{
int data;
struct Node *next;
}node;
typedef struct {
node * front;
node * rear;
}queue;
void initqueue(queue *q)
{
q->front=q->rear=(node*)malloc(sizeof(node));
if(!q->front)攀砀椀琀(0);
q->front->next=NULL;
}
void destroyqueue(queue *q)
{
while(q->front){
焀->rear=q->front->next;
昀爀攀攀(q->front);
焀->front=q->rear;
}
printf("队列销毁成功\n");
}
void enterqueue(queue *q,int a)
{
node *p;
p=(node*)malloc(sizeof(node));
if(!p)攀砀椀琀(0);
p->data=a;
p->next=NULL;
q->rear->next=p;
q->rear=p;
printf("\t您的号码为%d\t",a);
}
void deletequeue(queue *q,int a)
{
node *p;
p=(node*)malloc(sizeof(node));
if(q->front=q->rear)笀 printf("队列为空\n");exit(0);}
p=q->front->next;
a=p->data;
q->front->next=p->next;
if(q->rear==p) q->rear=q->front;
free(p);
printf("%d已离开\n",a);
}
void main()
{
焀甀攀甀攀 *list;
椀渀琀渀甀洀戀攀爀=1,m;
挀栀愀爀 ch1,ch2;
氀椀猀琀=(queue*)malloc(sizeof(queue));
椀渀椀琀焀甀攀甀攀(list);
眀栀椀氀攀(1){
瀀爀椀渀琀昀("请输入“#”字符获取排队号,其他字符无效:\t");
猀挀愀渀昀("%c",&ch1);
最攀琀挀栀愀爀();
椀昀(ch1!='#')笀瀀爀椀渀琀昀("字符输入错误\n"); exit(0);}
椀昀(ch1=='#'){
攀渀琀攀爀焀甀攀甀攀(list ,number);
渀甀洀戀攀爀++;
瀀爀椀渀琀昀("\t请输入“&”获取窗口号: ");
猀挀愀渀昀("%c",&ch2);
最攀琀挀栀愀爀();
椀昀(ch2!='&')笀瀀爀椀渀琀昀("字符输入错误\n"); exit(0);}
椀昀(ch2=='&'){
srand(time(NULL));
m=rand()%3+1;
瀀爀椀渀琀昀("请到第%d个窗口办理业务:\n ",m);
紀
紀
//if ( count>N )瀀爀椀渀琀昀("\n已超过%d人等候,稍后再取号:\n",N);
紀
}