#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 6 typedef int QElemType; typedef struct {
QElemType *base;
int front;
int rear;
}SqQueue; SqQueue *InitQueue(SqQueue* Q);//初始化
SqQueue *DestroyQueue(SqQueue* Q);//销毁
void ClearQueue(SqQueue *Q);//清空
int QueueEmpty(SqQueue *Q);//判空
int QueueLength(SqQueue *Q);//队列长度
QElemType GetHead(SqQueue *Q);//获取队头元素
int EnQueue(SqQueue *Q, QElemType e);//插入新元素到队尾
int DeQueue(SqQueue *Q, QElemType *e);//删除队头元素
void QueueTraverse(SqQueue *Q);//遍历 //初始化
SqQueue *InitQueue(SqQueue* Q){
Q = (SqQueue *)malloc(sizeof(SqQueue));
Q->base = (QElemType *)malloc(sizeof(QElemType)*MAXSIZE);
if(!Q->base){
printf("空间不足,初始化失败\n");
return NULL;
}
Q->front=Q->rear=;
printf("初始化成功\n");
return Q;
} //销毁
SqQueue *DestroyQueue(SqQueue* Q){
free(Q->base);
free(Q);
printf("销毁成功\n");
return NULL;
} //清空
void ClearQueue(SqQueue *Q){
int i=Q->front;
while(i%MAXSIZE != Q->rear){
printf("%d被清空\n",Q->base[i%MAXSIZE]);
Q->base[i%MAXSIZE] = ;
i++;
}
printf("清空成功\n");
} //判空,1为空
int QueueEmpty(SqQueue *Q){
return(Q->rear == Q->front);
} //返回队列长度
int QueueLength(SqQueue *Q){
return (Q->rear-Q->front+MAXSIZE)%MAXSIZE;
} //获取队头元素
QElemType GetHead(SqQueue *Q){
if(Q->front != Q->rear){
printf("队头元素是%d\n", Q->base[Q->front]);
return Q->base[Q->front];
}else{
printf("空队列,无队头\n");
}
} //插入新元素到队尾,返回是否入队成功的状态
int EnQueue(SqQueue *Q, QElemType e){
//判定是否还有一个空
if((Q->rear+)%MAXSIZE == Q->front){
printf("队列已满,%d元素入队失败\n",e);
return ;
}
Q->base[Q->rear] = e;
//插入后尾指针加一
Q->rear = (Q->rear+)%MAXSIZE;
printf("%d入队成功\n", e);
return ;
} //删除队头元素
int DeQueue(SqQueue *Q, QElemType *e){
//判空
if(Q->front==Q->rear){
printf("空队列,删除失败\n");
return ;
}
*e = Q->base[Q->front];
Q->front=(Q->front+)%MAXSIZE;
printf("%d元素出队成功\n", *e);
return ;
} //遍历
void QueueTraverse(SqQueue *Q){
if(QueueEmpty(Q)){
printf("空队列\n");
return;
}
int i=Q->front;
//只要不等于尾指针就一直遍历
while(i%MAXSIZE != Q->rear){
printf("%d ",Q->base[i%MAXSIZE]);
i++;
}
printf("\n");
} int main(void)
{
SqQueue *Q = NULL;
QElemType e = NULL;
//初始化测试
Q = InitQueue(Q); //遍历测试
QueueTraverse(Q); // //入队测试
// EnQueue(Q, 1);
// EnQueue(Q, 2);
// EnQueue(Q, 3);
// EnQueue(Q, 4);
// QueueTraverse(Q); // //长度测试
// printf("队列长度为%d\n",QueueLength(Q));
// EnQueue(Q, 1);
// EnQueue(Q, 2);
// EnQueue(Q, 3);
// EnQueue(Q, 4);
// printf("队列长度为%d\n",QueueLength(Q));
// EnQueue(Q, 5);
// EnQueue(Q, 6);
// printf("队列长度为%d\n",QueueLength(Q)); // //出队测试
// DeQueue(Q, &e);
// printf("测试e是否改变:%d\n",e);
// QueueTraverse(Q); // //获取队头元素测试
// e = GetHead(Q);
// EnQueue(Q, 999);
// e = GetHead(Q); // //出入测试
// EnQueue(Q, 1);
// EnQueue(Q, 3);
// EnQueue(Q, 5);
// EnQueue(Q, 7);
// EnQueue(Q, 9);
// EnQueue(Q, 11);
// QueueTraverse(Q);
// DeQueue(Q, &e);
// DeQueue(Q, &e);
// DeQueue(Q, &e);
// QueueTraverse(Q);
// EnQueue(Q, 7);
// EnQueue(Q, 9);
// EnQueue(Q, 11);
// EnQueue(Q, 13);
// QueueTraverse(Q); // //清空测试
// EnQueue(Q, 7);
// EnQueue(Q, 9);
// EnQueue(Q, 11);
// EnQueue(Q, 13);
// ClearQueue(Q);
// QueueTraverse(Q); //销毁测试
EnQueue(Q, );
EnQueue(Q, );
EnQueue(Q, );
EnQueue(Q, );
Q = DestroyQueue(Q);
QueueTraverse(Q); return ;
}

