队列
特点:具有先进先出的特性。
入队:将数据保存到队列的内存中,操作队尾(rear).
出队:从队列的内存中取出数据,操作队首
队列头文件编写:
//queue.h:队列的各种声明
#ifndef QUEUE_H
#define QUEUE_H
//包含公共头文件
#include <stdio.h>
#include <stdlib.h>
//声明描述的结构体
typedef struct queue {
int* arr;
int cap;
int size;
int rear;
int front;
}queue_t;
extern void queue_init(queue_t* queue, int cap);
extern void queue_deinit(queue_t* queue);
extern int queue_full(queue_t* queue);
extern int queue_empty(queue_t* queue);
extern void queue_push(queue_t* queue, int data);
extern int queue_pop(queue_t* queue);
extern int queue_size(queue_t* queue);
#endif
队列函数编写:
#include "queue.h"
void queue_init(queue_t* queue, int cap) {
queue->arr = malloc(sizeof(int) * cap);
queue->cap = cap;
queue->size = 0;
queue->rear = 0;
queue->front = 0;
}
void queue_deinit(queue_t* queue) {
free(queue->arr);
queue->cap =0;
queue->size = 0;
queue->rear = 0;
queue->front = 0;
}
int queue_empty(queue_t* queue) {
return !queue->size;
}
int queue_full(queue_t* queue) {
return !queue->size >= queue->cap;
}
void queue_push(queue_t* queue, int data) {
if (queue->rear >= queue->cap)
queue->rear = 0;
queue->arr[queue->rear++] = data;
queue->size++;
}
int queue_pop(queue_t* queue) {
if (queue->front >= queue->cap)
queue->front = 0;
queue->size--;
return queue->arr[queue->front++];
}
int queue_size(queue_t* queue) {
return queue->size;
}
队列测试代码编写:
#include "queue.h"
int main(void) {
queue_t queue;
queue_init(&queue, 4);
for (int i = 10; i <= 40; i += 10)
if (!queue_full(&queue))
queue_push(&queue, i);
printf("有效个数是:%d\n", queue_size(&queue));
for (int i = 0; i < 2; i++)
if (!queue_empty(&queue))
printf("%d",queue_pop(&queue));
printf("\n");
printf("有效个数是:%d\n",queue_size(&queue));
for (int i = 50; i <= 60; i += 10)
if (!queue_full(&queue))
queue_push(&queue, i);
while (!queue_empty(&queue))
printf("%d", queue_pop(&queue));
printf("\n");
queue_deinit(&queue);
return 0;
}
代码结果图: