首页 > 其他分享 >数据结构——队列链式存储实现

数据结构——队列链式存储实现

时间:2024-01-29 16:24:12浏览次数:28  
标签:队列 LinkQueue next 链式 front 数据结构 LinkNode rear

队列链式存储主要有两个方面需要注意,一个是定义时应该定义两种结构体,一个是具体节点,一个是队列本身。具体节点用于存储具体数据data和指向下一个节点的指针 * next。而队列本身的结构体只会储存两个具体节点的指针,一个指向队头,一个指向队尾。
第二个需要注意的是,出队操作,对于只剩下一个元素的队列而言,需要队队尾指针操作,使其等于头指针,以达到队空的目的,而其他情况下只需要修改头结点指向后直接释放该节点即可。
完整代码

#include<bits\stdc++.h>
using namespace std;

#define ElementType int

typedef struct LinkNode{
    ElementType data;
    struct LinkNode *next;
}LinkNode;
typedef struct{
    LinkNode *front,*rear;
}LinkQueue;

void IniQueue(LinkQueue &Q){
    Q.front=Q.rear=(LinkNode *)malloc(sizeof(LinkNode));
    Q.front=NULL;
}

bool IsEmpty(LinkQueue &Q){
    if(Q.front==Q.rear){
        printf("Queue is Empty!");
        return true;
    }
    return false;
}

void EnQueue(LinkQueue &Q,ElementType x){
    LinkNode *p=(LinkNode *)malloc(sizeof(LinkNode));
    p->data = x;
    p->next=NULL;
    Q.rear->next=p;
    Q.rear=p;
}

bool DeQueue(LinkQueue &Q,ElementType &x){
    if(IsEmpty(Q)){
        return false;
    }else{
        LinkNode *p = Q.front->next;
        x = p->data;
        if(p==Q.rear){
            Q.rear = Q.front;
        }
        free(p);
        return true;
    }
}

本文由博客一文多发平台 OpenWrite 发布!

标签:队列,LinkQueue,next,链式,front,数据结构,LinkNode,rear
From: https://www.cnblogs.com/humanplug/p/17994770

相关文章

  • 优先级队列的应用 I
    目录1.题目列表2.应用2.1.Leetcode295.数据流的中位数2.1.1.题目2.1.2.解题思路2.1.3.代码实现1.题目列表题目列表:序号题目难度1295.数据流的中位数困难2.应用2.1.Leetcode295.数据流的中位数2.1.1.题目295.数据流的中位数中位数是......
  • LangChain大模型应用开发指南:从基础链式结构到ReAct对话解构
    在自然语言处理领域,大模型的应用已经成为了一种趋势。LangChain是一个基于深度学习的自然语言处理框架,它通过使用链式结构和ReAct对话模型,为开发者提供了一种高效、灵活的方式来进行大模型应用开发。本指南将介绍如何从基础链式结构开始,逐步构建ReAct对话解构,以实现自然语言处理应......
  • 经典数据结构题目-树
    树105.从前序与中序遍历序列构造二叉树思路先序遍历中,树的根节点放在第一位,后面是左右子树。中序遍历中,树的根节点放在中间,两边分为左右子树可基于以上规则区分出每棵树在数组中的区间先从先序数组中拿到根节点的val因为val不重复,定位到该树在中序数组的位置中序数......
  • [刷题笔记] 关于栈 & 队列常用操作方法的再探索
    Part0:序其实本来这都是很基础的东西,可惜野路子出身基础并不扎实。借着这个机会整合一下吧。也做了一些题了解了一些基本操作方法。本文对于栈和队列的原理不再过多赘述,默认读者掌握基本原理。参考题单:数据结构加强001:栈和队列2024现代信息学测试1:栈和队列本文所讲例题......
  • 数据结构笔记(1)
    开个博客记录一下算法学习的内容------------------------------------分界线------------------------------------最近在acwing上学了数据结构之链表,栈,队列,KMP(都是采用数组进行模拟,比用struct实现更快)链表:像一个链子一样一个元素串着另一个元素。单链表:每个节点有一个值......
  • 数据结构与算法:递归算法
    递归算法什么是递归?函数直接或间接调用自身的过程称为递归,相应的函数称为递归函数。使用递归算法,可以很容易地解决某些问题。此类问题的示例包括汉诺塔(TOH)、中序/先序/后序树遍历、图的DFS递归函数通过调用自身的副本并解决原始问题的较小子问题来解决特定问题。需要时可以生......
  • 数据结构
    早就学过了,学了就只学了不能再颓下去了莫队一般用来解决静态区间询问问题,如果\([l,r]\)的答案能扩展到\([l\pm\mathtt{1},r\pm\mathtt{1}]\),那么我们就能使用莫队在\(O(n\sqrt{n})\)复杂度内完成所有询问的答案,这里设\(n,m\)同阶。这个根号怪死了,还有我删除线咋还没了/f......
  • 数据结构——顺序队列(循环)
    采用顺序表的方式实现循环队列。其中关键在于如何判断队列已满。通常情况下,当对头和队尾指向同一个节点时,可以判断为队空。但是,倘若队尾不断增加,最后队尾也会指向对头,此时队满和队空的判断条件一致。以下有三种对于对于队满判断的方法。1、舍弃顺序表中的一个元素,也就是说,当队尾......
  • 单调队列
    单调队列其实是一个双端队列,可以从队首和队尾出队,但是只能在队尾入队。队列中的元素关系具有单调性。对于维护好的单调队列,队内元素是有序的,取出最大最小值的复杂度是\(O(1)\),每个元素各进队列一次,出队一次,因此复杂度是\(O(n)\)。单调队列是主要解决滑动窗口类问题的数据结构。......
  • priority_queue简介与用法(优先队列)
    priority_queue简介与用法 一、简介 1.概念priority_queue是C++标准库中的一个容器适配器(containeradapter),用于实现优先队列(priorityqueue)的数据结构。优先队列是一种特殊的队列,其中的元素按照一定的优先级进行排序,每次取出的元素都是优先级最高的。它的底层实现通常使......