循环队列的顺序存储和实现(C语言)【循环队列】
- 循环队列-队列的顺序表示和实现
- 循环队列的三种状态
- 循环队列-队列的顺序实现 (代码演示)
- CycleQueue.h
- CycleQueue.cpp
- main.cpp
- 测试结果
循环队列-队列的顺序表示和实现
是限制仅在表头删除和表尾插入的顺序表。
利用一组地址连续的存储单元依次存放队列中的数据元素。
因为:队头和队尾的位置是变化的,所以:设头、尾指针。
在顺序队列中,当尾指针已经指向了队列的最后一个位置的下一位置时,若再有元素入队,就会发生“溢出”。
“假溢出”——队列的存储空间未满,却发生了溢出。
解决“假溢出”的问题有两种可行的方法:
(1)、平移元素:把元素平移到队列的首部。效率低。
(2)、将新元素插入到第一个位置上,构成循环队列, 入队和出队仍按“先进先出”的原则进行。 操作效率、空间利用率高。
循环队列的三种状态
解决办法:
(1)、另设一个布尔变量以区别队列的空和满(使用一个计数器记录队列中元素的总数。);
(2)、少用一个元素的空间,约定入队前测试尾指针在循环意义下加 1 后是否等于头指针,若相等则认为队满;
循环队列-队列的顺序实现 (代码演示)
CycleQueue.h
#pragma once#define MAXQSIZE 100 //最大队列长度 typedef int QElemType; //定义数据类型typedef struct
{QElemType* base; // 预分配存储空间基址 int front; // 头指针,若队列不空, // 指向队列头元素 int rear; // 尾指针,若队列不空, // 指向队列尾元素 的下一个位置
} SqQueue;void InitCycleQueue(SqQueue* Q);//初始化循环队列
void DestroyCycleQueue(SqQueue* Q); //销毁循环队列
int LengthCycleQueue(SqQueue Q); //求循环队列的长度
bool InputCycleQueue(SqQueue* Q, QElemType val); //入循环队列
bool OutputCycleQueue(SqQueue* Q, QElemType * val); //出循环队列
void Show(SqQueue Q); //打印循环队列的元素
CycleQueue.cpp
#include "CycleQueue.h"
#include <malloc.h>
#include <stdlib.h>
#include <stdio.h>void InitCycleQueue(SqQueue* Q)
{Q->base = (QElemType*)malloc(MAXQSIZE * sizeof(QElemType));if (!Q->base){printf("InitQueue file\n");exit(-1);}Q->front = Q->rear = 0;
}void DestroyCycleQueue(SqQueue* Q) //销毁循环队列
{free(Q->base);
}int LengthCycleQueue(SqQueue Q) //求循环队列的长度
{return (Q.rear - Q.front + MAXQSIZE) % MAXQSIZE;
}bool InputCycleQueue(SqQueue* Q, QElemType val)//入循环队列
{if ((Q->rear + 1) % MAXQSIZE == Q->front)return false;Q->base[Q->rear] = val;Q->rear = (Q->rear + 1) % MAXQSIZE;return true;
}bool OutputCycleQueue(SqQueue* Q, QElemType* val) //出循环队列
{if(Q->rear == Q->front)return false;*val = Q->base[Q->front];Q->front = (Q->front + 1) % MAXQSIZE;return true;
}void Show(SqQueue Q)//打印循环队列的元素
{while (Q.front % MAXQSIZE != Q.rear)printf("%d\t", Q.base[Q.front++]);printf("\n");
}
main.cpp
#include "CycleQueue.h"
#include <stdio.h>
int main()
{SqQueue Q;InitCycleQueue(&Q);printf("入循环队列:\n");for (int i = 0; i < 10; i++)InputCycleQueue(&Q, i * 11);Show(Q);QElemType tmp;printf("出循环队列:\n");OutputCycleQueue(&Q, &tmp);Show(Q);printf("出循环队列:\n");OutputCycleQueue(&Q, &tmp);Show(Q);printf("循环队列长度为%d\n", LengthCycleQueue(Q));DestroyCycleQueue(&Q);return 0;
}
测试结果
循环队列的顺序存储和实现(C语言)【循环队列】相关推荐
- 三星手机电池循环清零代码_数据结构(C语言)-循环队列基本操作
队列是一种先进先出(first in first out,FIFO)的线性表,是一种常用的数据结构. 它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列 ...
- c语言有关循环结构运用的题,应用C语言循环结构解决等差数列求和问题微课设计研究...
高妍 [摘 要]本文以应用C语言循环结构解决等差数列求和问题作为微课主要内容,阐述了对微课设计进行的研究与探索. [关键词]C语言:循环结构:微课 当今,信息化高速发展,数字技术正在影响和改变着我们生 ...
- 循环队列的进队算法c语言,循环队列的定义,入队算法,出队算法,遍历算法,及其代码实现-Go语言中文社区...
队列 的定义: 一种可以是实现"先进先出"的存储结构.数据的进出类似于排队购票.队只允许队尾一端(rear)添加,在另一端队头(front)删除.队有队头(front)和队尾(re ...
- c语言双重for循环流程图_第九章、C语言循环之for
上一章我们讲了while和do...while循环,这一章我们来学习一下C语言中的另外一种循环结构:for循环. 我们先来看一下for循环的结构: for(expression1:expression ...
- 数据结构-队列详解(类C语言版)
目录 队列的相关概念 定义 逻辑结构 存储结构 运算规则 实现方式 队列的基本操作 循环队列--队列的顺序表示和实现 队列的顺序存储结构 假溢出-引出循环队列 判断循环队列队空队满 循环队列的操作 队 ...
- 计算机c语言循环作业,计算机C语言循环语句的应用研究
[摘要]基于计算机C语言循环语句的应用分析,首先要明确C语言应用现状,然后阐述C语言循环语句的分类及特点,最后详细论述循环语句的应用要点,针对while循环语句.dowhile循环语句.for循环语句 ...
- 顺序循环队列类c#语言,C#--循环队列的顺序存储
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Cons ...
- C语言循环队列的基本操作(init,enquene,dequene)与杨辉三角(C和C++<queue>)
C语言循环队列的基本操作与杨辉三角(C和C++的表示方法) C语言的表示方法 #include <stdio.h> #include <malloc.h> #define ma ...
- 队列的定义、循环队列的顺序存储结构及链式存储结构
文章目录 1 队列的定义 1.1 文字定义 1.2 代码定义 2 循环队列 2.1 循环队列的定义 2.2 循环队列的顺序存储结构 3 队列的链式存储结构 3.1 链队列的入队操作 3.2 链队列的出 ...
- c语言循环队列入列算法,C语言——循环队列和链队列的基本运算
// 循环队列 #include #include "SeqQue.h" // 循环队列的基本运算 /* const int maxsize = 20; typedef struc ...
最新文章
- 区块链软件公司:区块链运用在金融上运用的优点有哪些?
- setwindowshookex回调函数不执行_不一样的“悬停几秒后执行函数”?一个开源工具函数,请注意查收...
- 记一例 ORA-00904:标识符无效
- Python实现im2col和col2im函数
- Centos7.x 升级svn版本到指定版本
- 同学们,看看这里吧!!!
- landscape 1
- 关于在Mac上安装模拟器的坑比~~~~~
- 《工业设计史》第八章:20世纪20、30年代的流行风格
- 在韩国5G商用神话中,我们不能学到什么?
- php获取steam装备信息,api – 获取某人的Steam库存
- 离散数学-图的运算与基本概念、导出子图、路与连通
- TensorFlow2.0保存模型
- 【自然语言处理】韩语基础与入门(词汇篇)
- chi square-卡方分布的定义及性质
- Unity接入微信SDK——iOS(接入微信SDK)
- 【程序人生】卡塔尔世界杯元素python海龟绘图(附源代码),世界杯主题前端特效5个(附源码)
- JAVA实战——视频管理系统构建common, pojo, mapper和service工程
- [Swift]音频循环播放
- 读书笔记--《BIM手册》--案例笔记