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语言 数据结构 简单易懂 超详细~~

/本程序中对循环队列包含队列初始化、入队、出队、遍历、判断循环队列是否为空或者已满等基本常用操作/
/好啦~现在来讲循环队列出现的原因::因为队列入队和出队front和rear都是向后移动的,那么我们前面的元素一旦出队之后,这些空间都不能得到合理的利用了,那么这对于计算机来说,是一个极大的空间资源的浪费,于是就有了循环队列的出现啦/
#include<stdio.h>
#include<stdlib.h>
typedef struct queue
{
int* base;
int front;
int rear;
}queue;
void initqueue(queue*);//队列的初始化
bool enqueue(queue*,int);//入队
bool outqueue(queue*, int*);//出队
void traverse(queue*);//遍历
bool emptyqueue(queue*);//判断队列是否为空
bool fullqueue(queue*);//判断队列是否已满
int main(void)
{
queue q;
int val;
initqueue(&q);
enqueue(&q, 1);
enqueue(&q, 2);
enqueue(&q, 3);
enqueue(&q, 4);
enqueue(&q, 5);
enqueue(&q, 6);
enqueue(&q, 7);
enqueue(&q, 8);
enqueue(&q, 9);
traverse(&q);
printf("\n");
outqueue(&q, &val);
outqueue(&q, &val);
outqueue(&q, &val);
traverse(&q);
system(“pause”);
return 0;
}
void initqueue(queuepQ)
{
pQ->base = (int
)malloc(sizeof(int) * 6);//存放六个整数的数据元素
//相当于是一个数组的首地址
pQ->front = 0;
pQ->rear = 0;
//刚开始将front和rear都指向尾0
}
bool fullqueue(queuepQ)
{
/如果front所指向的位置的下一个位置就是rear时,那么代表循环队列已满了,即循环队列中还有一个空位的时候,队列就满了。因为如果我们将循环队列所有的位置都存储了元素,那么栈满的条件就是frontrear,这和栈空的条件是一样的;所以当我们直到frontrear时,是不能判断出栈空还是栈满的,这时我们可以将循环队列的最后一个位置上不存储元素,当循环队列中恰好有一个空位的时候,队列就满了,这对于队列来讲是不浪费空间的哦(同时我们也可以做一个标志性的判断的变量flag,当flag0的时候,frontrear时,栈满;当flag1且rearfront时,栈空)/
if (pQ->front == (pQ->rear + 1) % 6)
{/那么为什么rear的下一个位置要用pQ->rear + 1) % 6呢??因为本程序中所用的存储结构时循环队列,可能该元素的下一个位置就是该循环队列的第一个位置了,即又回到了开头的位置/
return true;
}
else
{
return false;
}
}
bool enqueue(queue
pQ,int val)
{
if (fullqueue(pQ))
{/注意在队列还没有满的时候才能入队/
return false;
}
else
{
pQ->base[pQ->rear] = val;
pQ->rear = (pQ->rear + 1) % 6;
return true;
/注意在入队后,要将pQ->rear 移动的下一个位置(pQ->rear + 1) % 6,至于为什么要%6上面已经讲 的很清楚了
}
}
bool emptyqueue(queue
pQ)
{
if (pQ->rear == pQ->front)
{/刚开始对队列初始化的时候,pQ->rear == pQ->front=0,但是我们之后对循环队列进行插入和删除数据之后,该pQ->rear 和 pQ->front可能不为0,但是一定是相等的,即指向同一个位置/
return true;
}
else
{
return false;
}

}
bool outqueue(queuepQ, intval)
{/注意在出队列的时候一定是在循环队列还不为空的时候下出队列的/
if (emptyqueue(pQ))
{
return false;
}
else
{
val = pQ->base[pQ->front];
pQ->front = (pQ->front + 1) % 6;
return true;
/注意出队是将 pQ->front移动到下一个位置,即(pQ->front + 1) % 6,至于为什么要%6上面已经讲 的很清楚了/
}
}
void traverse(queue
pQ)
{/注意在进行遍历操作时,是不能改变队列的front和rear的位置的/
int i = pQ->front;
while (i!=pQ->rear)
{
printf("%d\t", pQ->base[i]);
i++;//注意i一定要++,否则会称为死循环
}
}

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-11-24 08:12:21  更:2021-11-24 08:13:38 
 
开发: 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年11日历 -2024/11/26 12:28:34-

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