当前位置:网站首页>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

边栏推荐
- 实验七 常用类的使用
- Force deduction 152 question multiplier maximum subarray
- 网络基础之路由详解
- Read only error handling
- 7-5 走楼梯升级版(PTA程序设计)
- It's never too late to start. The tramp transformation programmer has an annual salary of more than 700000 yuan
- 强化学习基础记录
- Intranet information collection of Intranet penetration (I)
- 链队实现(C语言)
- 强化学习基础记录
猜你喜欢

It's never too late to start. The tramp transformation programmer has an annual salary of more than 700000 yuan

Web vulnerability - File Inclusion Vulnerability of file operation

Intranet information collection of Intranet penetration (I)

7-5 staircase upgrade (PTA program design)

Data mining - a discussion on sample imbalance in classification problems

Strengthen basic learning records

HackMyvm靶机系列(6)-videoclub

Canvas foundation 1 - draw a straight line (easy to understand)

Nuxtjs quick start (nuxt2)

内网渗透之内网信息收集(四)
随机推荐
Callback function ----------- callback
中间件漏洞复现—apache
XSS之冷门事件
7-11 机工士姆斯塔迪奥(PTA程序设计)
Hackmyvm target series (5) -warez
Package bedding of components
图书管理系统
The most popular colloquial system explains the base of numbers
撲克牌遊戲程序——人機對抗
Experiment 8 exception handling
Hackmyvm Target Series (3) - vues
7-7 7003 combination lock (PTA program design)
Attach the simplified sample database to the SQLSERVER database instance
1143_ SiCp learning notes_ Tree recursion
Detailed explanation of network foundation
Intranet information collection of Intranet penetration (5)
【MySQL-表结构与完整性约束的修改(ALTER)】
Meituan dynamic thread pool practice ideas, open source
记一次edu,SQL注入实战
7-15 h0161. Find the greatest common divisor and the least common multiple (PTA program design)