队列(Queuce)的编程实现

C语言之队列编程 #ifndef __QU_LIST_H__ #define __QU_LIST_H__ #include "error.h" #define TRUE 1 #define FLASE 0 typedef struct _node { int data; struct _node *next; }Node; typedef struct _Qu_list { Node *front; 阅读详情

抽象数据类型队列的定义

这里写图片描述

队列的顺序表示和实现

这里写图片描述

队列的链式表示和实现这里写图片描述

进队出队

这里写图片描述

程序实现

/*  顺序队列的实现 */
#include <stdio.h>
#include <stdlib.h>

#define MAX_SIZE  10

enum return_result {FULL_OK,FULL_NO,EMPTY_OK,EMPTY_NO,PUSH_OK};

struct quece_data
{
    int quece[MAX_SIZE];
    int top;
    int buttom;
};

typedef struct quece_data Quece;

void create_quece(Quece ** quece)
{

    *quece = (Quece *)malloc(sizeof(Quece));
}

void init_quece(Quece * quece)
{
    //顶进队,底出队
    quece->top = -1;
    quece->buttom = -1;
}

int is_full(Quece * quece)
{
    //队列满两种情况
    //1. 底没有移动
    if(quece->buttom == -1)
    {
        if(quece->top == MAX_SIZE - 1)
            return  FULL_OK;
    }
    //2. 底变化时
    else if(((quece->top - quece->buttom) + 1) == MAX_SIZE)
    {
        return FULL_OK;
    }

    return FULL_NO;
}

int is_empty(Quece * quece)
{
    if(quece->top <= quece->buttom)
    {
        return EMPTY_OK;
    }

    return EMPTY_NO;
}

int push_quece(Quece * quece,int num)
{
    int i;
    if(is_full(quece) == FULL_OK)
    {
        printf("the quece is FULL\n");
        exit(FULL_OK);
    }

    if(quece->top <= MAX_SIZE - 1)
    {
        quece->top++;
        quece->quece[quece->top] = num;
    }
    else
    {
        //把buttom移到底
        for(i = quece->buttom; i <= quece->top; i++)
        {
            quece->quece[i - quece->buttom] = quece->quece[i];
        }
        quece->top = quece->top - quece->buttom + 1;
        quece->buttom = 0;
        quece->top++;
        quece->quece[quece->top] = num;
    }
    return PUSH_OK;
}

int pop_quece(Quece * quece)
{
    if (is_empty(quece) == EMPTY_OK )
    {
        printf("the quece is empty");
        exit(EMPTY_OK);
    }

    return (quece->quece[++(quece->buttom)]);
}

int main()
{
    Quece * quece;
    int i;
    int ret;

    create_quece(&quece);

    init_quece(quece);

    for(i = 0; i< 10; i++)
    {
        if(push_quece(quece,i+1) == PUSH_OK)
        {
            printf("push num:\t %d \n",i + 1);
        }
    }

    for(i = 0; i < 10; i++)
    {
        printf("pop num:\t %d \n",pop_quece(quece));
    }

    /*for(i = 0; i< 10; i++)
    {
        if(push_quece(quece,i+1) == PUSH_OK)
        {
            printf("push num:\t %d \n",i + 1);
        }
    }*/
    return 0;
}
/* 队列的链式实现 */
#include <stdio.h>
#include <stdlib.h>

enum return_result {FULL_OK,FULL_NO,EMPTY_OK,EMPTY_NO,PUSH_OK};

struct quece_data
{
    int quece;
    struct quece_data * next;
};

typedef struct quece_data   Quece;
typedef struct quece_data * Link;

void create_quece(Quece ** quece)
{

    *quece = (Quece *)malloc(sizeof(Quece));
}

void init_quece(Quece * quece)
{
    quece->quece = -1;
}

int is_empty(Quece * quece)
{
    if(quece->next == NULL)
    {
        return EMPTY_OK;
    }

    return EMPTY_NO;
}

