静态数组实现循环队列 c语言
程序员文章站
2022-11-08 23:52:31
#include
#include
#define Data_Type int
#define Queue_Len 5
//判断队满有两种方式,一种是加以个标记,比如说...
#include #include #define Data_Type int #define Queue_Len 5 //判断队满有两种方式,一种是加以个标记,比如说size。 //另一种是浪费一块空间,当占到N-1时,就算满。 typedef struct Queue{ Data_Type data[Queue_Len]; int front;//队头元素的前一个元素 int rear;// 队尾元素 //int size; 记录队列的大小 }QUEUE,* QQUEUE; void create(QQUEUE); bool isFull(QQUEUE); bool isEmpty(QQUEUE); bool add(QQUEUE,Data_Type); Data_Type out(QQUEUE); void traverse(QQUEUE); int main(void){ QUEUE queue ; create(&queue); add(&queue,1); add(&queue,2); add(&queue,3); add(&queue,4); out(&queue); add(&queue,5); out(&queue); add(&queue,6); out(&queue); add(&queue,7); traverse(&queue); } bool isFull(QQUEUE qQuere){ if((qQuere->rear+1)%Queue_Len==qQuere->front){ return true; } else{ return false; } } bool isEmpty(QQUEUE qQueue){ if(qQueue->front==qQueue->rear){ return true; }else{ return false; } } void create(QQUEUE qQueue){ qQueue->front=qQueue->rear=0; return; } void traverse(QQUEUE qQueue){ int i=qQueue->front; while(i!=qQueue->rear){ //这里比较绕,为什么输出时要取余? //首先front表示的是队首元素的前一个元素,肯定是不能输出的。 // 如果给他+1,则可以正常输出队首。 //但队尾会出问题,如果下标是队尾下标,+1则会超出数组长度 //所以再取余, 则输出正常 printf(%d ,qQueue->data[(i+1)%Queue_Len]); i++; i=i%Queue_Len; //换一种好理解的 //先找到下一个合法元素,找到再输出 //所以直接输出i 就可以了,因为i已经是要找的下一个元素。 //i++; //i=i%Queue_Len; //printf(%d ,qQueue->data[i]); } } bool add(QQUEUE qQueue,Data_Type val){ if(isFull(qQueue)){ return false; }else{ qQueue->rear = (qQueue->rear+1)%Queue_Len; qQueue->data[qQueue->rear]=val; return true; } } Data_Type out(QQUEUE qQueue){ if(isEmpty(qQueue)){ exit(-1); }else{ Data_Type val = qQueue->data[qQueue->front+1]; qQueue->front = (qQueue->front+1)%Queue_Len; return val; } }
上一篇: vue项目中vscode格式化配置和eslint配置冲突
下一篇: 抓出卡顿元凶,从分析掉帧开始