数据结构(严蔚敏版)循环队列——C语言
- 大家好!我是一名二本学校努力的大二学生,正在努力学习数据结构,打算将其所有结构的源码写出与大家一起交流,期待与大家一起进步,互相成长!!!
循环队列
- 由一组地址连续的储存单元依次存放从队列头到队尾的元素,分别用front与rear指针指示队列头元素及队列尾元素的位置,并定义初始值为0,随后逐步增加并取余总空间的方式来确定位置。
完整代码如下:
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#define OVERFLOW -2
#define OK 1
#define TRUE 1
#define ERROR 0
#define FALSE 0
typedef int Status;
#define MAXQSIZE 5 /* 最大队列长度(对于循环队列,最大队列长度要减1) */
typedef int QElemType;
typedef struct{QElemType *base; /* 初始化的动态分配存储空间 */int front; /* 头指针,若队列不空,指向队列头元素 */int rear; /* 尾指针,若队列不空,指向队列尾元素的下一个位置 */}SqQueue;
Status InitQueue(SqQueue *Q){ /* 构造一个空队列Q */Q->base=(QElemType *)malloc(MAXQSIZE*sizeof(QElemType));if(!Q->base) /* 存储分配失败 */exit(OVERFLOW);Q->front=Q->rear=0;return OK;}int QueueLength(SqQueue Q){ /* 返回Q的元素个数,即队列的长度 */return(Q.rear-Q.front+MAXQSIZE)%MAXQSIZE;}Status EnQueue(SqQueue *Q,QElemType e){ /* 插入元素e为Q的新的队尾元素 */if((Q->rear+1)%MAXQSIZE==Q->front) /* 队列满 */return ERROR;Q->base[Q->rear]=e;Q->rear=(Q->rear+1)%MAXQSIZE;return OK;}Status DeQueue(SqQueue *Q,QElemType *e){ /* 若队列不空,则删除Q的队头元素,用e返回其值,并返回OK;否则返回ERROR */if(Q->front==Q->rear) /* 队列空 */return ERROR;*e=Q->base[Q->front];Q->front=(Q->front+1)%MAXQSIZE;return OK;}Status QueuePrint(SqQueue Q){ int i;i=Q.front;while(i!=Q.rear){printf("%d ",*(Q.base+i));i=(i+1)%MAXQSIZE;}printf("\n");return OK;}int main(){Status j;int i=0,l;QElemType e;SqQueue Q;InitQueue(&Q);printf("请输入整型队列元素(不超过%d个),-1为提前结束符: ",MAXQSIZE-1);do{scanf("%d",&e);if(e==-1)break;i++;EnQueue(&Q,e);}while(i<MAXQSIZE-1);printf("队列长度为: %d\n",QueueLength(Q));printf("连续%d次由队头删除元素,队尾插入元素:\n",MAXQSIZE);for(l=1;l<=MAXQSIZE;l++){DeQueue(&Q,&e);printf("删除的元素是%d,请输入待插入的元素: ",e);scanf("%d",&e);EnQueue(&Q,e);}l=QueueLength(Q);printf("现在队列中的元素为: \n");QueuePrint(Q);printf("共向队尾插入了%d个元素\n",i+MAXQSIZE);return 0;}
运行结果:
对于我的理解,循环队列的存储方式与顺序表的存储方式相似,需要注意的是通过取余来对队头与队尾的位置不断更新定位,其余的操作都比较简单。
大家如果浏览了我的博客发现我有错误的地方,麻烦谅解,并在评论中告诉我。谢谢!
- 加油加油加油!!!
数据结构(严蔚敏版)循环队列——C语言相关推荐
- 数据结构(严蔚敏版)习题集第三章课后标新号习题答案
#include<iostream> #include<cctype> using namespace std; /****预定义****/ #define STACK_INI ...
- [数据结构-严蔚敏版]P64循环队列-队列的顺序存储结构
代码如下: #include <iostream> using namespace std;const int MAXQSIZE = 10;typedef int ElemType;typ ...
- 队列链式结构C/C++实现(数据结构严蔚敏版)
1.头文件Queue.h; #include<iostream> #include<iomanip>//格式控制头文件 #include<stdlib.h> usi ...
- 队列顺序结构C/C++实现(数据结构严蔚敏版)
1.头文件Queue.h #include<iostream> using namespace std;//定义4个空间,留出一个作为标志位,当Q.rear+1 / MAXQSIZE = ...
- [数据结构-严蔚敏版]P61ADT Queue的表示与实现(单链队列-队列的链式存储结构)
代码如下: #include <iostream> using namespace std;typedef int ElemType;typedef struct QNode {ElemT ...
- 有关数据结构基础知识(数据结构 严蔚敏版)
1. 数据结构是一门研究非数值计算程序设计中的操作对象 以及这些对象之间的关系和操作的学科 2. 研究包括逻辑结构和存储结构 1) 逻辑结构(从具体问题抽象出来的数学模型)分为 集合结构 线性结构 树 ...
- [数据结构-严蔚敏版]P65离散事件模拟(银行客户的离散事件驱动模拟程序)
写这个简单玩意,居然花费了我6小时+,唉!!!,还是太菜了! 中间已经起了放弃的念头了,最后还是坚持下来了! 总结: (1)漏了p = p->next (2)队列删除元素的时候,删除的是最后一个 ...
- 【数据结构 严蔚敏版】 二叉树 基本操作
计算机科学中,二叉树是每个结点最多有两个子树的树结构.通常子树被称作"左子树"(left subtree)和"右子树"(right subtree).二叉树常被 ...
- C/C++实现数据结构严蔚敏版的一些注意事项(指南)
建议实现的时候用C++语言进行实现,因为书中的有些参考伪代码都是通过C++实现的当用C语言替换的时候作为新手的我,找起bug来有点费劲. C语言实现顺序表的过程中的注意事项: 1, 书中绪论1.3,抽 ...
- 字符串静态顺序结构C/C++实现(数据结构严蔚敏版)
1.头文件String.h #include<stdio.h> #include<stdlib.h> #include<string.h> #include< ...
最新文章
- 900万张标注图像,谷歌发布Open Images最新V3版
- 稳健地估计单应性矩阵,需要几个特征点?
- Oracle 启动,建表
- mysql6.0.7_MySQL Workbench v6.0.7 正式版
- C++版数据结构继承关系图
- 树莓派进阶之路 (014) - 树莓派远程连接的三种方式总结
- 像Excel一样使用python进行数据分析(1)
- CF993E Nikita and Order Statistics
- redis:set数据类型和操作
- 微机笔记——1.微型计算机概述
- 错误调试:Ubuntu-Tensorflow ,程序手动结束后,GPU的显存没有被释放
- 如何在Rancher 2.0上快速部署Datadog
- 基础篇:源码 Linux+Apache+PHP+MySQL环境配置方法-08CMS网站
- Python下载和安装图文教程[超详细]
- linux 如何添加用户,Linux 怎么添加用户(adduser)
- 利用SuperMap的水文分析提取山脊线和山谷线
- mac蓝牙鼠标总是自己断开_解决Mac蓝牙鼠标和键盘经常断开的问题
- android 遥控器配置文件,[转载]android万能遥控器之一--前言及发射部分的简单实现...
- 设计一个长方形类。成员变量包括:长度和宽度,成员函数除包括计算周长和计算面积外, 还包括用set方法来设置长方形的长度和宽度,以及用get的方法来获得长方形的长度和宽度 最后,编写一个测试程序来测试所
- 《Network Science》:一本关于网络科学的书