C语言可以利用指针来实现队列的数据结构。队列是一种先进先出(FIFO)的数据结构,它的基本操作有入队(Enqueue)和出队(Dequeue)。
队列的定义
结构体定义:
typedef struct {
int* arr; // 队列存储空间
int front; // 头指针
int rear; // 尾指针
int size; // 队列长度
} Queue;
队列的初始化
初始化一个队列需要确定队列的最大长度,即队列可容纳的元素个数,以及队列中数据类型的大小。
void init_queue(Queue* q, int size) {
q->front = 0;
q->rear = -1;
q->size = size;
q->arr = (int*)malloc(size * sizeof(int));
}
入队操作
入队操作需要将元素插入队列尾部,并更新尾指针。
int enqueue(Queue* q, int data) {
if (q->rear >= q->size - 1) {
printf("Queue is full.\n");
return -1;
}
q->arr[++q->rear] = data;
return 0;
}
出队操作
出队操作需要删除队列头部元素,并更新头指针。
int dequeue(Queue* q, int* data) {
if (q->front > q->rear) {
printf("Queue is empty.\n");
return -1;
}
*data = q->arr[q->front++];
return 0;
}
队列的使用示例
示例1:使用队列实现打印杨辉三角
#include <stdio.h>
int main() {
Queue queue;
int size = 10;
init_queue(&queue, size);
enqueue(&queue, 1);
for (int i = 0; i < size; i++) {
int data, last = 0;
for (int j = 0; j <= i; j++) {
dequeue(&queue, &data);
printf("%d ", data);
enqueue(&queue, data + last);
last = data;
}
printf("\n");
}
free(queue.arr);
return 0;
}
示例2:使用队列实现逆序输出
#include <stdio.h>
int main() {
Queue queue;
int size = 5;
init_queue(&queue, size);
for (int i = 0; i < size; i++) {
int data;
scanf("%d", &data);
enqueue(&queue, data);
}
for (int i = 0; i < size; i++) {
int data;
dequeue(&queue, &data);
printf("%d ", data);
}
free(queue.arr);
return 0;
}
以上是使用指针实现队列的方法,通过这种方法能够更加有效的避免了数据内存空间的浪费,同时这也是一种非常常见的数据存储方式,实用性较高。