首页 > 其他分享 >队列

队列

时间:2023-04-20 22:45:57浏览次数:31  
标签:return 队列 sqqueue int printf front data

队列:也是一个线性表(即包括顺序队列和链式队列),先进先出,但限制在两端进行插入和删除

   队尾:进行存入操作的一端

   队头:进行删除操作的一端

顺序队列:

//sqqueue.h
#ifndef _SQ_QUEUE_H_H
#define _SQ_QUEUE_H_H

#define N 6

typedef int data_t;
typedef struct{
    data_t data[N];
    int front;//指向头
    int rear;//指向尾的后一个    
}sqqueue;

sqqueue *sqqueue_create();
int sqqueue_free(sqqueue *q);
int sqqueue_in(sqqueue *q, data_t value);
data_t sqqueue_out(sqqueue *q);
int sqqueue_empty(sqqueue *q);
int sqqueue_full(sqqueue *q);
int sqqueue_clear(sqqueue *q);
void sqqueue_show(sqqueue *q);


#endif
//sqqueue.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "sqqueue.h"

sqqueue *sqqueue_create()
{
    sqqueue *q = (sqqueue *)malloc(sizeof(sqqueue));
    if(q == NULL){
        printf("malloc failed!\n");
        return NULL;
    }
    memset(q->data, 0, sizeof(q->data));
    
    q->front = 0;
    q->rear = 0;
    
    return q;
}
int sqqueue_free(sqqueue *q)
{
    if(q == NULL){
        printf("queue is NULL\n");
        return -1;
    }
    free(q);
}

/*
*ret @ 1-empty
*/
int sqqueue_empty(sqqueue *q)
{
    if(q->front == q->rear){
        return 1;
    }else{
        return 0;
    }
}
/*
*ret @ 1-full
*/
int sqqueue_full(sqqueue *q)
{
    if((q->rear+1)%N == q->front){
        return 1;
    }else{
        return 0;
    }        
}

int sqqueue_in(sqqueue *q, data_t value)
{
    if(sqqueue_full(q)){
        printf("queue is full,not in\n");
        return -1;
    }
    q->data[q->rear] = value;
    q->rear = (q->rear+1)%N;

    printf("\n");
    return 0;
}
data_t sqqueue_out(sqqueue *q)
{
    if(sqqueue_empty(q)){
        printf("queue is empty,not out\n");
        return -1;
    }
    data_t data = q->data[q->front];
    q->front = (q->front+1)%N;
    return data;
}

int sqqueue_clear(sqqueue *q)
{
    return 0;
}
void sqqueue_show(sqqueue *q)
{
    while(!sqqueue_empty(q)){
        printf("%d\t",sqqueue_out(q));
    }
    printf("\n");    
}
//sqqueue_test.c
#include <stdio.h>
#include "sqqueue.h"

int main()
{
    sqqueue *q = sqqueue_create();
    sqqueue_in(q, 10);
    sqqueue_in(q, 20);
    sqqueue_in(q, 30);

    

    sqqueue_show(q);
    sqqueue_free(q);
    return 0;
}

 

标签:return,队列,sqqueue,int,printf,front,data
From: https://www.cnblogs.com/zj-studyrecoding/p/17338611.html

相关文章

  • 队列和栈的简单实现
    简单实现2个数据结构,来帮助我们更好的处理数据基本队列(Queue)是一种先进先出(FIFO)的数据结构,通常用于按照顺序处理任务或事件。在前端中,队列可以用于实现异步函数的调用、消息通知、动画播放等场景。队列还可以和数组结合使用,通过push()方法将元素添加到队列尾部,shift()方法将......
  • 双端队列数据结构
    双端队列是一种数据结构,也被称为deque或double-endedqueue。它类似于队列,但它允许从队列的两端添加或删除元素,而不仅仅是队列的一端。双端队列可以用数组或链表实现。如果使用数组实现,它可以使用循环数组的方式,使得在头尾进行插入和删除的操作可以在常数时间内完成。如果使用链......
  • C# 获取打印机队列的打印任务
    //引入命名空间:usingSystem.Runtime.InteropServices;[DllImport("winspool.drv",CharSet=CharSet.Auto,SetLastError=true)]privatestaticexternboolSetDefaultPrinter(stringprinterName);[DllImport("winspool.drv&quo......
  • w4-1 队列安排
     方法一:#include<iostream>#include<queue>#include<vector>usingnamespacestd;//究极愚蠢queue+vector模拟tleintmain(){queue<int>a;intN,M,judge,k,x;cin>>N;a.push(0);a.push(1);for(inti=2;i<......
  • RabbitMQ队列和交换机的相关知识点
    1、关于交换机和队列的autodelete属性交换机的autodelete属性作用:当属性值设置为true,那么当所有的队列断开于交换机的绑定,那么交换机会自动删除队列的autodelete属性作用:自动删除队列和普通队列在使用上没有什么区别,唯一的区别是,当所有的相关消费者断开连接时,队列将会被删除2......
  • 消息队列的介绍和对比
    一、消息队列的介绍1.1什么是消息队列消息(Message)是指在应用间传送的数据。消息可以非常简单,比如只包含文本字符串,也可以更复杂,可能包含嵌入对象。   消息队列(MessageQueue)是一种应用间的通信方式,是在消息的传输过程中保存消息的容器。消息队列管理器在将消息从它的源传递......
  • P1160 队列安排-双链表
    碰到了一道题发现忘了数组模拟双链表怎么实现了,顺便复习了一下。然后解决问题。双链表模板题:实现一个双链表,双链表初始为空,支持 5 种操作:在最左侧插入一个数;在最右侧插入一个数;将第 k 个插入的数删除;在第 k 个插入的数左侧插入一个数;在第 k 个插入的数右侧插入一......
  • 源码共读|yocto-queue 队列 链表
    前言Yocto-queue是一种允许高效存储和检索数据的数据结构。它是一种队列类型,是一个元素集合,其中的项被添加到一端并从另一端移除。它被设计用来操作数据量很大的数组,在你需要使用大量的Array.push、Array.shift操作时,Yocto-queue有更好的性能表现。仓库地址:sindresorhus/yo......
  • 消息队列简单了解
    消息队列简单了解这消息队列虽然用起来好像很简单,但概念乱七八糟的,还是记一下吧。作用消息队列(MessageQueue,下称MQ)的三大作用:解耦、异步、削峰;解耦假设现在的一个应用包含多个微服务,其中的A服务处理完一个请求后,需要将数据发送给B、C、D服务,原本的做法是在代码中硬编......
  • 体验Rabbitmq强大的【优先级队列】之轻松面对现实业务场景
         说到队列的话,大家一定不会陌生,但是扯到优先级队列的话,还是有一部分同学是不清楚的,可能是不知道怎么去实现吧,其实呢,,,这东西已经烂大街了。。。很简单,用“堆”去实现的,在我们系统中有一个订单催付的场景,我们客户的客户在tmall,taobao下的订单,t......