o Logo
首页
反馈
o Logo
首页 反馈
  1. 首页
  2. 数据结构与算法
  3. 队列

队列

  • 数据结构与算法
  • 发布于 2025-08-31
  • 25 次阅读
o
o
//queue.h
#ifndef __QUEUE_H__
#define __QUEUE_H__
//队列
typedef struct queue{
    int* arr;   //记录存储区首地址
    int size;//有效元素个数
    int cap; //容量
    int front;//记录出队元素下标
    int rear; //记录入队元素下标
}queue_t;
//初始化
void queue_init(queue_t* q,int cap);
//释放
void queue_deinit(queue_t* q);
//判满
int queue_full(queue_t* q);
//判空
int queue_empty(queue_t* q);
//入队
void queue_push(queue_t* q,int data);
//出队
int queue_pop(queue_t* q);
#endif //__QUEUE_H__
//queue.c
#include <stdio.h>
#include <stdlib.h>
#include "queue.h"
void queue_init(queue_t *q, int cap){
    q->arr = malloc(sizeof(int) * cap);
    q->size = 0;
    q->cap = cap;
    q->front = 0;
    q->rear = 0;
}

void queue_deinit(queue_t *q){
    free(q->arr);
    q->arr = NULL;
    q->size = 0;
    q->cap = 0;
    q->front = 0;
    q->rear = 0;
}

int queue_full(queue_t *q){
    return q->size == q->cap ? 1 : 0;
}

int queue_empty(queue_t *q){
    return q->size == 0 ? 1 : 0;
}

void queue_push(queue_t *q, int data){
    //rear超出存储极限归零
    if(q->rear == q->cap){
        q->rear = 0;
    }
    q->arr[q->rear] = data;
    q->rear++;
    q->size++;
}

int queue_pop(queue_t *q){
    int data = q->arr[q->front];
    q->front++;
    q->size--;
    return data;
}
#include<stdio.h>
#include"queue.h"
int main(void){
    queue_t qu;
    queue_init(&qu, 6);
    int data = 0;
    while (queue_full(&qu) != 1){
    queue_push(&qu,data);
    data++;
    }
    while (queue_empty(&qu) != 1) {
    printf("%d",queue_pop(&qu));
    printf("\n");
    }
    queue_deinit(&qu);
    return 0;
}