# include <stdio.h>
/**
* 时间:2016年6月12日 15:12:07
* 内容:顺序队列
*/
# define QueueSize 40// 队列的最大长度
typedef char DataType;
typedef struct Squeue
{
DataType queue[QueueSize];
int front,rear;
}SeqQueue;
void InitQueue(SeqQueue*);// 初始化队列
int QueueEmpty(SeqQueue);// 判断队列是否为空
int EnterQueue(SeqQueue*,DataType);// 入队
int DeleteQueue(SeqQueue*,DataType*);// 删除队首
int main(void)
{
SeqQueue Q;
int i,length=8;
char str[]="ABCDEFGH";
char x;
InitQueue(&Q);
for (int i=0;i<length;i++)
if(EnterQueue(&Q,str[i]))
printf("成功%d ", i+1);
printf("\n");
DeleteQueue(&Q,&x);
printf("出队列的元素为:%c\n", x);
// 事实上,哪怕出队列了,但是在第一个内存空间还是未被释放的.
// 这种现象叫做"假溢出",会造成内存浪费,所以一般使用循环队列
printf("顺序队列中的元素为:");
if (!QueueEmpty(Q))
for (i=Q.front;i<Q.rear;i++)
printf("%c ", Q.queue[i]);
printf("\n");
return 0;
}
/**
* 初始化队列
* @param SQ 队列指针
*/
void InitQueue(SeqQueue* SQ)
{
SQ->front=0;
SQ->rear=0;
}
/**
* 判断队列是否为空
* @param SQ 队列指针
* @return 返回是否成功,成功为1,不成功为0
*/
int QueueEmpty(SeqQueue SQ)
{
if (SQ.front==SQ.rear)
return 1;
else
return 0;
}
/**
* 入队
* @param SQ 队列指针
* @param x 插入元素
* @return 返回是否成功,成功为1,不成功为0
*/
int EnterQueue(SeqQueue* SQ,DataType x)
{
if (SQ->rear==QueueSize-1)
return 0;
else
{
SQ->queue[SQ->rear]=x;
SQ->rear+=1;
return 1;
}
}
/**
* 删除队头指针
* @param SQ 队列指针
* @param e 删除元素的值返回给*e
* @return 返回是否成功,成功为1,不成功为0
*/
int DeleteQueue(SeqQueue* SQ,DataType* e)
{
// 判断队列是否为空,一旦为空就不能删除队首
if (SQ->front==SQ->rear)
return 0;
else
{
*e=SQ->queue[SQ->front];
SQ->front+=1;
return 1;
}
}
顺序队列
最新推荐文章于 2022-05-09 22:27:24 发布