循环队列(顺序存储)

#include<stdio.h>
#include<stdlib.h>
#define MAXQSIZE 100
#define ERROR 0
#define OK 1
typedef int QElemType;
typedef int Status;
typedef struct{
	QElemType *base;
	int front;
	int rear;
}SqQueue;
Status InitQueue(SqQueue &Q){
	Q.base=(QElemType*)malloc(MAXQSIZE*sizeof(QElemType));
	if(!Q.base) return ERROR;
	Q.front=Q.rear=0;
	return OK;
}
int QueueLength(SqQueue Q){
	return (Q.rear-Q.front+MAXQSIZE)%MAXQSIZE;
}
//往队尾插入元素 
Status EnQueue(SqQueue &Q,QElemType &e){
	if((Q.rear+1)%MAXQSIZE==Q.front) return ERROR; //满了
	Q.base[Q.rear]=e;
	Q.rear=(Q.rear+1)%MAXQSIZE;
    return OK; 
}
//队首删除元素
Status DeQueue(SqQueue &Q,QElemType &e){
	if(Q.front==Q.rear) return ERROR;
	e=Q.base[Q.front];
	Q.front=(Q.front+1)%MAXQSIZE;
	return OK;
} 
//判空
bool QueueEmpty(SqQueue Q){
	if(Q.front==Q.rear) return true;
	else return false;
}
//清空
void ClearQueue(SqQueue &Q){
	Q.front=Q.rear=0;
}
//销毁
void DestroyQueue(SqQueue &Q){
	if(Q.base) free(Q.base);
	Q.base=NULL;
	Q.front=Q.rear=0;
} 
void DisplayQueue(SqQueue Q){
	int i=Q.front;
	while(Q.front!=Q.rear&&(i+MAXQSIZE)%MAXQSIZE!=Q.rear){
		printf("%d ",Q.base[i]);
		i++;
	}
}
//求队头元素
Status GetHead(SqQueue Q,QElemType &e)
{
   if(Q.front==Q.rear) return ERROR;
   e=Q.base[Q.front]; 
   return OK;	
}
int main(){
	SqQueue Q;
	InitQueue(Q);
	int e; int n;
	printf("请输入要入队的个数:\n");
	scanf("%d",&n);
	for(int i=0;i<n;i++){
	scanf("%d",&e);
	EnQueue(Q,e);
    }
    DisplayQueue(Q);
    printf("该队列的长度为:%d\n",QueueLength(Q));
    int a=0;
	DeQueue(Q,a);
	DisplayQueue(Q);
	printf("\n"); 
	printf("该队列的队头元素为:");
	if(GetHead(Q,e)){
	printf("%d\n",e);
}
    if(QueueEmpty(Q)){
    	printf("队列为空\n");
	}else{
	    printf("队列不为空\n");
	}
	printf("该队列的长度为:%d",QueueLength(Q));
	ClearQueue(Q);
	DestroyQueue(Q);
    return 0; 
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值