当前位置:网站首页>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
边栏推荐
- C language file operation
- 7-5 走楼梯升级版(PTA程序设计)
- Internet Management (Information Collection)
- 记一次,修改密码逻辑漏洞实战
- 7-1 输出2到n之间的全部素数(PTA程序设计)
- sqqyw(淡然点图标系统)漏洞复现和74cms漏洞复现
- 实验七 常用类的使用(修正帖)
- Canvas foundation 1 - draw a straight line (easy to understand)
- HackMyvm靶机系列(3)-visions
- Analysis of penetration test learning and actual combat stage
猜你喜欢
随机推荐
实验九 输入输出流(节选)
"Gold, silver and four" job hopping needs to be cautious. Can an article solve the interview?
实验六 继承和多态
xray與burp聯動 挖掘
Nuxtjs quick start (nuxt2)
Brief introduction to XHR - basic use of XHR
实验五 类和对象
7-14 错误票据(PTA程序设计)
Web vulnerability - File Inclusion Vulnerability of file operation
7-7 7003 组合锁(PTA程序设计)
[three paradigms of database] you can understand it at a glance
SRC mining ideas and methods
网络层—简单的arp断网
Detailed explanation of three ways of HTTP caching
Matlab opens M file garbled solution
[VMware abnormal problems] problem analysis & Solutions
Interpretation of iterator related "itertools" module usage
实验四 数组
记一次api接口SQL注入实战
Feature extraction and detection 14 plane object recognition