纯C语言实现顺序队列的更多相关文章

  1. 队列的含义以及C语言实现顺序队列

    队列,和栈一样,也是一种对数据的"存"和"取"有严格要求的线性存储结构. 什么是队列 与栈结构不同的是,队列的两端都"开口",要求数据只能从 ...

  2. 纯C语言实现顺序栈

    #include <stdio.h> #include <stdlib.h> #define MAXSIZE 100 typedef int SElemType; typede ...

  3. C语言顺序队列

    顺序队列是一种只能在一头进和另一头出的数据结构,所以结构体里设2个指针分别指向头部和尾部,用数组来存储数据. #define MAXSIZE 1024 typedef int elemtype; ty ...

  4. 数据结构 - 顺序队列的实行(C语言)

    数据结构-顺序队列的实现 1 顺序队列的定义 线性表有顺序存储和链式存储,队列作为一种特殊的线性表,也同样存在这两种存储方式.我们先来看队列的顺序存储结构. 队列的顺序储存结构:用数组存储队列,为了避 ...

  5. 顺序队列与链式队列--C语言实现

    关于队列,因为我自己在平时使用不多,所以在这里直接将队列的两种存储方式放在一起,作为一篇随笔,这两份代码均可直接运行,亲测.注释写的应该也算比较详细了,就不过多的解释了 顺序队列 #include&l ...

  6. C语言实现,队列可伸缩

    两个栈实现一个队列,C语言实现,队列可伸缩,容纳任意数目的元素. 一.思路:1.创建两个空栈A和B:2.A栈作为队列的入口,B栈作为队列的出口:3.入队列操作:即是入栈A:4.出队列操作:若栈B为空, ...

  7. 顺序队列C/C++实现

    #include <iostream> using namespace std; const int MAXSIZE = 1000; typedef int ELEMTYPE; const ...

  8. C语言 串 顺序结构 实现

    一个能够自动扩容的顺序结构的串 ArrString (GCC编译). /** * @brief C语言 串 顺序结构 实现 * @author wid * @date 2013-11-01 * * @ ...

  9. 数据结构Java实现07----队列:顺序队列&顺序循环队列、链式队列、顺序优先队列

    一.队列的概念: 队列(简称作队,Queue)也是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置插入和删除,而队列只允许在其一端进行插入操作在其 ...

随机推荐

  1. 再来五道剑指offer题目

    再来五道剑指offer题目 6.旋转数组的最小数字 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4, ...

  2. python web框架Django——ORM

    ORM简介 MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库 ORM是“对象-关系-映射”的简称 ...

  3. 仓库管理移动应用解决方案——C#开发的移动应用开源解决方案

    产品简介 SmoWMS是一款仓库管理移动解决方案,通过Smobiler平台开发,包含了仓库管理中基础的入库.出库.订单管理.调拨.盘点.报表等功能.支持扫码条码扫描.RFID扫描等仓库中常见的场景. ...

  4. ABP进阶教程9 - CSV导出中文乱码

    点这里进入ABP进阶教程目录 问题描述 功能按钮 - 导出CSV,中文信息导出为乱码. 解决方案 打开展示层(即JD.CRS.Web.Mvc)的\wwwroot\view-resources\View ...

  5. python测试mysql写入性能完整实例

    这篇文章主要介绍了python测试mysql写入性能完整实例,具有一定借鉴价值,需要的朋友可以参考下 本文主要研究的是python测试mysql写入性能,分享了一则完整代码,具体介绍如下. 测试环境: ...

  6. Mysql双主加Keepalived+读写分离

    一.MySQL于keepalived简介** 前言: 在企业中,数据库高可用一直是企业的重中之重,中小企业很多都是使用mysql主从方案,一主多从,读写分离等,但是单主存在单点故障,从库切换成主库需要 ...

  7. 让Windows的文件名区分大小写

    背景 最近在Linux官网下载了Linux内核,下载下来的是一个后缀为.tar.xz的压缩包,于是在毫不知情的情况下随随便便解压了,解压过程中出现了很多问题. 其中一个问题就是在Windows下,不区 ...

  8. 2、mongoDB的基本操作

    数据写入和查询: show dbs (查看有哪些数据库) use imooc (使用数据库) db.dropDatabase() 删除数据库 备注:在use的时候如果use一个不存在的表,在mongo ...

  9. caffe初体验

    caffe是一个深度学习的框架, 具体我也不太清楚, 可以自行百度吧, 我也是刚刚知道有这么一个框架, 才疏学浅啊. 在安装完caffe, 我的第一个想法就是, 别管他是个啥东西, 总得先让我运行一些 ...

  10. Node.js连接数据库取值,简单接口的实现

    第一步:先安装Node.js,这里不做介绍 第二步:新建一个文件夹,打开cmd,进入该文件夹 执行npm init命令生成page.json文件 第三步:安装如下模块,打开cmd,进入第二步的文件夹, ...