首页 > 其他分享 >队列

队列

时间:2023-06-07 12:23:19浏览次数:59  
标签:QNode 队列 next int que front return

1、定义:先进先出的线性表,就像排队,它只允许在队列一端插入元素,在另一端删除元素(插入一端队尾,删除一端队头)

2、典型例子:作业排队

3、基本功能

  1、宏定义结构体定义

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

#define ERROR 0;
#define OK 1;

typedef struct Node
{
    int data;
    struct Node *next;
}QNode;

typedef struct pointer
{
    QNode *front;//队首指针,不存放队列元素
    QNode *rear;//队尾指针,存放队尾数据元素
}Qpointer;//就只是指针

  2、初始化

// 队列的初始化
void Init_Q(Qpointer *Q)
{
    QNode * que = (QNode *)malloc(sizeof(QNode));//队首结点队尾结点指向同一个元素,元素就是那个结构体
    que ->next = NULL;
    Q->front = que;
    Q->rear = que;
}

  3、判空

//判断队列是否为空
int isEmpty(Qpointer *Q)
{
    if(Q->front == Q->rear)//首尾元素相同就为空,不是环形的,不会插满的
    {
        return 1;
    }
    return 0;
}

  4、插入数据元素

//插入数据元素,插入成功返回1,失败返回0
int PUsh_Q(Qpointer *Q,int e)
{
    QNode * que;
    que = (QNode*)malloc(sizeof(QNode));
    if(!que)
    {
        return 0;
    }
    que->data = e;
    que->next = NULL;
    Q->rear->next = que;//将节点插入队列尾(有头结点)
    Q->rear = que;//调整队尾指针(保持队尾指针在队尾)
    return 0;
}

  5、删除数据元素

//删除数据元素,删除成功返回1,失败返回0
int Pop_Q(Qpointer *Q,int *e)
{
    QNode *que;
    if(isEmpty(Q))
    {
        return 0;
    }
    que = Q->front->next;//有头结点嘛
    *e = que->data;
    Q->front->next = que->next;

    if(Q->rear == que)//如果当前删除节点是最后一个人,就把队列设为空
    {
        Q->rear = Q->front;
    }
    free(que);
    return 1;
    
}

  6、主函数

int main()
{
    Qpointer *Q;
    int x;
    Q = (Qpointer *)malloc(sizeof(Qpointer));
    Init_Q(Q);
    printf("please input positive integers:");
    scanf("%d",&x);
    while(x>0)
    {
        PUsh_Q(Q,x);
        scanf("%d",&x);
    }
    //
    QNode *p = Q->front->next;
    if(!p)
    {
        return 0;
    }
    printf("queue element:\n");
    while(p)
    {
        printf("%d ",p->data);
        p = p->next;
    }
    printf("\n");
    //
    printf("delete queue:\n");
    while(Pop_Q(Q,&x))
    {
        printf("%d ",x);
    }
    printf("\n");
    //
    p = Q->front;//指向头结点啊
    free(p);
    free(Q);

    return 0;
    
}

  

 

标签:QNode,队列,next,int,que,front,return
From: https://www.cnblogs.com/gunancheng/p/17458920.html

相关文章

  • SignalR+Hangfire 实现后台任务队列和实时通讯
    SignalR+Hangfire实现后台任务队列和实时通讯1.简介:SignalR是一个.NET的开源框架,SignalR可使用WebSocket,ServerSentEvents和LongPolling作为底层传输方式实现服务端和客户端的实时数据交互。Hangfire是一个.NET的开源后台任务框架提供统一的编程模型,以可靠的方式处理......
  • 每日记录(数据结构 第 三 章 栈与队列 二 )
    队列队列是一种先进先出(FIFO)(FIFO)(FIFO)的线性表.在表一端插入,在另一端删除。0.队列的基本概念定义只能在表的一端(队尾)进行插入,在另一端(队头)进行删除运算的线性表逻辑结构与线性表相同,仍为一对一关系存储结构用顺序队列或链队存储均可运算规则先进先出(FIFO)实现方式......
  • 每日记录(数据结构 第 三 章 栈与队列 )
     一、栈栈(stack)(lastinfirstout)(stack)(last\infirst\out)(stack)(lastinfirstout)后进先出 栈的基本概念定义只能在表的一端(栈顶)进行插入和删除运算的线性表逻辑结构与线性表相同,仍为一对一关系存储结构用顺序栈或链栈存储均可,但以顺序栈更......
  • Redis系列14:使用List实现消息队列
    Redis系列1:深刻理解高性能Redis的本质Redis系列2:数据持久化提高可用性Redis系列3:高可用之主从架构Redis系列4:高可用之Sentinel(哨兵模式)Redis系列5:深入分析Cluster集群模式追求性能极致:Redis6.0的多线程模型追求性能极致:客户端缓存带来的革命Redis系列8:Bitmap实现亿万级......
  • 单调队列
    写法首先要有一个双端队列:structMy_dequeue{inthh=1,tt=0,q[N];voidclear(){hh=1;tt=0;}voidpush_front(intk){q[--hh]=k;}voidpush_back(intk){q[++tt]=k;}voidpop_front(){hh++;}voidpop_back(){tt--;}intfront(){returnq[hh];......
  • jQuery队列控制方法详解queue()/dequeue()/clearQueue()
    jQuery遍历-jQuery.queue()方法:[url]http://www.w3school.com.cn/jquery/data_jquery_queue.asp[/url]jQuery核心中,有一组队列控制方法,这组方法由queue()/dequeue()/clearQueue()三个方法组成,它对需要连续按序执行的函数的控制可以说是简明自如,......
  • 3.两种模式与交换机和队列的属性
    5.两种模式5.1.Confirm介绍消息的confirm确认机制,是指生产者投递消息后,到达了消息服务器Broker里面的exchange交换机,则会给生产者一个应答,生产者接收到应答,用来确定这条消息是否正常的发送到Broker的exchange中,这也是消息可靠性投递的重要保障5.2.Confirm使用5.2.1.环境搭建......
  • Linux 内核等待队列
    Linux内核中的等待队列是一种延时机制,其用于当前进程需要等待某些资源而进入一种sleep状态,当等待条件为真时,进程被唤醒,继续执行。显然,这里涉及三个方面,即,一是等待时当前进程处理,二是进程等待时所关注的资源处理,三时进程何时被唤醒继续执行。所以,我们这里需要几个数据结构,主要描......
  • 2.交换机与特殊队列
    2.交换机2.1.类型1.FanoutExchange(扇形)2.DirectExchange(直连)3.TopicExchange(主题)4.HeadersExchange(头部)以下类型的交换机使用都会使用到这两个步骤①选择依赖②修改启动类2.2.FanoutExchange2.2.1.介绍FanoutExchange:扇形交换机投递到所有绑定的队列,不需要路由键,不......
  • 初级数据结构--栈、队列
    栈后端(进栈)插入,后端(出栈)删除顺序存储,用静态数组实现,需要记录栈顶指针,栈的增删操作只能操作栈顶的护数据。两种初始化方式top=-1top=0共享栈两个栈共用一片内存空间,两个栈从两边向中间增长初始化1个栈顶指针初始为-1;另一个栈顶指针初始为Maxsize栈满条件 top0+1==top1队列后端(......