队列-顺序(循环)队列及其简单算法

#include <stdio.h>
#define Max 100
//结构体
typedef struct Queue{
	int data[Max];
	int front;//队头下标
	int rear;//队尾下标
}Queue;
//初始化队列
void init(Queue ** que){
	(*que) = (Queue*)malloc(sizeof(Queue));
	(*que)->front = (*que)->reat = 0;
}
//判断队空
int isEmpty(Queue * que){
	if(que->front == que->reat){//队头队尾下标相等则为空
		return 1;
	}else{
		return 0;
	}
}
//判断队满
int isFull(Queue * que){
	if((que->rear+1)%Max == front){//此为循环队列的判断(若是不循环则直接判断rear是否等于max-1)
		return 1;
	}else{
		return 0;
	}
}
//入队
int push(Queue * que,int x){
	if(isFull(que)){//先判断是否队满
		return 0;//队满则入队失败
	}else{
			que->rear = (que->reat+!)%Max;//先将rear移动
			que->data[que->rear] = x;//给移动过后的队头位置赋值
			return 1;
	}
}

//出队
int pop(Queue * que,int *x){
	if(isEmpty(que)){//判断是否队空
		return 0;
	}else{
		que->front = (que->front+!)%Max;//先移动队头指针
		(*x) = que->data[que->front];
		return 1;
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值