队列
- 数据结构 -- 队列
- 一、原理
- 二、队列声明
- 三、队列初始化
- 四、队列释放
- 五、判断 空/ 满
- 六、入队/ 出队
- 六、main
- 总结:
一、原理
- 先进先出:【 first in first out 】
- 第一个元素称为:首元素,尾元素:
#include三、队列初始化#include typedef struct queue{ int *arr; //首地址 int cap; //容量 int size; //有效数据个数 int front;//前端(出队) int rear; //后端(入队) }queue_t;
void queue_init(queue_t *queue, int cap)
{
queue->arr=(int *)malloc(cap*sizeof(queue->arr[0]));//分配内存
queue->cap=cap; //容量0
queue->size=0;//有效数据为0
queue->front=0;//前为0
queue->rear=0;//后为0
}
四、队列释放
void queue_deinit(queue_t *queue)
{
free(queue->arr);//清空
queue->cap=0;
queue->size=0;
queue->front=0;
queue->rear=0;
}
五、判断 空/ 满
//判断是否队列满了
int queue_full(queue_t *queue)
{
return (queue->size) >= (queue->cap);
}
//判断是否队列空了
int queue_empty(queue_t *queue)
{
return !(queue->size) ;
}
六、入队/ 出队
- 入队 push
void push_queue(queue_t *queue,int data)
{
if(queue->rear >= queue->cap)
queue->rear=0; //如果队列的前面有空位置,重新定位rear
//让队列变成一个循环队列
queue->arr[queue->rear++]=data;
queue->size++;
}
- 出队 pop
int pop_queue(queue_t *queue)
{
if(queue->front >= queue->cap)
queue->front=0; //取到队尾,然后还有数据,需要重新定位front
queue->size--;
return queue->arr[queue->front++];
}
六、main
int main(void)
{
//定义队列
queue_t queue;
//初始化队列
queue_init(&queue,4);
//入队 10 20 30 40
for(int i=10;i<=40;i +=10){
if(!queue_full(&queue)) {
queue_push(&queue,i);
}
}
//出队 10 20
for(int i=0;i<2;i++){
if(!queue_empty(&queue)){
printf("%dn",queue_pop(&queue));
}
}
//入队:50 60
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));
}
//销毁队列
queue_deinit(&queue);
return 0;
}
总结:
- 常见队列原理+使用



