file.c文件
#include "file.h"
/*输入:
q:队列(数据结构
smax:队列中可以存储的最大元素数,也就是队列的长度 */
//给对列初始化
void initQueue(queue_t *q, int smax){
//分配一个长度为smax的数组来存储队列元素
q->array = (int *)malloc(smax*sizeof(int));
//初始化
q->front = 0;
q->rear = 0;
q->size = 0;
q->sizeMax = 0;
}
//释放队列内存空间
void freeQueue(queue_t *q){
if (q->array){
free(q->array);
}
}
//元素入列
int enqueue(queue_t *q, int val){
int insert = 0;
/*首先检查队列是否满*/
if (q->size < q->sizeMax){
q->array[q->rear] = val;
q->rear++;
/*如果我们已经到达终点,那么后部返回0*/
//此时如果运行了if语句就证明队列已经满了
if (q->rear == q->sizeMax){
q->rear = 0;
}
q->size++;
insert = 1;
}
return insert;
}
//出队
void displayQueue(queue_t *q){
int cpt = 0;
printf("queue = ");
while (cpt < q->size){
//注意:队列并不总是从0开始
printf("%d ", q->array[(q->front+cpt) % q->sizeMax]);
cpt++;
}
printf("\n");
}
//检验队列是否满了
int dequeue(queue_t *q){
/*总是离开第一个元素(FIFO策略)*/
int val = q->array[q->front];
q->size--;
q->front++;
/*看看我们是否到达了数组的末端*/
if (q->front == q->sizeMax)
q->front = 0;
return val;
}
//是否为空
int isEmptyQueue(queue_t *q){
return (q->size == 0);
}
main.c文件
#include "file.h"
int main(){
queue_t q;
int N = 5;
/*第一次初始化*/
initQueue(&q, N);
/*测试我们唯一的函数*/
printf("queue Empty? %d\n", isEmptyQueue(&q));
/*首先在队列中放入一些东西*/
enqueue(&q, 10);
enqueue(&q, 2);
enqueue(&q, 7);
/*输出打印*/
displayQueue(&q);
//打印单个队列元素
printf("dequeue: %d\n", dequeue(&q));
printf("dequeue: %d\n", dequeue(&q));
printf("dequeue: %d\n", dequeue(&q));
printf("queue Empty? %d\n", isEmptyQueue(&q));
enqueue(&q, 20);
enqueue(&q, 5);
enqueue(&q, 14);
enqueue(&q, 20);
enqueue(&q, 5);
enqueue(&q, 14);
displayQueue(&q);
freeQueue(&q);
return 0;
}
file.h文件
#pragma once
#include <stdio.h>
#include <stdlib.h>
typedef struct queue
{
/* data(数据) */
int sizeMax;//数组最大容量(长度)
int size;//实际容量(有效值数目)
int front;//下一个删除的索引(即第一个元素的索引,如果不是空队列),front是下一个删除的标签
int rear;//下一个插入的索引,rear是下一个添加的标签
int *array;//存储队列的数组
}queue_t;
void initQueue(queue_t *q, int smax);
void freeQueue(queue_t *q);
int enqueue(queue_t *q, int val);
void displayQueue(queue_t *q);
int dequeue(queue_t *q);
int isEmptyQueue(queue_t *q);
makefile文件
exe: file.o main.o
gcc -o exe file.o main.o
file.o: file.c file.h
gcc -g -c file.c -Wall
main.o: main.c file.h
gcc -g -c main.c -Wall
clean:
rm exe file.o main.o
运行结果确实这样