int push_quece(Quece * quece,Link new_node,int num)
{
    new_node->quece = num;
    Link  temp = quece;

    while( temp->next != NULL)
    {
        temp = temp->next;
    }

    new_node->next = NULL;
    temp->next = new_node;

    return PUSH_OK;
}

int pop_quece(Quece * quece)
{
    Link temp = quece->next;
    int  tem;
    if (is_empty(quece) == EMPTY_OK )
    {
        printf("the quece is empty");
        exit(EMPTY_OK);
    }

    if(temp != NULL)
    {
        tem = temp->quece;

        quece->next = temp->next;

        free(temp);
    }
    return tem;
}

int main()
{
    Quece * quece;
    Quece * new_node;
    int i;
    int ret;

    create_quece(&quece);

    init_quece(quece);

    for(i = 0; i< 10; i++)
    {
        create_quece(&new_node);
        if(push_quece(quece,new_node,i + 1) == PUSH_OK)
        {
            printf("push num:\t %d \n",i + 1);
        }
    }

    for(i = 0; i < 10; i++)
    {
        printf("pop num:\t %d \n",pop_quece(quece));
    }

    return 0;
}
直击高频编程考点:队列知识及经典算法题总结 队列知识及编程练习总结:背景知识 +队列的应用(在Spring中的应用+在其他框架中的应用+在实际开发中的应用)+相关编程练习(用队列实现栈+使用栈实现队列+设计循环队列+滑动窗口最大值 +课程表+队列的最大值+用数组实现一个队列) 阅读详情

相关推荐

TouchGFX使用教程(三)

TouchGFX使用教程(三)界面事件控件修改方法图片等资源放置位置 界面事件 控件修改方法 图片等资源放置位置

yuanzhan11的专栏 6972

编程基础 - 队列 (Queue)

本文意指简明扼要的描述队列,并用C++从零到有的实现栈。 需要一定的数据结构与程序语言的基础,尤其是要了解什么是顺序表。

DarkRabbit的专栏 1353

【一张图系列】别再混淆了!5分钟搞懂ERP、MES、PLC的职责边界与数据流》

《ERP、MES、PLC系统边界与协作解析》一文清晰阐述了制造业三大核心系统的角色分工与数据流转。文章将ERP比作企业"大脑"负责战略规划,MES作为车间"指挥官"负责执行调度,PLC则是设备"士兵"执行具体操作。通过一张架构图展示了从计划层到控制层的完整信息流:蓝色箭头表示指令下行(ERP→MES→PLC),橙色箭头代表数据上行反馈(PLC→MES→ERP)。文章强调理清系统边界对数字化转型、部门协作和项目实施的关键作用,并预告下期将深入解析ME

「东哥说MES」 专注于MES制造执行系统,为你拆解核心架构、功能模块及与ERP/PLC的集成逻辑。提供从入门到精通的系列干货、精选行业报告与实用工具,构建你的数字化知识体系,关注我,用实战经验照亮你的数字化之路。 973

【数据结构】C语言队列(详解)

C语言实现队列,详细解读

weixin_65186652的博客 9559

告别混乱代码!在Arduino IDE中管理多文件项目的5个必备技巧

本文分享了在Arduino IDE中管理多文件项目的5个必备技巧,帮助开发者告别混乱代码。通过代码分割和模块化设计,提升编译效率、降低内存占用,并实现功能解耦。重点介绍了头文件设计、CPP文件实现、调试技巧和工业级目录结构,让你的Arduino项目像乐高积木一样清晰易维护。

fun88的博客 361

手把手教你用Simulink搭建单相全桥逆变器(附单电流闭环控制仿真文件)

本文详细介绍了如何在Simulink中搭建单相全桥逆变器并实现单电流闭环控制。从功率主电路建模、核心器件参数设置,到控制系统的PI调节与前馈补偿,提供了完整的仿真步骤与调试技巧。文章旨在通过动手实践,帮助读者跨越理论与仿真的鸿沟,深入理解电力电子闭环控制的核心原理。

d6e7f8g9h的博客 316

数据结构——队列编程实现

定义:队列简称队,是一种运算受限的线性表。 把进行插入的一端叫做队尾(rear) 把进行删除的一端叫做对头(front) 插入称为进队或者入队 删除称为出队或者离队 顺序队的结构体定义: #define Maxsize 10 typedef struct{ ElemType data[Maxsize]; int front,rear; }sqQueue; 顺序队的四要素:初始时:front=rear=-1; 队空条件:front=rear; 队满条件:rear=Maxsize-1 元素e进队:rea

qq_45362263的博客 487

Docker:快速部署 Temporal 工作流引擎的技术指南

Temporal是一个开源的分布式工作流引擎,适用于复杂业务流程(如订单处理、支付流程等),提供状态持久化、自动重试、多语言SDK支持等特性。部署简单,支持Docker Compose,包含核心服务、Web UI及数据库。以TypeScript为例,开发者可快速编写工作流(如订单处理)和Worker,通过CLI或SDK启动和管理。Temporal简化了分布式系统的可靠性设计,适合电商、自动化任务等场景。

木头 642

队列(C语言实现)

1.1 定义:队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出 FIFO(First In First Out)入队列:进行插入操作的一端称为队尾出队列:进行删除操作的一端称为队头int front;int rear;}QueNode;int size;}Queue双端队列是指允许两端都可以进行入队和出队操作的队列。其元素的逻辑结构仍是线性结构。将队列的两端称为前端和后端,两端都可以入队和出队。

m0_59311392的博客 4255

SwinTransformer 改进:SSPCAB模块(2024最新改进方法)

SSPCAB(Spatial Pyramid Pooling with Channel Attention Block)是2024年提出的一种新型神经网络架构改进方法,专注于在保持高精度的同时显著降低计算复杂度和参数量。该方法通过创新的空间金字塔池化与通道注意力机制的结合,实现了网络结构的紧凑化和运算效率的大幅提升。核心创新点1. 混合空间金字塔池化(Hybrid Spatial Pyramid Pooling, HSPP)多尺度动态核池化:根据输入特征图尺寸动态调整池化核大小和步长交叉级联结构。

Henry的博客 1309

基于STM32、HAL库的CH9434总线转UART驱动程序设计

CH9434是一款USB转4串口控制芯片,可以将单个USB接口扩展为4个独立的串口(UART)。支持多种数据格式(数据位5-8,停止位1/1.5/2,奇偶校验或无校验)// 读取接收到的数据。// 重新启动接收中断。// 向所有4个串口发送数据。// UART初始化函数示例(USART1)// 其他UART初始化函数类似...// 初始化CH9434。// 初始化UART1。// 初始化UART2。// 初始化UART3。// 初始化UART4。工作电压:3.3V/5V兼容。

corlin6688的博客 990

队列(数据结构)——C语言

还有实现各种函数的申明。断言传的指针非空,以及判断队列非空,出队要考虑两种情况,如果队列中只有一个节点,即头结点和尾结点指向同一个,直接释放掉头结点,然后头结点和尾结点置为空就行了,如果不止一个节点,则删除头结点指向那个结点,头结点指向下一个结点,(和单链表的头插一模一样),最后元素个数——。断言传的指针非空,申请一个节点,判断队是否为空,如果为空直接将新的结点,赋给头结点和尾结点,如果不为空,则在尾结点后面插入,(很前面单链表尾插一样,只是这里已经有尾结点了,不需要遍历单链表),最后元素个数++;

2401_83456040的博客 3097

Python数据分析师必备:OpenClaw开启Pandas清洗脚本自动生成新时代

本文介绍了OpenClaw这一AI智能体框架如何帮助Python数据分析师高效完成数据清洗工作。OpenClaw通过自然语言交互理解用户需求,自动生成Pandas清洗脚本,显著提升了数据清洗效率,降低了技术门槛。文章详细阐述了OpenClaw的工作原理、实战应用步骤及其在电商、金融、医疗等行业中的成功案例。相比传统手动编写脚本方式,OpenClaw能快速生成规范准确的清洗代码,使数据分析师能更专注于业务洞察。该工具为数据驱动决策提供了可靠支持,是数据分析领域的重要创新。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 230

队列详解(C语言实现)

文章目录写在前面1 队列的定义2 队列的初始化3 数据入队列4 数据出队列5 获取队头元素6 获取队尾元素7 获取队列元素个数8 判断队列是否为空8 队列的销毁 写在前面 本片文章详细介绍了另外两种存储逻辑关系为 “一对一” 的数据结构——栈和队列中的队列,并使用C语言实现链队列。 队列C语言实现源码:队列源码 以队列在存储数据时具有特殊的顺序规则: 队列:使用队列存储数据,遵循 “先进先出” 的原则,即最先进队列的数据最先出队列。队列也可以分为顺序队列(基于数组实现)和链队列(基于链表实现)。 队列的实

m0_50655389的博客 1601

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

C语言数据结构——队列

在计算机科学领域,数据结构是组织和存储数据的一种方式,它允许我们以有效的方式对数据进行访问和修改。今天,我们将探讨一种基础但极其重要的数据结构——队列。通过学习,我们不仅会了解队列的理论基础,还会深入其实现方式,探讨其应用场景,并通过解决一个实际问题来巩固我们的理解。

wxk2227814847的博客 1510

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

数据结构---队列(代码实现)

int rear;* }SqQueue;*设立一个队首指针front,一个队尾指针rear,分别指向队首和队尾元素。*初始化:front=rear=0.入队:将新元素插入到rear指向的位置,然后在加1.出队:删除front指向的元素,然后加1,并返回删除的元素队列为空:front=rear。队列为满:rear=MAX_QUEUE_SIZE-1或front=rear*在非空队列里,队首指针始终指向队头元素,而队尾指针始终指向队尾元素的下一个位置。

jie18894575860的博客 594

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

C#队列深度剖析:解锁高效编程的FIFO密码

本文介绍了C#中队列(Queue)的基本概念和常用操作。队列是一种先进先出(FIFO)的数据结构,通过System.Collections.Generic命名空间下的Queue<T>泛型类实现。文章详细讲解了队列的创建、入队(Enqueue)、出队(Dequeue)、查看队头元素(Peek)、判断元素是否存在(Contains)以及清空队列(Clear)等核心操作,并提供了相应的代码示例。这些操作使队列能够高效地管理数据,适用于需要按顺序处理元素的场景。

故事不长丨的博客 1320

C++ 队列(queue) 详解:从定义到应用(原名<C++>queue(队列))

摘要:本文介绍了C++中队列(queue)的基本概念和使用方法。队列是一种先进先出(FIFO)的数据结构,通过<queue>头文件实现。文章内容包括队列的定义、初始化方式(支持deque和list容器)、常用成员函数(如push、pop、front、back等)的功能说明,并提供了具体的使用示例代码。最后通过一个完整示例演示了如何创建队列、添加/删除元素以及遍历队列,帮助读者理解队列在实际编程中的应用场景。

weixin_51710308的博客 1万+

c语言队列编程,C语言 队列(链式队列)

