纯C语言实现顺序队列
#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语言实现顺序队列的更多相关文章
- 队列的含义以及C语言实现顺序队列
队列,和栈一样,也是一种对数据的"存"和"取"有严格要求的线性存储结构. 什么是队列 与栈结构不同的是,队列的两端都"开口",要求数据只能从 ...
- 纯C语言实现顺序栈
#include <stdio.h> #include <stdlib.h> #define MAXSIZE 100 typedef int SElemType; typede ...
- C语言顺序队列
顺序队列是一种只能在一头进和另一头出的数据结构,所以结构体里设2个指针分别指向头部和尾部,用数组来存储数据. #define MAXSIZE 1024 typedef int elemtype; ty ...
- 数据结构 - 顺序队列的实行(C语言)
数据结构-顺序队列的实现 1 顺序队列的定义 线性表有顺序存储和链式存储,队列作为一种特殊的线性表,也同样存在这两种存储方式.我们先来看队列的顺序存储结构. 队列的顺序储存结构:用数组存储队列,为了避 ...
- 顺序队列与链式队列--C语言实现
关于队列,因为我自己在平时使用不多,所以在这里直接将队列的两种存储方式放在一起,作为一篇随笔,这两份代码均可直接运行,亲测.注释写的应该也算比较详细了,就不过多的解释了 顺序队列 #include&l ...
- C语言实现,队列可伸缩
两个栈实现一个队列,C语言实现,队列可伸缩,容纳任意数目的元素. 一.思路:1.创建两个空栈A和B:2.A栈作为队列的入口,B栈作为队列的出口:3.入队列操作:即是入栈A:4.出队列操作:若栈B为空, ...
- 顺序队列C/C++实现
#include <iostream> using namespace std; const int MAXSIZE = 1000; typedef int ELEMTYPE; const ...
- C语言 串 顺序结构 实现
一个能够自动扩容的顺序结构的串 ArrString (GCC编译). /** * @brief C语言 串 顺序结构 实现 * @author wid * @date 2013-11-01 * * @ ...
- 数据结构Java实现07----队列:顺序队列&顺序循环队列、链式队列、顺序优先队列
一.队列的概念: 队列(简称作队,Queue)也是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置插入和删除,而队列只允许在其一端进行插入操作在其 ...
随机推荐
- Clean Code
书名<代码整洁之道> 命名 有意义的命名,使人能读懂 类名和对象名应该是名称或名称短语 方法名应该是动词或动词短语 函数 短小,函数块不要超过一个屏幕 ...
- IAP15W4K58S4引脚定义 STC15
- ios获取摄像头
NSError *error = nil; session = [[AVCaptureSession alloc] init] ; session.sessionPreset = AVCaptureS ...
- PHP连接Navicat For Mysql并取得数据
Navicat For Mysql中新建数据库 数据库中新建表 保存表 表中添加数据 打开ide,输入以下php代码,使用localhost打开该php文件 <?php // ip地址.用户名. ...
- c# 第31节 构造函数与析构函数、new关键字作用
本节内容: 1:构造和析构的简介 2:构造函数的定义和使用 3:new关键字的作用 4:析构函数的定义和使用 1:构造和析构的简介 2:构造函数的定义和使用 构造函数: 当实例化的一个对象,就默认执行 ...
- Html学习之十九(表格与表单学习--邮箱注册页面设计)
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Html学习之十七(表格与表单学习--排行版制作)
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Linux学习笔记-第17天 有点赶
第十章开始进度感觉有些快,该加把劲儿了
- Dockerfil
Dockerfile简介 dockerfile 是一个文本格式的配置文件, 用户可以使用 Dockerfile 来快速创建自定义的镜像,另外,使用Dockerfile去构建镜像好比使用pom去构建ma ...
- vbs与其他语言进行交互编程(外存传参)
vbs没有自定义排序函数.无需自己造轮子,可以用其他语言来完成这个任务(在传递数据比较简单的情况下,例如只传递数组). 首先用5分钟写一个C++排序的代码.命名为“mysort.cpp”: #incl ...