1.先创建queue.h声明文件(Linux命令:touch queue.h)。编写函数声明如下(打开文件 Linux 操作命令:vim queue.h):
//头文件
#ifndef __QUEUE_H__
#define __QUEUE_H__
//队列
typedef struct queue{
int* arr;
int in;
int out;
int cap;
int size;
}queue_t;
//队列的操作
//队列的初始化
//queue_t queue; queue.arr queue.in queue.out queue.cap queue.siaze
void queue_init(queue_t* q,int cap);
//队列的释放
void queue_deinit(queue_t* q);
//队列的判空 空 1 非空 0
int queue_empty(queue_t* q);
//队列的判满 满 1 非满 0
int queue_full(queue_t* q);
//入队
void queue_push(queue_t* q,int data);
//出队
int queue_pop(queue_t* q);
#endif //__QUEUE_H__
2.创建函数实现文件queue.c(Linux命令:touch queue.c)。写入函数到文件中:
//队列的实现
#include<stdio.h>
#include"queue.h"
#include<stdlib.h>
//从队列的初始化
//queue_t queue;
//queue_init(&queue,5);
void queue_init(queue_t* q,int cap){
q->arr= malloc(sizeof(int)*cap);
q->in=0;
q->out=0;
q->cap=cap;
q->size=0;
}
//队列的实现释放
void queue_deinit(queue_t* q){
free(q->arr);
q->arr=NULL;
q->in=0;
q->out=0;
q->size=0;
}
//队列的判空
int queue_empty(queue_t* q){
return q->size==0 ? 1:0;
}
//队列的判满
int queue_full(queue_t* q){
return q->size==q->cap ? 1:0;
}
//队列的入队
void queue_push(queue_t* q,int data){
if(q->in ==q->cap){
q->in=0;
}
q->arr[q->in++]=data;
q->size++;
}
//队列的出队
int queue_pop(queue_t* q){
if(q->out==q->cap){
q->out=0;
}
int data=q->arr[q->out];
q->out++;
q->size--;
return data;
}
3.编写主函数调用文件main.c(Linux命令:touch main.c)。编写逻辑操作:
//队列的使用
#include<stdio.h>
#include"queue.h"
#include<stdlib.h>
int main(void){
//队列
printf("队列\n");
queue_t queue;
printf("初始化\n");
queue_init(&queue,6);
printf("入队\n");
int data=1;
while(queue_full(&queue)==0){
queue_push(&queue,data);
data++;
}
printf("出队\n");
while(queue_empty(&queue)==0){
printf("%d ",queue_pop(&queue));
}
printf("\n");
printf("释放\n");
queue_deinit(&queue);
return 0;
}
4.编译运行
Linux命令:gcc main.c queue.c -o queue
运行:./queue