链式队列----用链表实现,链式队列就是一个操作受限的单向链表,如果读者了解单向链表的建立过程,那理解链式队列就很容易了,先回顾一下单向链表的建立过程(不熟悉单向链表的可以先看看另一片随笔,再回来看链式队列理解起来更容易☺链表(单向链表的建立、删除、插入、打印)https://www.linuxidc.com/Linux/2019-08/159766.htm单向链表单向链表节点的组成部分1 str...

weixin_42508903的博客 386

C语言实现队列

文章目录前言一、队列定义二、队列实现1.队列的成员变量2.队列的初始化3.数据入队列4.数据出队列5.返回队头队尾元素6.检查队列是否为空7.队列的销毁总结 前言 一、队列定义 队列(Queue)。队列简称队。是一种操作受限的线性表,只允许在表的一端进行插入,而在表的另一端进行删除。向队列中插入元素称为入队或进队;删除元素称为出队或离队。其操作特性为先进先出(First In First Out,FIFO),并且只允许在队尾进,队头出。 二、队列实现 1.队列的成员变量 typedef int QDataT

bitezz的博客 1万+

队列的简单实现(C语言)

题目: 1、建立循环队列,并实现元素(4,5,7,6,8)入队,实现循环队列的建立,和入队的基本操作; 2、实现元素(4,5,7,6,8)依次出队并输出。 #include&amp;lt;iostream&amp;gt; using namespace std; #define MaxSize 100 typedef struct{ int *base; int front; int rear; }Seq;...

Zhangguohao666的博客 1335

Linux系统编程之消息队列

消息队列是消息的链接表,Unix的通信机制之一,可以理解为是一个存放消息(数据)容器。将消息写入消息队列,然后再从消息队列中取消息,一般来说是先进先出的顺序。可以解决两个进程的读写速度不同(处理数据速度不同),系统耦合等问题,而且消息队列里的消息哪怕进程崩溃了也不会消失。 最简单的消息内存的使用流程 ①ftok函数生成键值 ②msgget函数创建消息队列 ③msgsnd函数往消息队列发送消息 ④msgrcv函数从消息队列读取消息 ⑤msgctl函数进行删除消息队列 1.ftok函数生成键值 每一个消息队列都

hyw15019042884的博客 405

【数据结构】队列的实现及应用和循环队列的实现【完整版】

讲解队列的概念和实现,队列的应用、队列的几道经典编程题,队列的概念选择题【完整版】

m0_74044018的博客 2285

【数据结构】队列的实现

E poll();E peek();//定义链表的头,尾E val;Node next;/*** /入队列:链表的尾插*/@Override//产生新节点//如果链表为空,此时新节点就是头和尾//如果链表不为空,此时size++;/*** /出队列:出的是链表中的头结点*/@Overridesize--;return val;/*** 查看队首元素*/@Override/*** 重写ToString方法*/@Override。

qq_48479056的博客 1032

【数据结构】队列的实现及循环队列的实现详解(c语言)

通过下图可以看到定义了两个结构体,第一个结构就是我们常用的节点,而第二结构体中的成员可以理解为head指针是用来指向队头的tail指针是用来指向队尾的size用来反应队列中的元素个数,看到这肯定会有一些疑问,为什么要这样定义呢,这样定义的好处是什么1.这样定义的好处上文我们说了实现队列要用尾插头删来实现当入队的时候尾插需要找到队列的尾,这样就需要把队列遍历一遍,此时入队列的时间复杂度为O(n)而我们使用tail指针指向尾,在尾插的时候就可以不用再遍历队列了,这时入队列的时。

m0_72532428的博客 3785

队列的介绍与代码实现

跟着B站尚硅谷老韩的数据结构进行学习,所做的笔记。!我会持续更新。👊👊本文讲的是队列的介绍与代码实现等等,队列是遵循先进先出,相信读完这篇文章,对队列会有初步的概念。● 队列是一个有序列表,可以用数组或是链表来实现。遵循先入先出的原则。● 即:先存入队列的数据,要先取出。后存入的要后取出!!❤️❤️❤️❤️❤️。

小辉的编程学习记录 450
上一篇: 栈(Stack)的编程实现
下一篇: Linux下进程内存空间组成/进程的内存映像
fly__chen
博客等级 码龄10年 96粉丝 82原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值