请编写C程序,实现顺序队列的以下功能:初始化并建立队列、元素入队、元素出队、判断队列是否为空、取队头元素、遍历队列。
时间: 2023-12-14 11:03:22 浏览: 124
好的,以下是实现顺序队列的C程序,包含以上功能:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100 // 定义队列最大容量为100
typedef struct {
int data[MAX_SIZE];
int front; // 头指针
int rear; // 尾指针
int size; // 队列大小
} Queue;
// 初始化队列
void initQueue(Queue *q) {
q->front = q->rear = -1;
q->size = 0;
}
// 判断队列是否为空
int isQueueEmpty(Queue *q) {
return q->size == 0;
}
// 判断队列是否已满
int isQueueFull(Queue *q) {
return q->size == MAX_SIZE;
}
// 元素入队
void enqueue(Queue *q, int item) {
if (isQueueFull(q)) {
printf("队列已满,无法入队!\n");
return;
}
if (isQueueEmpty(q)) {
q->front = q->rear = 0;
} else {
q->rear = (q->rear + 1) % MAX_SIZE; // 尾指针移动
}
q->data[q->rear] = item; // 元素入队
q->size++; // 队列大小加1
}
// 元素出队
int dequeue(Queue *q) {
if (isQueueEmpty(q)) {
printf("队列为空,无法出队!\n");
return -1;
}
int item = q->data[q->front]; // 取出队头元素
if (q->front == q->rear) { // 队列中只有一个元素
q->front = q->rear = -1;
} else {
q->front = (q->front + 1) % MAX_SIZE; // 头指针移动
}
q->size--; // 队列大小减1
return item;
}
// 取队头元素
int getFront(Queue *q) {
if (isQueueEmpty(q)) {
printf("队列为空,无法取队头元素!\n");
return -1;
}
return q->data[q->front];
}
// 遍历队列
void traverseQueue(Queue *q) {
if (isQueueEmpty(q)) {
printf("队列为空,无法遍历!\n");
return;
}
printf("队列元素依次为:");
int i = q->front;
while (i != q->rear) {
printf("%d ", q->data[i]);
i = (i + 1) % MAX_SIZE;
}
printf("%d\n", q->data[i]);
}
int main() {
Queue q;
initQueue(&q); // 初始化队列
// 入队
enqueue(&q, 1);
enqueue(&q, 2);
enqueue(&q, 3);
// 遍历队列
traverseQueue(&q);
// 出队
printf("出队元素为:%d\n", dequeue(&q));
printf("出队元素为:%d\n", dequeue(&q));
printf("出队元素为:%d\n", dequeue(&q));
// 判断队列是否为空
if (isQueueEmpty(&q)) {
printf("队列已空!\n");
}
return 0;
}
```
在上面的程序中,我们使用结构体定义了一个队列,包含了队列中的元素及其头、尾指针和大小。接着,我们分别实现了初始化队列、判断队列是否为空、判断队列是否已满、元素入队、元素出队、取队头元素和遍历队列这些功能。最后,我们在主函数中进行了测试。
阅读全文