王道考研数据结构与算法第三章:循环队列;如需修改,请指正!
//
// Created by 瞿盟 on 2023/9/17.
// 循环队列
#define MAX_SIZE 10
typedef struct Queue_List{
int data[MAX_SIZE];
int size;
int front,rear;
}Queue_List;
void init_queue_arr(Queue_List &Q){
Q.front = Q.rear = 0;
Q.size = 0;
}
bool push_element_arr(Queue_List &Q,int e){
if(Q.size == MAX_SIZE) //队满情况
return false;
Q.data[Q.rear] = e;
Q.rear = (Q.rear + 1) % MAX_SIZE; //让队尾指针指向下一个为空的位置
Q.size++; //长度 + 1
return true;
}
int dequeue_element_arr(Queue_List &Q){
if((Q.rear + 1) % MAX_SIZE == Q.front) //队空的情况
return false;
int x = Q.data[Q.front]; //带回出队的值
Q.front = (Q.front + 1) % MAX_SIZE; //队尾指针指向下一个有效元素
return x;
}
void print_queue_arr(Queue_List &Q){
for(int i = Q.front;i < Q.size;i++)
cout << Q.data[i] << " " << endl;
}
int get_valid_el_count(Queue_List &Q){
return (Q.rear - Q.front + MAX_SIZE) % MAX_SIZE;
}
bool queue_is_empty(Queue_List &Q){
return Q.front == Q.rear;
}
void queue_base_on_array(){
Queue_List Q;
init_queue_arr(Q);
push_element_arr(Q,1);
push_element_arr(Q,2);
push_element_arr(Q,3);
push_element_arr(Q,4);
int del_el_arr[] = {
dequeue_element_arr(Q),
dequeue_element_arr(Q)
};
for(int e : del_el_arr){
cout << "已出队的元素为:" << e << " " << endl;
}
print_queue_arr(Q);
cout << "队列中有效元素个数为:" << get_valid_el_count(Q) << endl;
if(queue_is_empty(Q))
cout << "队列为空!" << endl;
else
cout << "队列不为空!" << endl;
}