#define _CRT_SECURE_NO_WARNINGS //去掉安全检查
#include<stdio.h>//标准的输入输出文件
#include<stdlib.h>//使用system函数
#include<Windows.h>
#include<time.h>
#include<string.h>
#include<math.h>
#include<limits.h>//极限的头文件
#define N 50 //定义队列最大有多少个,先定义一个常量,用数组的方式来实现
#define datatype char //定义数据类型,把datatype替换为char类型,就可以用datatype实现全局修改
//datatype就是 数据类型的意思,int float等等
//结构体队列
struct queue
{
//首先定义一个数组,用datatype作为数据类型,
datatype data[N];//存放数据的数组
//接下来需要两个下标,分别为int front 和int rear
int front;//允许删除的一端称为队头
int rear;//允许插入的一端称为队尾
};
//下面是队列的接口
typedef struct queue QUEUE;//简化struct queue;
//接下来实现队列的封装,要实现几个函数?
void initQUEUE(QUEUE *sq);//s代表顺序,q代表队列,sq顺序队列,这个函数作用是初始化顺序队列
//接下来判定队列是否为空
int isempty(QUEUE *sq);//判断队列是否为空
//除了判断队列是否为空外,换要获取开头的元素
datatype gethead(QUEUE *sq);//获取队列第一个元素,传入一个队列指针,
//接下来实现入队,传递一指针,还需要传入一数据实现入队
void enQUEUE(QUEUE *sq,datatype data);//实现队列入队
void deQUEUE(QUEUE *sq);//实现队列出队
//接下来挨个挨个实现他们
void initQUEUE(QUEUE *sq)
{
sq->front = sq->rear = 0;//实现队列的初始化,等价于清空
}
int isempty(QUEUE *sq)//为空的时候,开头和末尾是重合的,队列为空返回1,否则为0
{
if (sq->front==sq->rear)//意味着队头和队尾重合,意味着为空
{
return 1;//为空返回1
}
else{
return 0;//否则返回0
}
}
datatype gethead(QUEUE *sq)
{
if (sq->front==sq->rear)
{
return -1;//为空返回-1,否则就返回第一个节点的正常数据
}
return sq->data[sq->front];//返回第一个节点的数据
}
//入队等价于我们往里面插入一个数据
void enQUEUEQ(QUEUE *sq,datatype data)
{
}
void deQUEUE(QUEUE *sq)
{
if (sq->rear==N)//sq->rear==N意味着已经满了,只能放下n-1个元素,N 即使数组有多少个元素
{
printf("已经满了");
return;
}
sq->data[sq->rear] = data;//入队
sq->rear++;//下标移动一个
}
void main()
{
system("pause");
}
#include<stdio.h>//标准的输入输出文件
#include<stdlib.h>//使用system函数
#include<Windows.h>
#include<time.h>
#include<string.h>
#include<math.h>
#include<limits.h>//极限的头文件
#define N 50 //定义队列最大有多少个,先定义一个常量,用数组的方式来实现
#define datatype char //定义数据类型,把datatype替换为char类型,就可以用datatype实现全局修改
//datatype就是 数据类型的意思,int float等等
//结构体队列
struct queue
{
//首先定义一个数组,用datatype作为数据类型,
datatype data[N];//存放数据的数组
//接下来需要两个下标,分别为int front 和int rear
int front;//允许删除的一端称为队头
int rear;//允许插入的一端称为队尾
};
//下面是队列的接口
typedef struct queue QUEUE;//简化struct queue;
//接下来实现队列的封装,要实现几个函数?
void initQUEUE(QUEUE *sq);//s代表顺序,q代表队列,sq顺序队列,这个函数作用是初始化顺序队列
//接下来判定队列是否为空
int isempty(QUEUE *sq);//判断队列是否为空
//除了判断队列是否为空外,换要获取开头的元素
datatype gethead(QUEUE *sq);//获取队列第一个元素,传入一个队列指针,
//接下来实现入队,传递一指针,还需要传入一数据实现入队
void enQUEUE(QUEUE *sq,datatype data);//实现队列入队
void deQUEUE(QUEUE *sq);//实现队列出队
//接下来挨个挨个实现他们
void initQUEUE(QUEUE *sq)
{
sq->front = sq->rear = 0;//实现队列的初始化,等价于清空
}
int isempty(QUEUE *sq)//为空的时候,开头和末尾是重合的,队列为空返回1,否则为0
{
if (sq->front==sq->rear)//意味着队头和队尾重合,意味着为空
{
return 1;//为空返回1
}
else{
return 0;//否则返回0
}
}
datatype gethead(QUEUE *sq)
{
if (sq->front==sq->rear)
{
return -1;//为空返回-1,否则就返回第一个节点的正常数据
}
return sq->data[sq->front];//返回第一个节点的数据
}
//入队等价于我们往里面插入一个数据
void enQUEUEQ(QUEUE *sq,datatype data)
{
}
void deQUEUE(QUEUE *sq)
{
if (sq->rear==N)//sq->rear==N意味着已经满了,只能放下n-1个元素,N 即使数组有多少个元素
{
printf("已经满了");
return;
}
sq->data[sq->rear] = data;//入队
sq->rear++;//下标移动一个
}
void main()
{
system("pause");
}