//循环链表 //牺牲一个单元来区分队空还是队满 #include <stdio.h> #include <stdbool.h> #define MAXSIZE 6 typedef struct { int data[MAXSIZE]; int front,rear; }CySqQueue; void initCySqQueue(CySqQueue *C)//初始化循环链表 { C->front=0; C->rear=0; } bool isEmpty(CySqQueue C)//判断是否为空 { if(C.front==C.rear) { return true; } else { return false; } } bool EnCyQueue(CySqQueue *C,int e)//!!入队 { if((C->rear+1)%MAXSIZE==C->front)//重点,判断队是否已满 { return false; } else { C->data[C->rear]=e; C->rear=((C->rear)+1)%MAXSIZE;//通过此条语句来实现循环队列 return true; } } bool DeCyQueue(CySqQueue *C,int *e)//出队操作 { if(isEmpty(*C))//判断队是否为空 { return false; } else { *e=C->data[C->front]; C->front=(C->front+1)%MAXSIZE;//!!重点,不要忘记对MAXSIZE求余 return true; } } int main() { CySqQueue C; initCySqQueue(&C); int x; for(int i =0;i<MAXSIZE-1;i++) { scanf("%d",&x); EnCyQueue(&C,x); } printf("C.front: %d C.rear: %d\n",C.front,C.rear); printf("front_value: %d rear_value: %d\n",C.data[C.front],C.data[C.rear-1]);//rear当前所指的是牺牲区,所以rear-1才是最后一个元素 int *e; int a=0; e=&a; DeCyQueue(&C,e); printf("out_value: %d C.front: %d\n",*e,C.front); EnCyQueue(&C,888); printf("%d %d",C.rear,C.data[5]);//?,不能用rear-1来获取最后一个元素,因为当rear等于0时,rear-1为-1不存在 return 0; }
标签:01,return,04,int,MAXSIZE,CySqQueue,front,基本操作,rear From: https://www.cnblogs.com/ryuichi-ssk/p/17278110.html