c语言编程序判断队空、队满、入队、出队等算法的函数
时间: 2024-10-18 17:09:51 浏览: 18
在 C 语言中,队列数据结构通常使用数组或链表实现。下面是一个基于动态数组实现的简单单向队列的示例,包括队空、队满、入队 (enqueue) 和出队 (dequeue) 函数:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 10 // 队列最大容量
typedef struct {
int data[MAX_SIZE]; // 存储队列元素
int front; // 队头指针
int rear; // 队尾指针
} Queue;
// 初始化队列
void initQueue(Queue *q) {
q->front = -1;
q->rear = -1;
}
// 判断队列是否为空
int isQueueEmpty(const Queue *q) {
return (q->front == -1);
}
// 判断队列是否已满
int isQueueFull(const Queue *q) {
return ((q->front + 1) % MAX_SIZE == q->rear);
}
// 入队操作:如果队列未满,则将新元素插入队尾;否则,返回错误
void enqueue(Queue *q, int item) {
if (!isQueueFull(q)) {
q->rear = (q->rear + 1) % MAX_SIZE; // 使用模运算避免数组越界
q->data[q->rear] = item;
printf("Enqueued item %d\n", item);
} else {
printf("Queue is full.\n");
}
}
// 出队操作:如果队列非空,则删除并返回队首元素;否则,返回错误
int dequeue(Queue *q) {
if (!isQueueEmpty(q)) {
int removedItem = q->data[q->front];
q->front = (q->front + 1) % MAX_SIZE;
printf("Dequeued item %d\n", removedItem);
return removedItem; // 返回出队元素
} else {
printf("Queue is empty.\n");
return -1; // 返回错误码
}
}
int main() {
Queue q;
initQueue(&q);
enqueue(&q, 1); // 应该成功
enqueue(&q, 2); // 应该成功
enqueue(&q, 3); // 队满,应该提示队满
dequeue(&q); // 应该出队 1,然后队列长度减少
dequeue(&q); // 应该出队 2
dequeue(&q); // 应该出队 3,然后报队空错误
return 0;
}
```
这个例子展示了如何使用 C 语言的基本结构和控制流来实现一个简单的队列。请注意,在实际项目中,更复杂的队列数据结构可能会使用链接列表,这样可以避免预先设定的最大容量限制。
阅读全文