数据结构---链式队列

基于链式存储结构实现的队列

实现方式:带头结点的单链表

操作:

(1)初始化

复制代码
#include<stdio.h>
#include<stdlib.h>
//链式队列
//链表的结点结构
typedef struct Node
{
    int data;
    struct Node* next;
}QNode;
//声明队列结构(用结构体声明队列结构的好处是可以声明多个队列)
typedef struct queue
{
    QNode* head;
    QNode* tail;
}Queue;
//初始化
Queue* InitQueue()
{
    Queue *q = (Queue*)malloc(sizeof(Queue));
    if(q == NULL)
    {
        printf("内存申请失败\n");
        return NULL;
    }
    QNode *p = (QNode*)malloc(sizeof(QNode));
    if(p == NULL)
    {
        printf("内存申请失败\n");
        return NULL;
    }
    p->next = NULL;
    q->head = p;
    q->tail = p;
    return q;
}

(2)入队(使用带尾指针的尾插法)

复制代码
//入队(尾插法)
Queue* push(Queue *q,int k)
{
    QNode* p = (QNode*)malloc(sizeof(QNode));
    if(p == NULL)
    {
        printf("内存申请失败\n");
        return q;
    }
    p->data = k;
    p->next = q->tail->next;
    q->tail->next = p;
    q->tail = p;
    return q;
}

(3)出队

复制代码
//出队
Queue* pop(Queue* q)
{
    if(q->head->next == NULL)
    {
        printf("空队列\n");
        return q;
    }
    QNode* temp = q->head->next;
    q->head->next = q->head->next->next;
    if(temp == q->tail)//防止尾指针称为野指针
    {
        q->tail = q->head;
    }
    free(temp);
    temp = NULL;
    return q;
}

(4)判空

复制代码
//判空
int isEmpty(Queue* q)
{
    if(q->head == q->tail)
    {
        return 1;   
    }
    return 0;
}

链式队列没有判满操作,是无限的

相比较于顺序队列,后面没有循环链式队列,

因为链式队列不存在假溢出的情况

除了链式队列和顺序队列还有优先队列和双端队列

相关推荐
‎ദ്ദിᵔ.˛.ᵔ₎20 小时前
LIST 的相关知识
数据结构·list
M--Y21 小时前
Redis常用数据类型
数据结构·数据库·redis
༾冬瓜大侠༿21 小时前
vector
c语言·开发语言·数据结构·c++·算法
汀、人工智能1 天前
[特殊字符] 第58课:两个正序数组的中位数
数据结构·算法·数据库架构··数据流·两个正序数组的中位数
liu****1 天前
第16届省赛蓝桥杯大赛C/C++大学B组(京津冀)
开发语言·数据结构·c++·算法·蓝桥杯
汀、人工智能1 天前
[特殊字符] 第79课:分割等和子集
数据结构·算法·数据库架构·位运算·哈希表·分割等和子集
汀、人工智能1 天前
[特殊字符] 第74课:完全平方数
数据结构·算法·数据库架构·图论·bfs·完全平方数
CoderCodingNo1 天前
【GESP】C++四、五级练习题 luogu-P1177 【模板】排序
数据结构·c++·算法
汀、人工智能1 天前
[特殊字符] 第76课:单词拆分
数据结构·算法·均值算法·前缀树·trie·单词拆分
ambition202421 天前
斐波那契取模问题的深入分析:为什么提前取模是关键的
c语言·数据结构·c++·算法·图论