银行叫号系统数据结构c语言
时间: 2024-01-14 10:03:21 浏览: 181
银行叫号系统可以使用两种数据结构来实现:有序链表和队列。
1. 有序链表:有序链表是一种按照特定顺序排列元素的链表。在银行叫号系统中,可以使用有序链表来按照客户到达时间的顺序来排列客户。每当有新的客户到达时,将其插入到有序链表的适当位置。当某个客户完成业务后,可以从链表中删除该客户。这样,银行工作人员可以按照链表中的顺序依次处理客户。
2. 队列:队列是一种先进先出(FIFO)的数据结构。在银行叫号系统中,可以使用队列来模拟客户排队的过程。每当有新的客户到达时,将其加入到队列的末尾。当某个客户完成业务后,从队列的头部取出下一个客户进行处理。这样,银行工作人员可以按照队列中的顺序依次处理客户。
以下是使用C语言实现银行叫号系统的示例代码:
1. 使用有序链表实现银行叫号系统:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义客户结构体
typedef struct {
int arrivalTime; // 到达时间
int serviceTime; // 业务所需时间
} Customer;
// 定义链表节点结构体
typedef struct Node {
Customer customer;
struct Node* next;
} Node;
// 插入客户到有序链表中
void insertCustomer(Node** head, Customer customer) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->customer = customer;
newNode->next = NULL;
if (*head == NULL || customer.arrivalTime < (*head)->customer.arrivalTime) {
newNode->next = *head;
*head = newNode;
} else {
Node* current = *head;
while (current->next != NULL && current->next->customer.arrivalTime <= customer.arrivalTime) {
current = current->next;
}
newNode->next = current->next;
current->next = newNode;
}
}
// 删除链表中的客户
void deleteCustomer(Node** head) {
if (*head == NULL) {
return;
}
Node* temp = *head;
*head = (*head)->next;
free(temp);
}
// 打印链表中的客户信息
void printCustomers(Node* head) {
Node* current = head;
while (current != NULL) {
printf("Arrival Time: %d, Service Time: %d\n", current->customer.arrivalTime, current->customer.serviceTime);
current = current->next;
}
}
int main() {
Node* head = NULL;
// 添加客户到链表中
Customer customer1 = {10, 5};
insertCustomer(&head, customer1);
Customer customer2 = {5, 3};
insertCustomer(&head, customer2);
Customer customer3 = {8, 4};
insertCustomer(&head, customer3);
// 打印链表中的客户信息
printCustomers(head);
// 删除链表中的客户
deleteCustomer(&head);
// 打印链表中的客户信息
printCustomers(head);
return 0;
}
```
2. 使用队列实现银行叫号系统:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义客户结构体
typedef struct {
int arrivalTime; // 到达时间
int serviceTime; // 业务所需时间
} Customer;
// 定义队列结构体
typedef struct {
Customer* customers;
int front;
int rear;
int capacity;
} Queue;
// 创建队列
Queue* createQueue(int capacity) {
Queue* queue = (Queue*)malloc(sizeof(Queue));
queue->customers = (Customer*)malloc(capacity * sizeof(Customer));
queue->front = 0;
queue->rear = -1;
queue->capacity = capacity;
return queue;
}
// 判断队列是否为空
int isEmpty(Queue* queue) {
return queue->rear < queue->front;
}
// 判断队列是否已满
int isFull(Queue* queue) {
return queue->rear == queue->capacity - 1;
}
// 入队
void enqueue(Queue* queue, Customer customer) {
if (isFull(queue)) {
printf("Queue is full.\n");
return;
}
queue->customers[++queue->rear] = customer;
}
// 出队
void dequeue(Queue* queue) {
if (isEmpty(queue)) {
printf("Queue is empty.\n");
return;
}
queue->front++;
}
// 打印队列中的客户信息
void printCustomers(Queue* queue) {
for (int i = queue->front; i <= queue->rear; i++) {
printf("Arrival Time: %d, Service Time: %d\n", queue->customers[i].arrivalTime, queue->customers[i].serviceTime);
}
}
int main() {
Queue* queue = createQueue(5);
// 入队
Customer customer1 = {10, 5};
enqueue(queue, customer1);
Customer customer2 = {5, 3};
enqueue(queue, customer2);
Customer customer3 = {8, 4};
enqueue(queue, customer3);
// 打印队列中的客户信息
printCustomers(queue);
// 出队
dequeue(queue);
// 打印队列中的客户信息
printCustomers(queue);
return 0;
}
```
阅读全文