当前位置:网站首页>Implementation of queue
Implementation of queue
2022-07-06 18:05:00 【qzt__ l0ve】
Catalog
1. The concept and structure of queue
// Get the number of valid elements in the queue
1. The concept and structure of queue
queue : Data insertion is only allowed at one end , A special linear table that deletes data at the other end , Queue has first in first out
FIFO(First In First Out) Queue entry : The end of the insertion is called the end of the queue
Outgoing queue : The end of the delete operation is called the queue head

2. Implementation of queues
Queues can also be implemented in the structure of arrays and linked lists , It is better to use the structure of linked list , Because if you use the structure of an array , Out of the queue, out of the data on the array header , It will be less efficient .
typedef int QDataType;
// The chain structure : Represents a queue
typedef struct QListNode
{
struct QListNode* _pNext;
QDataType _data;
}QNode;
// The structure of the queue
typedef struct Queue
{
QNode* _front;
QNode* _rear;
}Queue;
// Initialize queue
void QueueInit(Queue* q);
// Tail in queue
void QueuePush(Queue* q, QDataType data);
// Team leader out of line
void QueuePop(Queue* q);
// Get queue header elements
QDataType QueueFront(Queue* q);
// Get queue tail element
QDataType QueueBack(Queue* q);
// Get the number of valid elements in the queue
int QueueSize(Queue* q);
// Check if the queue is empty , If NULL, return non-zero result , If not null, return 0
int QueueEmpty(Queue* q);
// Destroy queue
void QueueDestroy(Queue* q);Initialize queue
void QueueInit(Queue* q);// No matter what structure , We all need to initialize first .
void QueueInit(Queue* pq)
{
assert(pq);
pq->head = pq->tail = NULL;
}Tail in queue
void QueuePush(Queue* q, QDataType data);// Because the queue is FIFO , So it can only be inserted from the tail
void QueuePush(Queue* pq, QDataType x)// Insert , Insert... At the end of the line ; fifo
{
assert(pq);
QNode* newnode = (QNode*)malloc(sizeof(QNode));// Every time you insert a data, you open up a space
if (newnode == NULL)// Judge whether the development fails
{
printf("malloc fail\n");
exit(-1);
}
newnode->data = x;
newnode->next = NULL;
if (pq->tail == NULL)// When no data is inserted for the first time
{
pq->head = pq->tail = newnode;
}
else// With data
{
pq->tail->next = newnode;
pq->tail = newnode;
}
}// Team leader out of line
void QueuePop(Queue* q);// Outgoing queue , The first one is the data of the team leader , Make sure it's first in, first out .
void QueuePop(Queue* pq)// It is equivalent to deleting the team header data
{
assert(pq);
assert(!QueueEmpty(pq));// Determines if the queue is empty
// A node
if (pq->head->next == NULL)
{
free(pq->head);
pq->head = pq->tail = NULL;
}
// Multiple nodes
else
{
Queue* next = pq->head->next;
free(pq->head);
pq->head = next;
}
}// Get queue header elements
QDataType QueueFront(Queue* q);// First judge the capacity of the queue , Then return to the team head element
QDataType QueueFront(Queue* pq)// Get the correct header data
{
assert(pq);
assert(!QueueEmpty(pq));
return pq->head->data;
}// Get queue tail element
QDataType QueueBack(Queue* q);// First judge the queue capacity , Then return the tail data
QDataType QueueBack(Queue* pq)// Take the tail data
{
assert(pq);
assert(!QueueEmpty(pq));
return pq->tail->data;
}// Get the number of valid elements in the queue
int QueueSize(Queue* q);// Create a current pointer , Go back one by one ,size Count the quantity for size .
int QueueSize(Queue* pq)
{
assert(pq);
QNode* cur = pq->head;// Create a pointer to the current element
int size = 0;// Used to count the number of elements
while (cur)
{
++size;
cur = cur->next;
}
return size;
}// Check if the queue is empty , If NULL, return non-zero result , If not null, return 0
int QueueEmpty(Queue* q);// here return It's to judge first pq->head Is it equal to empty , Return to true later , Return false before waiting .
bool QueueEmpty(Queue* pq)// Judge capacity ;
{
assert(pq);
return pq->head == NULL;
}// Destroy queue
void QueueDestroy(Queue* q); Because we have opened up space , So we have to release one by one in the end .
void Queuestroy(Queue* pq)
{
assert(pq);
QNode* cur = pq->head;
while (cur)// Release space one by one
{
QNode* next = cur->next;
free(cur);
cur = next;
}
pq->head = pq->tail = NULL;
}Expand :
In practice, we sometimes use a queue called circular queue . For example, when the operating system course explains the producer consumer model, you can use the circular queue . Ring queues can be implemented using arrays , You can also use a circular linked list to achieve .


边栏推荐
- Scratch epidemic isolation and nucleic acid detection Analog Electronics Society graphical programming scratch grade examination level 3 true questions and answers analysis June 2022
- adb常用命令
- Declval of template in generic programming
- Summary of Android interview questions of Dachang in 2022 (I) (including answers)
- Getting started with pytest ----- test case pre post, firmware
- Will openeuler last long
- Jielizhi obtains the currently used dial information [chapter]
- declval(指导函数返回值范例)
- The shell generates JSON arrays and inserts them into the database
- Cool Lehman has a variety of AI digital human images to create a vr virtual exhibition hall with a sense of technology
猜你喜欢

Appium automated test scroll and drag_ and_ Drop slides according to element position

分布式不来点网关都说不过去

ASEMI整流桥DB207的导通时间与参数选择

J'aimerais dire quelques mots de plus sur ce problème de communication...

STM32按键状态机2——状态简化与增加长按功能

Olivetin can safely run shell commands on Web pages (Part 1)

Cool Lehman has a variety of AI digital human images to create a vr virtual exhibition hall with a sense of technology

Take you through ancient Rome, the meta universe bus is coming # Invisible Cities

Pytest learning ----- pytest operation mode and pre post packaging of interface automation testing

Scratch epidemic isolation and nucleic acid detection Analog Electronics Society graphical programming scratch grade examination level 3 true questions and answers analysis June 2022
随机推荐
F200——搭载基于模型设计的国产开源飞控系统无人机
The difference between parallelism and concurrency
After entering Alibaba for the interview and returning with a salary of 35K, I summarized an interview question of Alibaba test engineer
10 advanced concepts that must be understood in learning SQL
node の SQLite
基于STM32+华为云IOT设计的智能路灯
Codeforces Round #803 (Div. 2)
OpenEuler 会长久吗
EasyCVR接入设备开启音频后,视频无法正常播放是什么原因?
ASEMI整流桥DB207的导通时间与参数选择
HMS core machine learning service creates a new "sound" state of simultaneous interpreting translation, and AI makes international exchanges smoother
d绑定函数
Four processes of program operation
Wechat applet obtains mobile number
Growth of operation and maintenance Xiaobai - week 7
Pytest learning ----- pytest operation mode and pre post packaging of interface automation testing
Heavy! Ant open source trusted privacy computing framework "argot", flexible assembly of mainstream technologies, developer friendly layered design
Solution qui ne peut pas être retournée après la mise à jour du navigateur Web flutter
F200 - UAV equipped with domestic open source flight control system based on Model Design
78 岁华科教授逐梦 40 载,国产数据库达梦冲刺 IPO