#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;
}
循环队列(顺序存储)
最新推荐文章于 2024-09-14 22:25:23 发布