IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C语言实现队列 -> 正文阅读

[C++知识库]C语言实现队列

代码

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

//链表队列
typedef struct Node { //链表节点的自定义数据类型
    int val;
    struct Node *next;
} Node;

typedef struct Queue {
    Node *head, *tail;
} Queue;

Node *initNode(int val) { //初始化链表节点
    Node *n = (Node *)malloc(sizeof(Node));
    if (!n) return NULL;
    n->val = val;
    n->next = NULL;
    return n;
}

void freeNode(Node *p) { //释放链表节点
    if (p) free(p);
    return ;
}

Queue *initQueue() { //初始化队列
    Queue *q = (Queue *)malloc(sizeof(Queue));
    q->head = NULL, q->tail = NULL;
    return q;
}

void freeQueue(Queue *q) {
    if (!q) return ;
    Node *p = q->head, *k;
    while (p) {
        k = p;
        p = p->next;
        freeNode(k);
    }
    free(q);
    return ;
}

int push(Queue *q, int val) { //入队列
    if (!q) return 0;
    Node *n = initNode(val);
    if (!n) return 0;
    if (q->tail) { //尾插法
        q->tail->next = n;
        q->tail = n;
    } else //空链表
        q->head = n, q->tail = n;
    return 1;
}

int isEmpty(Queue *q) {
    return !(q && q->head);
}

int pop(Queue *q) { //出队列
    Node *k = q->head;
    int tmp = k->val;
    q->head = k->next;
    freeNode(k);
    if (!q->head) q->tail = NULL;
    return tmp;
}

#if 0 //普通队列
typedef struct Queue {
    int *data, size, head, tail;
} Queue;

int expand(Queue *q);

Queue *initQueue(int n) { //初始化
    Queue *q = (Queue *)malloc(sizeof(Queue));
    q->data = (int *)malloc(sizeof(int) * n);
    q->size = n;
    q->head = 0;
    q->tail = 0;
}

void freeQueue(Queue *q) {
    if (!q) return ;
    free(q->data);
    free(q);
    return ;
}

int push(Queue *q, int val) {
    if (!q) return 0;
    if ((q->tail + 1) % q->size == q->head) { //满队
        if (!expand(q)) return 0;
    }
    q->data[q->tail] = val;
    q->tail = (q->tail + 1) % q->size;
    return 1;
}

int isEmpty(Queue *q) {
    return !q || q->head == q->tail;
}

int pop(Queue *q) {
    int tmp = q->data[q->head];
    q->head = (q->head + 1) % q->size;
    return tmp;
}

int expand(Queue *q) { //扩容
    if (!q) return 0;
    int expsize = q->size, *tmp;
    while (expsize) {
        tmp = (int *)malloc(sizeof(int) * (q->size + expsize));
        if (tmp) break;
        expsize >>= 1;
    }
    if (!tmp) return 0;

    //把队列中德数据搬到新家
    int i, j;
    for (i = q->head, j = 0; i != q->tail; i = (i +1) % q->size, ++j)
        tmp[j] = q->data[i];
    free(q->data);

    q->data = tmp, q->head = 0, q->tail = j, q->size += expsize;
    printf("expand successfully~, new size is %d\n", q->size);

    return 1;
}
#endif

int main() {
    return 0;
}
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-02 10:37:50  更:2021-08-02 10:39:21 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/9 20:28:31-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码