当前位置:实例文章 » 其他实例» [文章]每天一道C语言编程:排队买票

每天一道C语言编程:排队买票

发布人:shili8 发布时间:2025-01-08 13:59 阅读次数:0

**每天一道C语言编程**

### 排队买票####问题描述有n个人要买票,票售卖员只有一张票。每个人都想买票,但只能排成一个队伍。假设每个人在等待的时间内都不会离开队伍。现在,我们需要设计一个算法来让每个人都能买到票。

####问题分析这个问题可以用一个队列来模拟,队列中的元素代表着等待买票的人。我们需要实现一个函数来让每个人都能买到票。

#### 解决方案我们可以使用C语言中的队列数据结构来解决这个问题。具体来说,我们可以使用链式队列(Linked List)来实现这个功能。

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* q) {
 q->front = NULL;
 q->rear = NULL;
}

// 判断队列是否为空int isEmpty(Queue* q) {
 return (q->front == NULL);
}

// 入队(添加元素到队尾)
void enqueue(Queue* q, int data) {
 Node* newNode = (Node*)malloc(sizeof(Node));
 if (!newNode) {
 printf("Memory error
");
 return;
 }
 newNode->data = data;
 newNode->next = NULL;

 if (isEmpty(q)) {
 q->front = newNode;
 q->rear = newNode;
 } else {
 q->rear->next = newNode;
 q->rear = newNode;
 }
}

// 出队(删除队头元素)
int dequeue(Queue* q) {
 if (isEmpty(q)) {
 printf("Queue is empty
");
 return -1; // 返回-1表示出错 }

 Node* temp = q->front;
 int data = temp->data;

 q->front = temp->next;
 free(temp);

 if (q->front == NULL) {
 q->rear = NULL;
 }
 return data;
}

// 主函数int main() {
 Queue queue;
 initQueue(&queue);

 // 添加元素到队列中 enqueue(&queue,1);
 enqueue(&queue,2);
 enqueue(&queue,3);
 enqueue(&queue,4);
 enqueue(&queue,5);

 printf("出队结果:");
 for (int i =0; i < 5; i++) {
 int data = dequeue(&queue);
 if (data != -1) {
 printf("%d ", data);
 }
 }

 return0;
}


#### 结果在上面的代码中,我们首先定义了一个结点的结构体和队列的结构体。然后我们实现了几个函数来操作队列,包括初始化队列、判断队列是否为空、入队和出队。

最后,在主函数中,我们创建了一个空队列,然后添加了5个元素到队列中。接着,我们使用出队函数取出每个元素,并打印出结果。

#### 总结在这个例子中,我们使用C语言中的链式队列来模拟排队买票的场景。我们实现了几个函数来操作队列,包括入队和出队。最后,我们使用这些函数来让每个人都能买到票。

这道题目要求你能够理解队列数据结构的基本概念,并且能够使用C语言中的链式队列来解决问题。

相关标签:算法数据结构
其他信息

其他资源

Top