c语言银行排队管理系统链队列实现
时间: 2023-08-05 14:07:37 浏览: 52
链队列是一种基于链表的队列实现方式,可以用来实现银行排队管理系统。以下是 C 语言实现银行排队管理系统链队列的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 链队列结点定义
typedef struct Node {
int data;
struct Node* next;
} Node;
// 链队列定义
typedef struct Queue {
Node* front; // 队头指针
Node* rear; // 队尾指针
} Queue;
// 初始化链队列
void InitQueue(Queue* queue) {
Node* node = (Node*)malloc(sizeof(Node)); // 头结点
node->next = NULL;
queue->front = queue->rear = node; // 初始化队头和队尾指针
}
// 判断链队列是否为空
int IsEmpty(Queue* queue) {
return queue->front == queue->rear;
}
// 入队
void Enqueue(Queue* queue, int data) {
Node* node = (Node*)malloc(sizeof(Node)); // 新结点
node->data = data;
node->next = NULL;
queue->rear->next = node; // 将新结点插入队尾
queue->rear = node; // 更新队尾指针
}
// 出队
int Dequeue(Queue* queue) {
if (IsEmpty(queue)) {
printf("Queue is empty!\n");
return -1;
}
Node* node = queue->front->next; // 获取队头结点
int data = node->data;
queue->front->next = node->next; // 将队头结点出队
if (queue->rear == node) { // 如果队列只有一个结点,则更新队尾指针
queue->rear = queue->front;
}
free(node); // 释放出队结点的内存
return data;
}
// 获取队列长度
int GetLength(Queue* queue) {
int length = 0;
Node* node = queue->front->next;
while (node) {
length++;
node = node->next;
}
return length;
}
// 打印队列元素
void PrintQueue(Queue* queue) {
Node* node = queue->front->next;
while (node) {
printf("%d ", node->data);
node = node->next;
}
printf("\n");
}
int main() {
Queue queue;
InitQueue(&queue);
// 入队
Enqueue(&queue, 1);
Enqueue(&queue, 2);
Enqueue(&queue, 3);
// 打印队列元素
PrintQueue(&queue); // 输出:1 2 3
// 出队
int data = Dequeue(&queue); // data = 1
// 打印队列元素
PrintQueue(&queue); // 输出:2 3
// 获取队列长度
int length = GetLength(&queue); // length = 2
printf("Queue length is %d\n", length);
return 0;
}
```
在银行排队管理系统中,可以将队列中的每个元素表示为一个顾客,每当有新的顾客到来时,就将其加入队列末尾;每当柜台空闲时,就从队列头部取出一个顾客进行服务。可以通过调用 `Enqueue` 函数将新顾客加入队列末尾,通过调用 `Dequeue` 函数从队列头部取出正在排队的顾客,实现银行排队管理系统的基本功能。