C/C++队列操作

2023-11-16

1.链队结构

typedef struct queuenode
{
    int data;
    struct queuenode *next;
}Queue;

typedef struct
{
    Queue *fronts,*rear;
}linkqueue;

在这里插入图片描述
2.入队操作

//进队函数
void inQueue(linkqueue *q)
{
    int x;
    Queue *p;
    p = new Queue;
    printf("\n\t\t请键入一个整数:");
    scanf("%d",&x);
    p->data = x;
    p->next = NULL;
    if(q->fronts == NULL)
        q->fronts = p;
    else
        q->rear->next = p;
    q->rear = p;
    if(p)
        printf("\n\t\t%d进队成功!",x);
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3.出队操作

//出队函数
int outQueue(linkqueue *q,int &x)
{
    Queue *p;
    if(q->fronts == NULL)
    {
        printf("\n\t\t队空无法出队!");
        return 0;
    }
    else
    {
        p = q->fronts;
        x = p->data;
        q->fronts = p->next;
        if(q->fronts == NULL)
            q->rear = NULL;
        delete p;
        printf("\n\t\t%d出队成功!",x);
        return 1;
    }
}

在这里插入图片描述
4.读队首

//读取队列首元素的函数
void read_quequ_top(linkqueue *q)
{
    if(q == NULL || q->fronts == NULL)
        printf("\n\t\t队列为空!");
    else
        printf("\n\t\t队首元素为:%4d\n",q->fronts->data);
}

5.显示队列

//显示队列
void show_queue(linkqueue *q)
{
    Queue *p;
    p = q->fronts;
    if(p == NULL)
        printf("\n\t\t队列为空!");
    else
    {
        printf("\n\t\t队列中的元素为:");
        while(p != NULL)
        {
            printf("%6d",p->data);
            p = p->next;
        }
        printf("\n");
    }
}

在这里插入图片描述
6.双向队列
在这里插入图片描述

//双队列函数
#define QueueMax 20
int queues[QueueMax];
int fronts = -1;
int rear = -1;
void inQueue(int val)       //输入队列数据
{
    rear = (rear++)%QueueMax;
    rear++;
    if(fronts == rear)
        printf("\n\t\t队列已满!");
    else
        queues[rear] = val;
}
int outQueue_rear()      //从队尾输出元素
{
    int t;
    if(fronts == rear)
        return -1;
    t = queues[rear--];
    if(rear < 0 && fronts != -1)
        rear = QueueMax-1;
    return t;
}
int outQueue_front()       //从队首输出元素
{
    int t;
    if(fronts == rear)
        return -1;
    t = queues[++fronts];
    if(fronts == QueueMax)
        fronts = 0;
    return t;
}
//双向队列菜单
void DQ()
{
    int choice;
    int out[5];
    int in[5] ={5,4,3,2,1};     //队列预先存入五个数据
    int t,pos=0,i;
    for(i = 0;i < 5;i++)
    {
        inQueue(in[i]);
    }
    printf("\n\t\t初始化数据顺序为:");
    for(i = 0;i < 5;i++)
        printf("[%d]",in[i]);
    printf("\n\t\t   1--------从头出队          2-------从尾出队");
    while(fronts != rear)
    {
        printf("\n\t\t请输入选择:");
        scanf("%d",&choice);
        switch(choice)
        {
        case 1:
            t = outQueue_front();
            out[pos++] = t;
            break;
        case 2:
            t = outQueue_rear();
            out[pos++] = t;
            break;
        }
    }
    printf("\n\t\t数据输出的顺序为:");
    for(i = 0;i < 5;i++)
        printf("[%d]",out[i]);
    printf("\n");

}

7.圆形队列
在这里插入图片描述

//入队时
q.rear = (q.rear+1)%MAXLEN;
q.front = (q.front+1)%MAXLEN;

8.主函数

void queue_main()
{
    linkqueue *q;
    q = new linkqueue;
    int val,i = 1;
    char w;
    int choice;
    q->fronts = q->rear = NULL;
    while(1)
    {
        printf("\n");
        printf("\n\t\t***************************************************");
        printf("\n\t\t*                   队列子系统                    *");
        printf("\n\t\t***************************************************");
        printf("\n\t\t*                 1------进  队                   *");
        printf("\n\t\t*                 2------出  队                   *");
        printf("\n\t\t*                 3------读队首元素               *");
        printf("\n\t\t*                 4------显  示                   *");
        printf("\n\t\t*                 5------双队列                   *");
        printf("\n\t\t*                 0------返  回                   *");
        printf("\n\t\t***************************************************");
        printf("\n\t\t请选择菜单号:");
        scanf("%d",&choice);
        switch(choice)
        {
            case 1:
                inQueue(q);
                break;
            case 2:
                if(outQueue(q,val) == 0)
                    printf("\n\t\t队列为空!");
                else
                    printf("\n\t\t出队元素为:%4d",val);
                break;
            case 3:
                read_quequ_top(q);
                break;
            case 4:
                show_queue(q);
                break;
            case 5:
                DQ();
                break;
            case 0:
                i = 0;
                break;
            default:
                printf("\n\t\t输入错误!请重新输入!");
                break;
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C/C++队列操作 的相关文章

  • 13-并查集

    数据结构并查集常用于将两个集合并起来以及查询两个元素是否隶属于同一个集合 相对于传统我们的求法 并查集算法极大减少了查询的工作量 提高了效率 合并集合 假设我们有两个集合 常规情况下合并两个集合就是将它们混合起来 但是在计算机中 如果我们想
  • idea 配置详解 (二) 之editor 详解

    3 File Settings Editor 3 1 File Settings Editor General 3 1 1 File Settings Editor General Auto Import 3 1 2 File Settin
  • error: ‘connect‘ was not declared in this scope connect(timer, SIGNAL(timeout()), this, SLOT(up

    错误 error connect was not declared in this scope connect timer SIGNAL timeout this SLOT updateslot 解决方法 类要继承 QObject类
  • 015.PyQt5_QWidget_坐标系统&大小位置

    控件的坐标系统 左上角为坐标原点 向右为x轴正方向 向下为y轴正方向 子控件位置是参照父控件 顶层控件则参照桌面 大小位置 先了解一下控件的结构 没有父控件的控件 称之为窗口 一般会被包装成一个框架 相关API 获取大小和位置的API AP

随机推荐

  • linux怎么查看端口被哪个进程占用

    两种查看方法 例如80端口 1 使用fuser命令 可以直接在Linux上查看指定端口被哪个进程占用了 语法为 fuser v 80 tcp 运行结果里会包含进程的名字和id 2 使用lsof命令 能根据指定端口找到对应的进程信息 语法为
  • STEAM课程的五大教学策略

    格物斯坦小坦克就stem课程的五大教学策略来讲一讲 激发求知欲 培养思维技巧是STEAM课程活动的重点之一 先玩后做 即先呈现成果的乐趣再探索制作 让学生在实践活动中体验和理解相关的概念 力求最match大程度地激发学生的学习需求和求知欲
  • 虚拟机安装与双系统(win10+ubuntu)安装及其他

    近来由于想要尝试下双系统 所以整了个虚拟机玩玩 在真实机器上装双系统方法类似 不过在虚拟机上装要安全些 在此记录下过程 以资日后参考 博客原创性是没有啥原创性的 各处借花献佛 算是一个总结性博客吧 文章目录 1 虚拟机安装 2 一个跨浏览器
  • buck电路_通过DAC调节BUCK电路输出电压

    产品开发中 经常有需要调节DC转换器输出电压的需求 例如一些DC可调电源 或者直流有刷电机的调速等场合 上图中我们采用LM2596S ADJ作为电源模块 用带DAC功能的单片机或专用DAC芯片调节BUCK转换器的电压输出 我们都知道常见的D
  • 网络安全知识试题

    网络安全知识竞赛题库 1 维基解密 网站的总部位于 没有公开办公地址 没有公布办公邮箱 6 苹果的icloud存在安全策略漏洞 苹果公司采用限定账户每天登录次数方法进行弥补 8 在享受云服务带来的便捷时 数据安全的主动权掌握在手里 云服务商
  • JS中模板字符串,怎么设置自动补全html标签

    我们在写代码的时候经常会用到模板字符串 但是没有代码提示 写的还是挺难受的 有一种方法可以解决这个问题 我们在VScode中打开设置 找到任一一个settings json文件打开 将这下面这些代码粘贴在后面 emmet triggerEx
  • 差分数组是个啥?能干啥?怎么用?(差分详解+例题)

    差分数组是个啥 差分数组很明显就是个数组呗 本菜鸡学的比较浅 先说一下我自己认识的差分数组吧 先解释一下什么是 差分 差分其实就是数据之间的差 什么数据的差呢 就是上面所给的原始数组的相邻元素之间的差值 我们令 d i a i 1 a i
  • 【Linux】Linux Systemd 启动守护进程

    1 概述 转载 http www ruanyifeng com blog 2016 03 systemd tutorial commands html 去看原文吧 排版比较好 这里转载防丢失 Systemd 是 Linux 系统工具 用来启
  • 常用的大数据技术有哪些?

    大数据技术为决策提供依据 在政府 企业 科研项目等决策中扮演着重要的角色 在社会治理和企业管理中起到了不容忽视的作用 很多国家 如中国 美国以及欧盟等都已将大数据列入国家发展战略 微软 谷歌 百度以及亚马逊等大型企业也将大数据技术列为未来发
  • Kafka Producer 发送数据

    Kafka Producer 发送数据 1 生产者概览 1 不同的应用场景对消息有不同的需求 即是否允许消息丢失 重复 延迟以及吞吐量的要求 不同场景对Kafka生产者的API使用和配置会有直接的影响 2 Kafka发送消息的主要步骤 消息
  • 配置 RT-Thread 的工程目录

    1 前言 RT Thread 基于 Scons 的包管理非常方便让我们使用 RT Thread 进行开发 但在实际工程中将应用代码写到 RT Thread 官方提供的 bsp 目录下面会非常不便于使用 无法使用自己 git 工具进行代码管理
  • 使用IntelliJ IDEA通过Maven创建Spring的HelloWord(超详细图文教程)

    在JavaWeb中 随着Intellij IDEA的广泛使用 所用的Maven插件在以后的JavaEE中开发也将是个趋势 通过Maven仓库 我们可以不用下载所关联的Jar包就可以进行引用 还是很方便整个工程管理的 因为自己也是第一次接触S
  • 运算符相关知识点

    字符串转数值类型新增 隐式转换 隐式转换 正号 var a 10 console log typeof a console log typeof a 0 隐式转换 console log typeof a 1 隐式转换 console lo
  • iosArchive上传到AppStoreConnect

    首先 我们需要一个IOS开发平台上有一个开发者账号 https developer apple com programs enroll 这个平台可以注册个人账号或者公司账号 公司账号需要的资料更麻烦一点 但是功能也更多 在做好的开发者账号的
  • Win10家庭版远程桌面工具RDP Wrapper

    Win10家庭版远程桌面工具RDP Wrapper 由于win10家庭版官方不支持使用远程控制mstsc工具 但是使用RDP Wrapper可以解决该问题 解决办法 链接
  • uniapp 地图组件(map)的使用总结

    总结一下本次在uniapp中使用map遇到的一些问题 文章分别是基础 定位图标 获取自身经纬度 通过经纬度获取当时城市信息 首先先看成品 首先引入map组件
  • C++查看 IEEE 754 浮点数格式的代码

    把内容过程中较好的一些内容片段备份一次 下边资料是关于C 查看 IEEE 754 浮点数格式的内容 for binary floating point numbers IEEE 754 is to use a union as shown
  • qt在程序执行的过程中刷新界面

    qt程序执行的过程中 一般是不会仅仅通过setText函数将文字刷新到界面上 如果想根据需要不断地显示文字到主界面上该怎么做呢 为什么不会刷新界面呢 这是由于调用show函数之后 并不能显示界面 必须调用如下图片的中的a exec函数才能刷
  • 一键部署office的工具——OTool

    OTool可用于office的下载 安装和激活 其激活方式是调用kmspico服务器进行的 官方网站是https otp landian vip zh cn 最新版本5 9 3 6在2019 4 16发布 使用方式 下载 这个软件是绿化版的
  • C/C++队列操作

    1 链队结构 typedef struct queuenode int data struct queuenode next Queue typedef struct Queue fronts rear linkqueue 2 入队操作 进