#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. js动态设置padding-top遇到的坑

    我想通过js动态设置元素padding-top的百分比值:以下几种都是无法设置成功的: // setAttribute设置padding-top并且转换为百分比 imageBox.setAttribu ...

  2. hadoop 自定义OutputFormat

    1.继承FileOutputFormat,复写getRecordWriter方法 /** * @Description:自定义outputFormat,输出数据到不同的文件 */ public cla ...

  3. [日常] git版本回退

    还没有push到远程的时候,版本回退的测试如下 先克隆一个空的测试仓库,这是我自己在gitlab里创建的空仓库git clone http://192.168.1.114:8090/admintsh/ ...

  4. linux SSH设置

    环境:centos7 一. ssh连接超时设置 (1)客户端设置(推荐) 客户端是windows系统 连接工具:SecureCRT 1.SecureCRT客户端->Options(选项)-> ...

  5. cidr地址段

    CIDR采用各种长度的"网络前缀"来代替分类地址中的网络号和子网号,其格式为:IP地址 = {<网络前缀>,<主机号>}.为了区分网络前缀,通常采用&quo ...

  6. JAVA字符串截取与求模

    public class splitdemo { /** * @param args */ public static void main(String[] args) { // TODO Auto- ...

  7. ffmpeg下载m3u8流媒体

    安装 编译好的windows可用版本的下载地址(官网中可以连接到这个网站,和官方网站保持同步): http://ffmpeg.zeranoe.com/builds/ 该版本为FFMPEG的Static ...

  8. 洛谷 P4710 「物理」平抛运动

    洛谷 P4710 「物理」平抛运动 洛谷传送门 题目描述 小 F 回到班上,面对自己 28 / 110 的物理,感觉非常凉凉.他准备从最基础的力学学起. 如图,一个可以视为质点的小球在点 A(x_0, ...

  9. 工具资源系列之给 windows 虚拟机装个 centos

    前面我们已经介绍了如何在 Windows 宿主机安装 VMware 虚拟机,这节我们将利用安装好的 VMware 软件安装 centos 系统. 前情回顾 由于大多数人使用的 Windows 电脑而工 ...

  10. Paper | Feedback Networks

    目录 读后总结 动机 故事 ConvLSTM图像分类网络 损失函数 与Episodic Curriculum Learning的结合 实验方法 发表在2017年CVPR. 读后总结 这篇论文旨在说明: ...