首页 > 其他分享 >13.7_link_queue

13.7_link_queue

时间:2023-04-09 15:57:13浏览次数:43  
标签:node next queue link 13.7 element rear

#include <iostream>
#include <stdlib.h>

typedef int elemtype;
typedef struct link_node{
    elemtype data;
    struct link_node *next;
}link_node;

typedef struct {
    link_node *front,*rear;  //链表头,链表尾,也可以成为队头队尾
}link_queue;         //先进先出

//队列的初始化,使用的是带头结点的链表来实现的
void init_queue(link_queue &Q)
{
    Q.front=Q.rear=(link_node*) malloc(sizeof (link_node));
    Q.front->next=NULL;
}

//入队
void en_queue(link_queue &Q,elemtype x)
{
    link_node *pnew=(link_node*) malloc(sizeof (link_node));
    pnew->data=x;
    pnew->next=NULL;   //要让next为NULL
    Q.rear->next=pnew;   //尾指针的next指向pnew,因为从尾部入队
    Q.rear=pnew;    //rear要只想新的尾部

}

bool de_queue(link_queue &Q,elemtype &x)
{
    if(Q.rear==Q.front)   //队列为空
    {
        return false;
    }
    link_node* q=Q.front->next;   //拿到第一个节点,存入q
    x=q->data;     //获取要出队的元素值
    Q.front->next=q->next;//让第一个节点断链
    if(Q.rear==q)      //链表只剩一个节点时,被删除后,要改变rear
    {
        Q.rear=Q.front;
    }
    free(q);
    return true;
}
//通过链表实现队列
int main() {
    link_queue Q;
    init_queue(Q);
    en_queue(Q,3);
    en_queue(Q,4);
    en_queue(Q,6);
    en_queue(Q,5);
    en_queue(Q,7);
    elemtype element;
    bool ret;
    ret= de_queue(Q,element);
    if(ret)
    {
        printf("DeQueue success element = %d\n",element);
    } else{
        printf("DeQueue failed\n");
    }
    de_queue(Q,element);
    ret= de_queue(Q,element);
    if(ret)
    {
        printf("DeQueue success element = %d\n",element);
    } else{
        printf("DeQueue failed\n");
    }
    return 0;
}

 

标签:node,next,queue,link,13.7,element,rear
From: https://www.cnblogs.com/su-1007/p/17300422.html

相关文章

  • 【Java 并发】【十】【JUC数据结构】【三】LinkedBlockingQueue阻塞队列原理
    1 前言这节我们就来看看LinkedBlockingQueue内部实现的原理。2 LinkedBlockingQueue的使用在看原理之前我们先来用一用LinkedBlockingQueue,来体验一下:2.1  插入数据publicclassLinkedBlockingQueueTest{publicstaticvoidmain(String[]args)throwsInter......
  • BlockingQueue读取文本内容,多线程处理数据(线程池版本)
    importjava.io.BufferedReader;importjava.io.FileReader;importjava.io.FileWriter;importjava.io.IOException;importjava.util.concurrent.*;publicclassceshi2{publicstaticvoidmain(String[]args)throwsInterruptedException,ExecutionExcept......
  • BlockingQueue读取文本内容,多线程处理数据
    现在有一个txt文本,每个文本中每行的内容是:id,商品id。要求:启动一个线程去读取文本的内容,把每行的内容通过使用BlockingQueue发送到队列里面,然后多线程,最好是10个线程,从BlockingQueue队列里面取出来,将地址作为请求参数,请求api接口,把返回的内容解析出来,把原内容id,商品id,结果集......
  • 基于TiDB+Flink实现的滑动窗口实时累计指标算法
    作者:Jellybean前言在不少的支付分析场景里,大部分累计值指标可以通过T+n的方式计算得到。随着行业大环境由增量市场转为存量市场,产品的运营要求更加精细化、更快速反应,这对各项数据指标的实时性要求已经越来越高。产品如果能实时把握应用的整体运行情况或特征用户的状态,就可......
  • 链表linklist
       LinkList.hLinkList.cLinkList.h#pragmaonce#include<stdbool.h>typedefintData;//定义节点结构typedefstructlinkNode{Datadata;structlinkNode*next;}linkNode;//创建链表linkNode*createList();//创建节点linkNode*create......
  • Flink 生成ParquetFile
    前言这周主要是学习使用Flink,其中有一部分学习的内容就是生成parquet。Flink自身提供的文档写了个大概,但是真要自己动手去生成pqrquet文件,发现还是有些小坑,本文就是记录这些坑。开始官方文档总是最好的开始的地方,下面是官方文档上面的内容https://nightlies.apache.org/......
  • C++竞赛常用函数库stl快捷查询手册(vector,map,set,queue,string等)
    1.控制输出流<iomanip>;cout<<setprecision(<span="">int);保留int位有效数字cout<<setprecision(<span="">int)<<fixed;保留int位有效小数为不足4位数的数填充0(如1填充变成0001),cout<<setfill('0')<<setw(4)(一次性效果)......
  • 基于simulink的交流电机SPWM调速系统建模与动态仿真
    1.算法描述正弦脉宽调制技术SPWM(SinePulseWidthModulation)是用所期望的正弦波为“调制波”(ModulationWave),而以N倍于调制波频率的三角波为“载波”(CarrierWave)的一种逆变器控制技术。SPWM技术的控制的特点是原理简单、通用性强、控制方便、调节灵活,能有效降低谐波分量、稳定输......
  • 基于simulink的交流电机SPWM调速系统建模与动态仿真
    1.算法描述       正弦脉宽调制技术SPWM(SinePulseWidthModulation)是用所期望的正弦波为“调制波”(ModulationWave),而以N倍于调制波频率的三角波为“载波”(CarrierWave)的一种逆变器控制技术。SPWM技术的控制的特点是原理简单、通用性强、控制方便、调节灵活,能有效降低......
  • Approval action add link to model driven record
    Whenyouaredecidingifyouwanttoapproveanaction,youprobablywantmoreinformationthenadescription.LuckilywecanaddalinktoourApprovalrequest!Thisisafollowuponmy previouspost whereIshowedhowtotriggeranApprovalinsideaBu......