用C语言来编写程序使得程序链队列的基本操作。要求:设计一个主函数对链队列进行测试。主要功能有:链队列的初始化、求队列的长度、入队列操作、出队列操作、取对头元素,以此写一个银行业务排队程序,包含取号、叫号功能,假定每个业务用时10秒。
时间: 2024-10-17 12:12:09 浏览: 37
在C语言中,我们可以使用结构体和指针来创建一个简单的链队列数据结构。首先,我们需要定义一个`QueueNode`结构体,它将包含数据域`data`和指向下一个节点的指针`next`。然后,我们创建两个全局变量,一个用于存储队列头`head`和一个用于存储队列尾`tail`。
```c
#include <stdio.h>
#include <stdlib.h>
// 队列节点结构
typedef struct QueueNode {
int data;
struct QueueNode* next;
} QueueNode;
// 初始化空队列
void initQueue(QueueNode** head) {
*head = NULL;
}
// 求队列长度
int queueLength(QueueNode* head) {
int length = 0;
QueueNode* current = head;
while (current != NULL) {
length++;
current = current->next;
}
return length;
}
// 入队操作
void enqueue(QueueNode** head, int value) {
QueueNode* newNode = (QueueNode*)malloc(sizeof(QueueNode));
newNode->data = value;
newNode->next = *head;
*head = newNode;
if (*head == NULL)
tail = newNode;
}
// 出队操作
int dequeue(QueueNode** head) {
if (*head == NULL) {
printf("Queue is empty.\n");
return -1;
}
int removedData = (*head)->data;
QueueNode* temp = *head;
*head = (*head)->next;
free(temp);
if (*head == NULL)
tail = NULL;
return removedData;
}
// 取队头元素
int getFront(QueueNode* head) {
if (head == NULL) {
printf("Queue is empty.\n");
return -1;
}
return head->data;
}
// 主函数,模拟银行排队程序
int main() {
QueueNode* head = NULL;
initQueue(&head);
// 测试部分
int customerNum = 5; // 假设5位客户
for (int i = 0; i < customerNum; i++) {
enqueue(&head, i + 1); // 取号
printf("Customer %d has taken a number and waiting...\n", i + 1);
sleep(10); // 模拟业务处理时间
int serviceNumber = dequeue(&head); // 叫号
printf("Customer %d is being served with number %d.\n", i + 1, serviceNumber);
}
return 0;
}
```
这个程序演示了如何实现基本的链队列操作,并且通过模拟银行排队过程展示了取号和叫号的功能。注意,这里使用了`sleep`函数模拟业务处理时间,但在实际生产环境中,你可以选择更高效的方式来模拟,比如异步处理等。
阅读全文