当前位置:网站首页>Circular queue (C language)
Circular queue (C language)
2022-07-06 14:16:00 【An Ruoxi~】
What we need to pay attention to in the loop queue is the position of each head pointer and tail pointer , Because it's a circular queue , So every time you join the team , Both the head pointer and the tail pointer will +1, But every time I leave the team , Only the tail pointer -1, When the head pointer meets the tail pointer , Indicates that the queue is empty , We can use this to judge the space .
Header file function declaration
#define MAX_SIZE 100
typedef int ELEM_TYPE;
typedef struct Queue {
ELEM_TYPE* base;// Accept malloc Space to apply
int front;// The head pointer
int rear;// Tail pointer
//int count;
}Queue,*PQueue;
void Init(PQueue pq);
bool Push(PQueue pq,ELEM_TYPE val);
bool Pop(PQueue pq);
bool Top(PQueue pq,ELEM_TYPE* rtval);
bool IsEmpty(PQueue pq);
bool IsFull(PQueue pq);
int Get_length(PQueue pq);
void Clear(PQueue pq);
void Destory(PQueue pq);
void show(PQueue pq);
Implementation of header file function declaration
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include"cqueue.h"
void Init(PQueue pq) {
assert(pq!=NULL);
pq->base = (ELEM_TYPE*)malloc(MAX_SIZE * sizeof(ELEM_TYPE));
assert(pq->base != NULL);
pq->front = 0;
pq->rear = 0;
}
bool Push(PQueue pq, ELEM_TYPE val) {
assert(pq != NULL);
if (IsFull(pq)) {
return false;
}
pq->base[pq->rear] = val;
pq->rear = (pq->rear + 1) % MAX_SIZE;
return true;
}
bool Pop(PQueue pq) {
assert(pq != NULL);
if (IsEmpty(pq)) {
return false;
}
pq->front=(pq->front+1)%MAX_SIZE;
return true;
}
bool Top(PQueue pq, ELEM_TYPE* rtval) {
assert(pq != NULL);
if (IsEmpty(pq)) {
return false;
}
*rtval = pq->base[pq->front];
return true;
}
bool IsEmpty(PQueue pq) {
assert(pq != NULL);
return pq->front == pq->rear;
}
bool IsFull(PQueue pq) {
assert(pq != NULL);
return (pq->rear + 1) % MAX_SIZE == pq->front;
}
int Get_length(PQueue pq) {
assert(pq != NULL);
int count= (pq->rear - pq->front + MAX_SIZE) % MAX_SIZE;// The first is to prevent negative numbers , The latter is to prevent positive numbers from increasing
return count;
}
void Clear(PQueue pq) {
assert(pq != NULL);
pq->front = pq->rear = 0;
}
void Destory(PQueue pq) {
assert(pq != NULL);
free(pq->base);
pq->front = pq->rear = 0;
}
void show(PQueue pq) {
assert(pq != NULL);
for (int i = pq->front;i!= pq->rear;i=(i+1)%MAX_SIZE) {
printf("%5d",pq->base[i]);
}
printf("\n");
}
Here we should pay attention to , Per head pointer , Tail pointer +1 In order to prevent cross-border , We balance the capacity between it and the circular queue , To prevent cross-border .
Test functions
#include<stdio.h>
#include"cqueue.h"
int main() {
struct Queue head;
Init(&head);
for (int i = 0; i < 20;i++) {
Push(&head,i+1);
}
show(&head);
printf("front %d\n",head.front);
printf("rear %d\n", head.rear);
Pop(&head);
Pop(&head);
Pop(&head);
show(&head);
printf("front %d\n", head.front);
printf("rear %d\n", head.rear);
ELEM_TYPE temp;
bool tag=Top(&head,&temp);
if (tag) {
printf("temp= %d\n",temp);
}
printf("length= %d\n", Get_length(&head));
for (int i = 0; i < 81; i++) {
Push(&head, i + 1);
}
show(&head);
printf("front %d\n", head.front);
printf("rear %d\n", head.rear);
printf("length= %d\n",Get_length(&head));
Clear(&head);
Destory(&head);
show(&head);
return 0;
}
The test case
边栏推荐
猜你喜欢
Intensive literature reading series (I): Courier routing and assignment for food delivery service using reinforcement learning
On the idea of vulnerability discovery
Record an edu, SQL injection practice
xray与burp联动 挖掘
Internet Management (Information Collection)
An unhandled exception occurred when C connected to SQL Server: system Argumentexception: "keyword not supported:" integrated
Renforcer les dossiers de base de l'apprentissage
Intel oneapi - opening a new era of heterogeneity
UGUI—Text
Xray and burp linkage mining
随机推荐
浅谈漏洞发现思路
UGUI—Text
《英特尔 oneAPI—打开异构新纪元》
sqqyw(淡然点图标系统)漏洞复现和74cms漏洞复现
Applet Web Capture -fiddler
Hackmyvm target series (3) -visions
Low income from doing we media? 90% of people make mistakes in these three points
XSS unexpected event
7-5 staircase upgrade (PTA program design)
Build domain environment (win)
HackMyvm靶机系列(5)-warez
Web vulnerability - File Inclusion Vulnerability of file operation
The United States has repeatedly revealed that the yield of interest rate hiked treasury bonds continued to rise
Attach the simplified sample database to the SQLSERVER database instance
xray与burp联动 挖掘
An unhandled exception occurred when C connected to SQL Server: system Argumentexception: "keyword not supported:" integrated
Harmonyos JS demo application development
实验八 异常处理
Hackmyvm target series (1) -webmaster
Xray and Burp linked Mining