/* 1.初始化
  2.进队列
  3.出队列
  4.读取队列
  5.判断队列是否为空
  6.判断队列是否已满
  7.求队列长度 
*/

#include<stdio.h>
#define maxsize 5
typedef struct {
	int data[maxsize];
	int front,rear;
}CircQueue;

//循环队列的初始化,令对头队尾指针归零 
void InitQueue(CircQueue &L){
	L.rear=L.front=0; 
} 

//进队列
void EnQueue(CircQueue &L,int x){
	if((L.rear+1)%maxsize==L.front){
		printf("循环队列已满!不能再输入数据!\n");
		return; 
	}
    L.data[L.rear]=x;
    L.rear=(L.rear+1)%maxsize;	
    return;
	}
	
//出队列
void DeQueue(CircQueue &L){
	if(L.rear==L.front){
		printf("循环队列为空!");
		return;
	}
	printf("%d",L.data[L.front]);
	L.front=(L.front+1)%maxsize;
	return; 
}

//读取对头元素
void GetFront(CircQueue &L){
	int x;
	if(L.rear==L.front){
		printf("循环队列为空,不存在对头元素!");
		return;
	}
	x=L.data[L.front];
	printf("对头元素为:%d\n",x);
	return; 
}

//半段队列是否为空
void QueueEmpty(CircQueue &L){
	if(L.rear==L.front){
		printf("循环队列为空!");
		return;
	}
}	

//半段队列是否已满
void QueueFull(CircQueue &L){
	if((L.rear+1)%maxsize==L.front){
		printf("循环队列已满!");
		return;
	}
} 

//求队列长度
int QueueSize(CircQueue &L){
	int count;
	count=(L.rear-L.front+maxsize)%maxsize;
	//printf("循环队列的长度为:",count);
	return count;
} 

//删除对头元素
void DeQueue1(CircQueue &L){
	if(L.rear==L.front){
		return;
	}
	L.front=(L.front+1)%maxsize;
	printf("删除对头元素后的对头元素为:%d\n",L.data[L.front]);
	return;
} 

//主函数
int main(){
	int i,n,x,k;
	CircQueue L;
	InitQueue(L);
	printf("请约定一个结束进队的数:");
	scanf("%d",&n);
	for(i=0;i<maxsize;i++){
		printf("请输入数据:");
		scanf("%d",&x);	
		if(x==n){
			break;
		}
	    EnQueue(L,x);
		if(L.rear==maxsize-1){
			break;
		}	
	}	
	GetFront(L); 
	DeQueue1(L);
	k=QueueSize(L);
	printf("循环队列长度为:%d\n",k);
	
	printf("出对!\n");
	for(i=0;i<k;i++){
		DeQueue(L);	
	}

	return 0;
} 
	
	

  

 

 

 

posted on 2019-05-15 19:44  卢思林  阅读(208)  评论(1编辑  收藏  举报