队列的基本操作

队列: 先进先出结构

限定性数据结构的双端队列:
输出受限的双端队列: 一个端点允许插入和删除,另一个端点只允许插入的双端队列
输入受限的双端队列: 一个端点允许插入和删除,另一个端点只允许删除的双端队列

head=rear 队空
(read+1)%size=head 队满

队列实现
头文件:

typedef int ElemType;
#define MAXQSIZE 10

typedef struct Queue
{
 ElemType *base;
 int      head;
 int      rear;
}SqQueue;

//初始化
void InitQueue(SqQueue *que);
//判空
int EmptyQueue(SqQueue *que);
//判满
int FullQueue(SqQueue *que);
//入队
int PushQueue(SqQueue *que,ElemType val);
//获取头结点
int GetHead(SqQueue *que, ElemType *val);
//出队
int PopQueue(SqQueue *que,ElemType *val);
//清除数据
void ClearQueue(SqQueue *que);
//销毁队列
void DistoryQueue(SqQueue *que);

功能实现:

#include<stdio.h>
#include<assert.h>
#include<stdlib.h>
#include"queue.h"
//判空
static void DeterPointNull(SqQueue *que)
{
 assert(que!=NULL);
 if(que==NULL)
 {
  exit(0);
 }
}
//初始化
void InitQueue(SqQueue *que)
{
 DeterPointNull(que);
 
 que->base=(ElemType *)malloc(sizeof(ElemType)* MAXQSIZE);
 assert(que->base!=NULL);
 
 que->head=que->rear=0;
}
//判空
int EmptyQueue(SqQueue *que)
{
 DeterPointNull(que);
 
 if(que->head == que->rear)
 {
  return 1;
 }
 return 0;
}
//判满
int FullQueue(SqQueue *que)
{
 DeterPointNull(que);
 
 if((que->rear+1)%MAXQSIZE==que->head)
 {
  return 1;
 }
 return 0;
}
//入队
int PushQueue(SqQueue *que,ElemType val)
{
 DeterPointNull(que);
 
 if(FullQueue(que))
 {
  return 0;
 }
 que->base[que->rear]=val;
 que->rear=(que->rear+1)%MAXQSIZE;
 
 return 1;
}
//获取头结点
int GetHead(SqQueue *que, ElemType *val)
{
 DeterPointNull(que);
 
 if(EmptyQueue(que))
 {
  return 0;
 }
 *val=que->base[que->head];
 
 return 1;
}
//出队
int PopQueue(SqQueue *que,ElemType *val)
{
 DeterPointNull(que);
 
 if(!GetHead(que,val))
 {
  return 0;
 }
 que->head=(que->head+1)%MAXQSIZE;
 
 return 1;
}
//清除数据
void ClearQueue(SqQueue *que)
{
 DeterPointNull(que);
 
 que->head=que->rear=0;
}
//销毁队列
void DistoryQueue(SqQueue *que)
{
 DeterPointNull(que);
 
 free(que->base);
 que->base=NULL;
 que->head=que->rear=0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值