/* Note:Your choice is C IDE */
#include "stdio.h"
#define Maxsize 50
/*11.17
模拟银行排队叫号
题目要求:
(1)取号(入队):1.给排队号,前面有多少个人在等待;
(2)叫号(出队);
解题思路步骤:
(1)A去银行自动机取号(入队)办理业务;
(2)A排队(出队)叫号,等待办理业务;
(3)轮到A办理个业务(取队头元素),业务办理成功,取消已经叫的号(释放空间);
*/
//1.链队列的类型定义
typedef struct Node
{
int data; //数据域
struct Node *next; //指针域
}LinkQueueNode;
//2.链队列的基本操作初始化
void InitQueue(LinkQueue *Q)
{
Q->front=(LinkQueueNode*)malloc(sizeof(LinkQueueNode));//生成头节点
if(Q->front==NULL) return FALSE;//存储空间分配失败
Q->rear=Q->front; //队头指针和队尾指针都指向头节点
Q->front->next==null;
return TRUE;
}a
//3进队.
int EnQueue(LinkQueue *Q,int e)
{
//将数据e元素插入到队列中
LinkQueueNode *NewNode;
NewNode=(LinkQueueNode*)malloc(sizeof(LinkQueueNode));//生成头节点
if(NewNode==NULL) return FALSE;//存储空间分配失败
NewNode->data=e;//为新节点的数据域赋值
NewNode->data=NULL;
Q->rear->next= NewNode;//将新节点插入到队尾
Q->rea=NewNode;//使队尾指针指向新节点
return TRUE;
}
//3.出队
int DeQueue(LinkQueue *Q,int e)
{
//若队列不空,则删除Q的队头元素,并e返回其值
LinkQueueNode *p;
if(Q->front==Q->rear) //队列为空,删除失败
reurn FALSE;
p=Q->front->next;//从队头取出第一个节点
*e=p->data;//用e返回节点p的值
Q->front->next=p->next;//节点P出队
if(Q->rear==p)//如果队列中只有一个节点,则p出队后成为空队列
Q->rear=Q->front;
free(p); //释放存储空间
return TRUE;
}LinkQueueNode;
void BankNumber(int n)
{
int i,temp;
LinkQueue Q;
InitQueue(&Q);
for(i=0;i<Maxsize;i++)
{
printf("please input muqianpaiduihao: ");
scanf("请办理个人业务");
EnQueue(&Q);
}
}
void main()
{
int n,m,k;
printf("请输入银行排队叫号总人数m:");
printf("请输入当前自己银行排队的号数 n:");
printf("前面等待排队号的人数k="+"排队叫号总人数"+"-"+"自己银行排队的号数");
scanf("%d",%m, %n,%k);
BankNumber(n);
}