IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C语言实现循环队列 -> 正文阅读

[C++知识库]C语言实现循环队列

1.首先要先明白几个概念:

队首?(front)?:允许进行删除的一端称为队首。
队尾?(rear)?:允许进行插入的一端称为队尾。

队列是先进先出
?

2.当进队的时候,rear指针是向后运动的;

当出队的时候,front指针也是向后运动的;

因此这样经过一系列的操作后,两个指针最终会到达数组的末端处,虽然队中已没有了数据,但是仍然无法插入元素,这就是所谓的“假溢出”。为了解决假溢出的问题,可以将数组弄成一个环状,让rear和front指针沿着环走,这样就不会出现无法继续走下去的情况,这样就产生了循环队列。

3.队空状态 :q.rear == q.front
?? 队满状态 : (q.rear + 1) % maxsize == q.front
? ?元素的进队操作 ?:q.rear = (q.rear + 1) % maxsize ; q.data[q.rear] = x ;
? ?元素的出队操作 ?:q.front = (q.front + 1) % maxsize ; x = q.data[q.front] ;
? ?注!!?:数据入队时是先移动指针,然后再存入元素;元素出队时也是先移动指针,后数据出队

#include <bits/stdc++.h>
#define maxsize 100
using namespace std;

typedef struct node
{
    int data[maxsize];
    int frontt;//队列的头部
    int rear;//队列的尾部
}lqueue;

void initqueue(lqueue &q)//初始化队列,q是队列的名字
{
    q.frontt=q.rear=0;
}

int isempty(lqueue &q)
{
    if(q.frontt==q.rear)
    {
        return 1;
    }
    else
    {
        return 0;
    }
}

//入队
int inqueue(lqueue &q,int x)
{
    if((q.rear+1)%maxsize==q.frontt)
    {
        return 0;
    }
    q.rear=(q.rear+1)%maxsize;
    q.data[q.rear]=x;
    return 1;
}

int outqueue(lqueue &q,int &x)//函数运行完之后还不能释放,在主函数中还有作用,因此要在前面加 
 //上&符号.而且我用的是int去定义这个函数,这个函数是有返回值的,所以x还不能释放掉,形参和实参是同一个的
{
    if(q.frontt==q.rear)
    {
        return 0;
    }
    q.frontt=(q.frontt+1)%maxsize;
    x=q.data[q.frontt];
    return 1;
}

int main()
{
    int n,x,y;
    lqueue q;
    initqueue(q);
    printf("输入要输入的数据的总数:");
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>y;
        inqueue(q,y);
    }
    while(!isempty(q))
    {
        outqueue(q,x);
        printf("%d ",x);
    }
    printf("\n");
    //cout << "Hello world!" << endl;
    return 0;
}

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-24 15:22:34  更:2021-08-24 15:24:11 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/27 5:49:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计