当前位置:网站首页>Have you learned the basic operation of circular queue?
Have you learned the basic operation of circular queue?
2022-04-23 15:03:00 【White folding fan y】
Newcomer Xiaobai's first blog
️ I hope you will pay more attention
It will be updated frequently in the future ~️ Personal home page : Collection and attention , Never get lost ~ ️
Preface
Tips: It's a little long , Little Lord, be patient ~
Programming to achieve the basic operation of circular queue : Build a queue , Take the team leader element , The team , Out of the team
One 、 What is a circular queue ?
1️⃣ Let's first introduce the linear table : The data structure is divided into linear structure and nonlinear structure , Queues and linear tables are linear structures . The linear table is written by n A finite sequence of data elements , The sequence has a unique “ first ” And unique “ the last one ” data elements ; except “ first ” and “ the last one ” outside , Each data element in the queue has only one direct precursor and one direct successor . The insertion and deletion of a linear table can be performed anywhere in the table .
2️⃣ Let's talk about the queue : A queue is a special kind of linear table , What's special about this is that it's only allowed at the front of the table (front) Delete operation , And at the back end of the table (rear) Insert operation . Like the stack , A queue is a linear table with restricted operations . The end of the insertion operation is called the tail of the queue , The end of the delete operation is called the queue head . When there are no elements in the queue , Called an empty queue .
3️⃣ Related concepts of queue : The data elements of a queue are called queue elements . Inserting a queue element into a queue is called queuing , Deleting a queue element from a queue is called out of queue . Because queues can only be inserted at one end , Delete... At the other end , So only the first elements to enter the queue can be deleted from the queue first , So the queue is also called first in, first out (FIFO—first in first out) The linear table .
4️⃣ Why do you have a circular queue : In order to make full use of vector space , Overcome " False spillover " The method of phenomenon is : Think of a vector space as a ring with its head and tail connected , And call this vector a cyclic vector . The queues stored in it are called circular queues (Circular Queue). A circular queue is a sequential queue connected end to end , Look at the table that stores the queue elements logically as a ring , It's called a circular queue .
5️⃣ Related characteristics of circular queue : In the circular queue structure , When the last position of the storage space has been used and it is necessary to enter the queue operation , Only the first location of the storage space is free , You can add the element to the first position , The first location of the storage space will be used as the tail of the team . Circular queues can more easily prevent pseudo overflow , But the queue size is fixed .
Two 、 Defined function
1. Define the storage structure
// 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;
2. initialization
// initialization
void InitQueue (SqQueue &Q)
{
// Construct an empty queue
Q.base =new QElemType[MAXQSIZE];
Q.front=Q.rear=0;
}
3. Destroy queue
// Destroy queue
void DestroyQueue(SqQueue &Q)
{
if(Q.base)
free(Q.base);
Q.base = NULL;
Q.front = Q.rear = 0;
}
4. Clear queue
// Clear queue
void ClearQueue(SqQueue &Q)
{
Q.front=Q.rear=0;
}
5. Find the length
// Find the length
int QueueLength (SqQueue Q)
{
return (Q.rear-Q.front+MAXQSIZE)%MAXQSIZE;
}
6. Sentenced to empty
// Sentenced to empty
bool QueueEmpty (SqQueue Q)
{
return (Q.front==Q.rear);
}
7. Find the team head element
// 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;
}
8. Loop queue in
// 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;
}
9. Loop queue out
// 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;
}
10. Traversal causes the queue to display
// 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++;
}
}
3、 ... and 、 Define small menus
You can use a small menu to make the interface more beautiful ~
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;
}
Four 、 Complete code
️️️
#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;
if(GetHead(Q,e) == 1) cout<<e<<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;
}
5、 ... and 、 Running results
️️️
summary
This paper is used to introduce the code implementation process and running result example of circular queue in data structure . The initialization of the circular queue is displayed in menu style 、 Empty 、 The destruction 、 Find the length , Find the team head element 、 Sentenced to empty 、 The team , Out of the team , And traversing the queue to make it display .
版权声明
本文为[White folding fan y]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/04/202204231410400560.html
边栏推荐
- 中富金石财富班29800效果如何?与专业投资者同行让投资更简单
- Leetcode149 - maximum number of points on a line - Math - hash table
- Nuxt project: Global get process Env information
- Set up an AI team in the game world and start the super parametric multi-agent "chaos fight"
- Detailed comparison between asemi three-phase rectifier bridge and single-phase rectifier bridge
- LeetCode149-直线上最多的点数-数学-哈希表
- Brute force of DVWA low -- > High
- PCIe X1 插槽的主要用途是什么?
- Unity_ Code mode add binding button click event
- do(Local scope)、初始化器、内存冲突、Swift指针、inout、unsafepointer、unsafeBitCast、successor、
猜你喜欢
1 - first knowledge of go language
Model location setting in GIS data processing -cesium
8.2 text preprocessing
Interviewer: let's talk about the process of class loading and the mechanism of class loading (parental delegation mechanism)
Don't you know the usage scenario of the responsibility chain model?
Programming philosophy - automatic loading, dependency injection and control inversion
How to upload large files quickly?
在游戏世界组建一支AI团队,超参数的多智能体「大乱斗」开赛
Bingbing learning notes: take you step by step to realize the sequence table
we引用My97DatePicker 实现时间插件使用
随机推荐
What is the role of the full connection layer?
win10 任务栏通知区图标不见了
JUC learning record (2022.4.22)
2-GO variable operation
Don't you know the usage scenario of the responsibility chain model?
博睿数据携手F5共同构建金融科技从代码到用户的全数据链DNA
Flink DataStream 类型系统 TypeInformation
8.3 language model and data set
Async void caused the program to crash
Set up an AI team in the game world and start the super parametric multi-agent "chaos fight"
like和regexp差别
How to write the keywords in the cover and title? As we media, why is there no video playback
JS -- realize click Copy function
Introduction to Arduino for esp8266 serial port function
Chapter 7 of JVM series -- bytecode execution engine
Explain TCP's three handshakes in detail
we引用My97DatePicker 实现时间插件使用
Flink datastream type system typeinformation
Little red book timestamp2 (2022 / 04 / 22)
C语言超全学习路线(收藏让你少走弯路)