#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
//定义循环队列
typedef struct Queue{
int *pBase; //数组的首地址
int front; //指向队列的第一个有效元素
int rear; //指向队列最后一个有效元素的下一个节点
}*QUEUE;
//方法声明
void init_Stack(QUEUE); //初始化队列
void entry_Queue(QUEUE,int); //入队
bool out_Queue(QUEUE,int *); //出队
bool is_empty(QUEUE); //判断队列是否为空
bool is_full(QUEUE); //判断队列是否已满
void traverse(QUEUE); //遍历队列元素
int main(void){
Queue qu;
printf("初始化队列中......\n");
init_Stack(&qu); //初始化队列
printf("开始入队......\n");
entry_Queue(&qu,1); //入队
entry_Queue(&qu,2);
entry_Queue(&qu,3);
entry_Queue(&qu,4);
entry_Queue(&qu,5);
printf("显示队列中的元素值......\n");
traverse(&qu); //遍历队列元素
printf("继续入队......\n");
entry_Queue(&qu,6);
printf("开始出队......\n");
int value;
if(out_Queue(&qu,&value)){ //出队
printf("出队成功,被弹出的元素是: %d\n",value);
}else{
printf("出队失败!\n");
exit(-1);
}
printf("出队后,队列中剩余的元素值......\n");
traverse(&qu);
return 0;
}
//初始化队列
void init_Stack(QUEUE queue){
queue->pBase = (int*)malloc(sizeof(int)*6); //初始化数组代大小
if(queue->pBase==NULL){
printf("动态内存分配失败......\n");
exit(-1);
}else{
queue->front = 0;
queue->rear = 0;
}
}
//判断队列是否已满
bool is_full(QUEUE queue){
if((queue->rear+1)%6 == queue->front){
return true;
}else{
return false;
}
}
//入队
void entry_Queue(QUEUE queue,int val){ //front不变,改变rear
if(is_full(queue)){
printf("队列已满,不能再入队......\n");
// exit(-1);
}else{
queue->pBase[queue->rear] = val; //队列未满,将val存到rear所指向的位置
queue->rear = (queue->rear+1)%6;
}
}
//判断队列是否为空
bool is_empty(QUEUE queue){
if(queue->front == queue->rear){
return true;
}else{
return false;
}
}
//出队
bool out_Queue(QUEUE queue,int *val){ //rear不变,改变front
if(is_empty(queue)){
return false;
}else{
*val = queue->pBase[queue->front];
queue->front = (queue->front+1)%6;
}
}
//遍历队列元素,从front到rear
void traverse(QUEUE queue){
if(is_empty(queue)){
printf("队列为空,不能遍历元素......\n");
exit(-1);
}else{
int r = queue->front;
while(r!= queue->rear){
printf("%d ",queue->pBase[r]);
r= (r+1)%6;
}
}
printf("\n");
}
数据结构之队列的相关操作
最新推荐文章于 2022-07-08 21:52:40 发布