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