帮我写一个基于C语言的队列
时间: 2023-08-28 15:12:39 浏览: 101
### 回答1:
好的,我来为你写一个基于C语言的队列:
```
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
struct Queue {
int items[MAX_SIZE];
int front;
int rear;
};
typedef struct Queue queue;
void initialize(queue *q) {
q->front = -1;
q->rear = -1;
}
int isFull(queue *q) {
if (q->front == 0 && q->rear == MAX_SIZE - 1) {
return 1;
}
if (q->front == q->rear + 1) {
return 1;
}
return 0;
}
int isEmpty(queue *q) {
if (q->front == -1) {
return 1;
}
return 0;
}
void enqueue(queue *q, int value) {
if (isFull(q)) {
printf("队列已满\n");
} else {
if (q->front == -1) {
q->front = 0;
}
q->rear = (q->rear + 1) % MAX_SIZE;
q->items[q->rear] = value;
}
}
int dequeue(queue *q) {
int item;
if (isEmpty(q)) {
printf("队列为空\n");
item = -1;
} else {
item = q->items[q->front];
if (q->front == q->rear) {
q->front = -1;
q->rear = -1;
} else {
q->front = (q->front + 1) % MAX_SIZE;
}
}
return item;
}
void printQueue(queue *q) {
int i = q->front;
if (isEmpty(q)) {
printf("队列为空\n");
} else {
printf("队列中的元素为:\n");
while (i != q->rear) {
printf("%d ", q->items[i]);
i = (i + 1) % MAX_SIZE;
}
printf("%d\n", q->items[i]);
}
}
int main() {
queue q;
initialize(&q);
enqueue(&q, 1);
enqueue(&q, 2);
enqueue(&q, 3);
printQueue(&q);
dequeue(&q);
printQueue(&q);
return 0;
}
```
该队列使用循环数组实现,可以进行入队和出队操作,并且具有判断队列是否为空和是否已满的功能。你可以根据需要进行修改和扩展。
### 回答2:
C语言队列的实现通常使用数组来存储队列元素,并定义队列的头部和尾部指针,以及队列的大小。下面是一个简单的基于C语言的队列示例:
#include <stdio.h>
#define SIZE 10 // 队列的最大容量
// 定义队列结构
typedef struct {
int items[SIZE];
int front; // 队列头部指针
int rear; // 队列尾部指针
} Queue;
// 初始化队列
void initQueue(Queue* queue) {
queue->front = -1;
queue->rear = -1;
}
// 检查队列是否已满
int isFull(Queue* queue) {
if (queue->rear == SIZE - 1) {
return 1;
}
return 0;
}
// 检查队列是否为空
int isEmpty(Queue* queue) {
if (queue->front == -1) {
return 1;
}
return 0;
}
// 入队操作
void enqueue(Queue* queue, int item) {
if (isFull(queue)) {
printf("队列已满,无法入队!\n");
}
else {
if (queue->front == -1) {
queue->front = 0;
}
queue->rear++;
queue->items[queue->rear] = item;
printf("入队成功: %d\n", item);
}
}
// 出队操作
int dequeue(Queue* queue) {
int item;
if (isEmpty(queue)) {
printf("队列为空,无法出队!\n");
return -1;
}
else {
item = queue->items[queue->front];
if (queue->front >= queue->rear) {
queue->front = -1;
queue->rear = -1;
}
else {
queue->front++;
}
printf("出队成功: %d\n", item);
return item;
}
}
// 获取队头元素
int getFront(Queue* queue) {
if (isEmpty(queue)) {
printf("队列为空!\n");
return -1;
}
else {
return queue->items[queue->front];
}
}
int main() {
Queue queue;
initQueue(&queue);
enqueue(&queue, 1);
enqueue(&queue, 2);
enqueue(&queue, 3);
dequeue(&queue);
printf("队头元素: %d\n", getFront(&queue));
return 0;
}
此示例实现了基本的队列操作,包括初始化队列、入队、出队、检查队列是否为空以及获取队头元素等操作。使用以上代码,您可以在C语言中轻松创建和操作队列。
阅读全文