队列解决问题:
银行3台ATM机,一张卡同时在3台ATM机上取钱。必须通过队列,一台操作完才能在下一台操作。
考虑银行用户众多,用链表。
简单实现方式:
queue.h
queue.c
main.c
queue.h
#include <stdio.h>
#include <stdlib.h>
#define datatype int
typedef struct queue{
datatype data;
struct queue *pNext;
}Queue,*PQueue;
void init(PQueue *phead);//初始化
PQueue enq(PQueue phead, datatype data);//入队
PQueue deq(PQueue phead, datatype *pdata);//出队
void show(PQueue phead);//显示队列
queue.c
#include "queue.h"
void init(PQueue *pphead)//初始化
{
*pphead = NULL;
}
PQueue enq(PQueue phead, datatype data)//入队
{
PQueue pnew = malloc(sizeof(Queue));//开辟数据
pnew->data = data;
pnew->pNext = NULL;
if (phead == NULL)
{
phead = pnew;//直接插入
}
else{
PQueue ptemp = phead;
while (ptemp->pNext != NULL)
{
ptemp = ptemp->pNext;
}
ptemp->pNext = pnew; //尾部插入
}
return phead;
}
PQueue deq(PQueue phead, datatype *pdata)//出队
{
if (phead == NULL)
{
return NULL;
}
else{
*pdata = phead->data; // 获取弹出的数据
PQueue ptemp = phead;
phead = phead->pNext;//存储下一个节点
free(ptemp);
}
return phead;
}
void show(PQueue phead)//显示队列
{
if (phead == NULL)
{
return;
}
else{
printf("%5d", phead->data);
show(phead->pNext);//递归调用
}
}
main.c
#include "queue.h"
void main(){
Queue *phead;
init(&phead);
for (int i = 0; i < 10; i++)
{
phead = enq(phead, i);
printf("\nqueue");
show(phead);
}
printf("\n\n\n\n");
while (phead != NULL)
{
datatype data;
phead = deq(phead, &data);
printf("\n拉出的是%d", data);
printf("\nqueue");
show(phead);
}
system("pause");
}