C语言实现队列功能
#include <stdio.h>
#include <stdlib.h>
//定义一个结构体表示队列
struct Queue {
int front,rear,size;
unsigned capacity;
int* array;
};
//初始化队列
struct Queue* createQueue(unsigned capacity) {
struct Queue* queue = (struct Queue*) malloc(sizeof(struct Queue));
queue->capacity = capacity;
queue->front = queue->size = 0;
queue->rear = capacity - 1;
queue->array = (int*) malloc(queue->capacity * sizeof(int));
return queue;
}
//检查队列是否已满
int isFull(struct Queue* queue) {
return (queue->size == queue->capacity);
}
//检查队列是否为空
int isEmpty(struct Queue* queue) {
return (queue->size == 0);
}
//将元素添加到队列的尾部
void enqueue(struct Queue* queue, int item) {
if (isFull(queue))
return;
queue->rear = (queue->rear + 1)%queue->capacity;
queue->array[queue->rear] = item;
queue->size += 1;
printf("%d enqueued to queue\n", item);
}
//从队列的头部删除并返回元素
int dequeue(struct Queue* queue) {
if (isEmpty(queue))
return -1;
int item = queue->array[queue->front];
queue->front = (queue->front + 1)%queue->capacity;
queue->size -= 1;
return item;
}
//获取队列的头部元素
int front(struct Queue* queue) {
if (isEmpty(queue))
return -1;
return queue->array[queue->front];
}
//获取队列的尾部元素
int rear(struct Queue* queue) {
if (isEmpty(queue))
return -1;
return queue->array[queue->rear];
}
//测试队列
int main() {
struct Queue* queue = createQueue(100);
enqueue(queue, 10);
enqueue(queue, 20);
enqueue(queue, 30);
printf("%d dequeued from queue\n", dequeue(queue));
printf("Front item is %d\n", front(queue));
printf("Rear item is %d\n", rear(queue));
return 0;
}