# Basic operation of circular queue (Experiment)

2022-04-23 15:03:00

# Preface

The following basic operations of circular queue are programmed ： Build a queue , Take the team leader element , The team , Out of the team .
Want to know the detailed explanation of circular queue Please order me
️ Personal home page ： Collection and attention , Never get lost ~
Now let's take a look at how to realize it

# One 、 Code implementation

``````#include <iostream>

using namespace std;

#define ERROR -1
#define OK 1

typedef int QElemType;
typedef int Status;

// Storage structure of circular queue
#define MAXQSIZE 100 // Maximum queue length
typedef  struct
{

QElemType *base;       // Used to dynamically allocate storage space
int  front;            // Team leader index
int  rear;             // End of team index
} SqQueue;

// initialization
void InitQueue (SqQueue &Q)
{

// Construct an empty queue
Q.base =new QElemType[MAXQSIZE];
Q.front=Q.rear=0;
}

// Destroy queue
void DestroyQueue(SqQueue &Q)
{

if(Q.base)
free(Q.base);
Q.base = NULL;
Q.front = Q.rear = 0;
}

// Clear queue
void ClearQueue(SqQueue &Q)
{

Q.front=Q.rear=0;
}
// Find the length
int  QueueLength (SqQueue Q)
{

return (Q.rear-Q.front+MAXQSIZE)%MAXQSIZE;
}

// Sentenced to empty
bool QueueEmpty (SqQueue Q)
{

return (Q.front==Q.rear);
}

// Find the team head element
Status GetHead (SqQueue Q, QElemType &e)
{

if(Q.front==Q.rear) return ERROR;
e=Q.base[Q.front];
return OK;
}

// Loop queue in
Status EnQueue(SqQueue &Q,QElemType e)
{

if((Q.rear+1)%MAXQSIZE==Q.front)  return ERROR;
Q.base[Q.rear]=e;
Q.rear = (Q.rear+1) % MAXQSIZE;
return OK;
}

// Loop queue out
Status DeQueue (SqQueue &Q,QElemType &e)
{

if(Q.front==Q.rear) return ERROR;
e=Q.base[Q.front];
Q.front=(Q.front+1) % MAXQSIZE;
return OK;
}

// Traversal causes the queue to display
void DisplayQueue(SqQueue Q)
{

int i=Q.front;
while(Q.front!=Q.rear && (i+MAXQSIZE) % MAXQSIZE != Q.rear)
{

cout<<Q.base[i]<<endl;
i++;
}
}
void show_help()
{

cout<<"******* Data Structure ******"<<endl;
cout<<"1---- Empty the circular queue "<<endl;
cout<<"2---- Determine whether the circular queue is empty "<<endl;
cout<<"3---- Find the length of the loop queue "<<endl;
cout<<"4---- Take the team leader element "<<endl;
cout<<"5---- The team "<<endl;
cout<<"6---- Out of the team "<<endl;
cout<<"7---- Show queue "<<endl;
cout<<"  sign out , Input 0"<<endl;

}
int main()
{

char operate_code;
show_help();
SqQueue Q;
InitQueue(Q);
QElemType e;
int i;
while(1)
{

cout<<" Please enter the operation code :";
cin>>operate_code;
if(operate_code=='1')
{

cout<<"The queue has been cleared."<<endl;
ClearQueue(Q);

}
else if (operate_code=='2')
{

if(QueueEmpty(Q))
cout<<"The queue is empty."<<endl;
else
cout<<"The queue is not empty."<<endl;

}
else if (operate_code=='3')
{

cout<<"The length of queue is:"<<QueueLength(Q)<<endl;

}
else if (operate_code=='4')
{

cout<<" The team leader element is ："<<endl;
else cout <<"error"<<endl;
}
else if (operate_code=='5')
{

cout<<" Please enter the number of you want to join the team ："<<endl;
cin>>e;
EnQueue(Q,e);
}
else if (operate_code=='6')
{

cout<<" The outgoing element is ："<<endl;
if(DeQueue(Q,e)) cout<<e<<endl;
}
else if (operate_code=='7')
{

cout<<"The contents of the queue are:"<<endl;
DisplayQueue(Q);
}
else if (operate_code=='0')
{

break;
}
else
{

cout<<"\n Opcode error ！！！"<<endl;
show_help();
}
}
// Call the destroy stack function
DestroyQueue(Q);
return 0;
}
``````

# summary

This paper is used to introduce the code implementation process and running result example of circular queue in data structure . Displays the initialization of the circular queue in a menu style 、 Empty 、 The destruction 、 Find the length 、 Find the team head element 、 Sentenced to empty 、 The team 、 Out of the queue and traverse the queue to display .

https://yzsam.com/2022/04/202204231410400529.html