以下内容仅供个人参考,本人初学者,在技术上有诸多不足,请高手指点!
#include "stdafx.h"
#include <stdlib.h>
#define MAXSIZE_T 100//队列最大长度;
#define INCREATSIZE 10
#define OVERFLOW -1
#define OK 1
#define ERROR -2
typedef struct QNode
{
int data;
struct QNode *next;
}*QPtr;//队列中每个客户是一个节点;
typedef struct
{
QPtr front;//头指针;
QPtr rear;//尾指针;
}Squeue;//客户到达生成的队列;
int initQueue(Squeue &L)//初始化队列;
{
L.front = L.rear = (QPtr)malloc(MAXSIZE_T*sizeof(int));
if (!L.front)
exit(OVERFLOW);
L.front->next =NULL;
return OK;
}
void EnQueue(Squeue &L,int e)//进队列;
{
QPtr p;
printf("建立一个队列:\n");
scanf_s("%d", &e, sizeof(e));
while (e)
{
p = (QPtr)malloc(MAXSIZE_T + INCREATSIZE * sizeof(int));
if (!p)
exit(OVERFLOW);
p->data = e;
p->next = NULL;
L.rear->next = p;
L.rear = p;
scanf_s("%d", &e, sizeof(e));
}
}
int DeQueue(Squeue &L, int e)//出队列;
{
QPtr p;
if (L.front == L.rear)
return ERROR;
p = L.front->next;
e = p->data;
L.front->next = p->next;
if (L.rear == p)
L.rear = L.front;
free(p);
return e;
}
int _tmain(int argc, _TCHAR* argv[])
{
Squeue L;
int e=NULL,i,t;
int w1,w2,w3,w4;
char BQ[5] = {};
char BT[] = { 'A', 'B', 'C', 'D' };
//4个办理业务窗口;
initQueue(L);
EnQueue(L,e);
printf("\n窗口序号为:%c %c %c %c\n", BT[0], BT[1],BT[2],BT[3]);
printf("\n请输入窗口状态(0为没人,1为有人):\n");
scanf_s("%d %d %d %d", &w1, &w2, &w3, &w4);
BQ[0] = w1;
BQ[1] = w2;
BQ[2] = w3;
BQ[3] = w4;
printf("\n窗口状态为,%c=%d %c=%d %c=%d %c=%d \n", BT[0], w1, BT[1], w2, BT[2], w3, BT[3], w4);
for (i = 0; i < 4; i++)
{
if (BQ[i] == 0)
{
t = DeQueue(L, e);
printf("\n请%d号到%c窗口办理业务;\n", t, BT[i]);
}
else
{
printf("\n窗口有人,请稍等;\n");
}
}
return 0;
}