//为了做广度优先遍历,将此顺序队列文件引入图的相关程序中
#include <stdio.h> //使用了标准库函数
#include <stdlib.h> //使用了动态内存分配函数
#define OVERFLOW -2 //内存溢出错误常量
#define ILLEGAL -1 //非法操作错误常量
#define OK 1 //表示操作正确的常量
#define ERROR 0 //表示操作错误的常量
#define MAXQSIZE 100 //队列的最大长度
typedef int Status;
typedef int QElemType;
typedef struct //循环队列的C语言描述
{
QElemType *base; //初始化动态分配存储空间
int front; //头指针,若队列不空,指向队头元素
int rear; //尾指针,若队列不空,指向队尾元素的下一个位置
}SqQueue;
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>1.初始化循环队列<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Status InitQueue_Sq(SqQueue &Q) //初始化循环队列
{ //构建一个空队列 Q
if(!(Q.base=(QElemType *)malloc(sizeof(QElemType)))){ //申请内存空间,若失败则提示并退出程序
printf("内存分配失败,程序即将退出!\n");
exit(OVERFLOW);
}
Q.front=Q.rear=0;
return OK;
}
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>2.销毁循环队列<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Status DestoryQueue_Sq(SqQueue &Q)
{ //销毁队列Q
free(Q.base);
Q.base=NULL;
printf("循环队列已成功销毁!\n");
return OK;
}
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>3.判断链队列是否为空<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Status QueueEmpty_Sq(SqQueue Q)
{ //若Q为空队列,则返回OK;否则返回ERROR
if(Q.rear==Q.front) //队列为空的标志
return OK;
else
return ERROR;
}
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>4.在链队列中插入元素(入队)<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Status EnQueue_Sq(SqQueue &Q,QElemType e)
{ //插入元素e为Q的新的队尾元素e
if((Q.rear+1)%MAXQSIZE==Q.front) //队列满
return ERROR;
Q.base[Q.rear]=e;
Q.rear=(Q.rear+1)%MAXQSIZE; //每插入一个新队尾元素,尾指针增一
return OK;
}
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>5.在链队列中删除元素(出队)<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Status DeQueue_Sq(SqQueue &Q,QElemType &e)
{ //若队列不空,则删除Q的队头元素,用e返回其值,并返回OK,否则返回ERROR
if(Q.front==Q.rear) //判空
return ERROR;
e=Q.base[Q.front];
Q.front=(Q.front+1)%MAXQSIZE; //每当删除队头元素时,头指针增1
return OK;
}
队列
最新推荐文章于 2024-12-01 23:55:34 发布