模拟循环队列

//循环队列的实现
 #include<stdio.h>
 //定义队列数据类型
 //rear指向队尾元素下标的下一个下标,front指向对头元素的下标 
 typedef struct Queue{
 	int *pBase;//一个数组 等于int pBase[] 
	int front;//对头指针 
	int rear;  //队尾指针 
 	
 } QUEUE,*PQUEUE;	
 	
 //初始化队列
 void init(PQUEUE queue)
 {
 	//动态开辟一个数组
	 queue->pBase = (int *)malloc(sizeof(int)*6); //数组的长度为6 
 	  if(queue->pBase==NULL){
 	  	printf("动态内存分配失败");
 	  	exit(-1);//结束程序 
	   }
	   else{
	   	 	  //设置初始状态:front=rear=0(这是队列为空的一种情况)
				  queue->front=queue->rear=0; 
				   

	   } 
	 }	
	 
	 //入队操作
	 int en_queue(PQUEUE queue,int val)//返回0表示入队失败,1表示入队成功 
	 {
	 	if(full_queue(queue))
	 	{
	 		//队列已经满了
			 printf("队列已经满了,入队失败\n");
			 return 0; 
	 		
		  } else{
		  	//队列还没有满
			  queue->pBase[queue->rear]=val;//将要插入的值赋到rear的下一个位置
			  queue->rear=(queue->rear+1)%6;//rear上移
			  return 1; 
		  }
	 	
	 	 
	  } 
	  
	  //判断队列是否已满 
	  //**使用空出数组的一个位置来保证不和数组为空的条件冲突 
	  int full_queue(PQUEUE queue)//返回0数组没有满,1表示数组已满 
	  {
	  	//当rear和front相邻,即数组已满
		  if((queue->rear+1)%6==queue->front){//数组已经满 
		  printf("队列已经满了\n");
		  	return 1;
		  } else{
		  	return 0;//队列并没有满 
		  }
	  }
	  
	  
//输出队列
void traverse_queue(PQUEUE queue)
{
	//我们进行遍历queue(从对头到队尾)
	 int p = queue->front;
	 while(p!=queue->rear)
	 {
		printf("%d   ",queue->pBase[p])	;
		p=(p+1 )%6;	
	 }
	
	
}

//出队操作
//返回0表示出队失败,返回1表示出队成功 
int out_queue(PQUEUE queue,int *val)//val用于保存删除的元素 
{
	if(empty(queue)){//队列为空 
		printf("队列为空,出队失败\n");
		return 0; 
	}else{//队列非空 
		*val=queue->pBase[queue->front];//将要出队的元素赋值给*val
		queue->front =(queue->front+1)%6;//front指针移到下一个为子 
		return 1; 
	}
}
//判断队列是否为空 
int empty(PQUEUE queue)//返回1表示为空,返回0表示队列不为空 
{
//**:当front==rear队列为空
if(queue->front==queue->rear){
	return 1;//为空 
}else{
	return 0;//不为空 
	
}
	
	
	
}

	  
 int main()
 {
 int val;
 QUEUE queue;//定义一个队列 
 init(&queue);
 
 en_queue(&queue,3);
 en_queue(&queue,2);
 en_queue(&queue,1);
 en_queue(&queue,0);
 en_queue(&queue,0);
//en_queue(&queue,0);


 traverse_queue(&queue);
// printf("hello world\n");
 	
 	
 	return  0;
  } 
posted @ 2023-09-14 16:24  一往而深,  阅读(7)  评论(0编辑  收藏  举报