队列

//为了做广度优先遍历,将此顺序队列文件引入图的相关程序中 
#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; 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值