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