静态数组实现循环队列 c语言

来源:互联网 发布:日本程序员辛苦吗 编辑:程序博客网 时间:2024/05/01 12:25
#include<stdio.h>#include<malloc.h>#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\n",qQueue->data[(i+1)%Queue_Len]);i++;i=i%Queue_Len;//换一种好理解的//先找到下一个合法元素,找到再输出 //所以直接输出i 就可以了,因为i已经是要找的下一个元素。 //i++;//i=i%Queue_Len;//printf("%d\n",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;}}

0 0
原创粉丝点击