//头文件queue.h #pragma once #include<assert.h> #include<iostream> using namespace std; typedef int ElemType; #define MAX_SIZE 8 typedef struct Queue { ElemType *base; int front; int rear; size_t capacity; }Queue; /////////////////////////////// void Init_queue(Queue *Q) { Q->base = (ElemType *)malloc(sizeof(ElemType)*(MAX_SIZE)); assert(Q->base != NULL); Q->front=Q->rear=0; Q->capacity = MAX_SIZE; } bool en_queue(Queue *Q,ElemType x) { if((Q->rear+1)%MAX_SIZE == Q->front) return false; Q->base[Q->rear] = x; Q->rear =(Q->rear+1) % MAX_SIZE; return true; } bool de_queue(Queue *Q) { if(Q->rear == Q->front) return false; Q->front = (Q->front+1)%MAX_SIZE; return true; } void show_queue(Queue *Q) { if(Q->front == Q->rear) return ; int i=Q->front; while(i != (Q->rear)) { cout<<Q->base[i]<<"<-"; i = (++i)%MAX_SIZE; } cout<<"endl"<<endl; }
#include"queue.h" void main() { Queue sq; Init_queue(&sq); en_queue(&sq,1); en_queue(&sq,2); en_queue(&sq,3); en_queue(&sq,4); en_queue(&sq,5); en_queue(&sq,6); en_queue(&sq,7); de_queue(&sq); en_queue(&sq,8); de_queue(&sq); en_queue(&sq,9); show_queue(&sq); }
注意:循环队列有一个空间用来标记,不存储数据
分析:首先1,2。3,4。5,6,7入队。此时已满。
因为1出队,所以8能够入队,又因为2出对所以9能够入队。
出入队过程: