数据结构——循环队列
本文最后更新于 149 天前,其中的信息可能已经有所发展或是发生改变。

1.文件注释内容

/**
 * @filename:    queue.c
 * @brief:       queue
 * @author:      philia
 * @date:        2026/2/1
 * @version:     ver1.0
 * @note         none
 * CopyRight (c) 2026   philia  All Right Reseverd
 */

2.头文件

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

3.循环队列初始化函数及结构体定义

typedef int ElementType;
typedef struct {
    ElementType *addr;
    unsigned int maxsize;
    int rear;
    int front;
} CircularQueue;

//循环队列初始化
CircularQueue* queue_init(unsigned int size) {
    if (size < 2) {
        printf("队列容量至少为2\n");
        return NULL;
    }

    //为管理结构体申请内存
    CircularQueue *list = (CircularQueue*)calloc(1, sizeof(CircularQueue));
    if (!list) exit(-1);

    //为队列申请内存
    list->addr = (ElementType*)calloc(size, sizeof(ElementType));
    if (!list->addr) {
        free(list);
        exit(-1);
    }

    list->maxsize = size;
    list->front = list->rear = 0;
    return list;
}

4.入队

//入队
bool push(CircularQueue* q, int value) {
    //队列已满
    if ((q->rear + 1) % q->maxsize == q->front) {
        printf("队列已满\n");
        return false;
    }
    //队列未满
    q->rear = (q->rear + 1) % q->maxsize;
    q->addr[q->rear] = value;
    printf("入队成功:%d\n", value);
    return true;
}

5.出队

//出队
bool pop(CircularQueue* q, int *value) {
    //队列为空
    if (q->front == q->rear) {
        printf("队列为空\n");
        return false;
    }

    //队列未空
    q->front = (q->front + 1) % q->maxsize;
    *value = q->addr[q->front];
    printf("出队成功:%d\n", *value);
    return true;
}

6.遍历循环队列

//遍历循环队列
void printQueue(CircularQueue* q) {

    //队列为空
    if (q->front == q->rear) {
        printf("队列为空\n");
        return;
    }


    int i = (q->front + 1) % q->maxsize;
    while (i != q->rear) {
        printf("%d ", q->addr[i]);
        i = (i + 1) % q->maxsize;
    }
    printf("%d\n", q->addr[i]);  // 打印最后一个
}

7.内存释放

//内存释放
void queue_destroy(CircularQueue* q) {
    free(q->addr);
    free(q);
}

8.编写主函数测试

int main() {
    CircularQueue* q = queue_init(10);
    push(q, 10);
    push(q, 20);
    push(q, 23);
    int val;
    pop(q, &val);
    printQueue(q);  // 输出 20 23
    queue_destroy(q);
    return 0;
}
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