当前位置:网站首页>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
边栏推荐
- 安全面试之XSS(跨站脚本攻击)
- Record an edu, SQL injection practice
- [dark horse morning post] Shanghai Municipal Bureau of supervision responded that Zhong Xue had a high fever and did not melt; Michael admitted that two batches of pure milk were unqualified; Wechat i
- Mixlab unbounded community white paper officially released
- HackMyvm靶机系列(6)-videoclub
- 【MySQL数据库的学习】
- What language should I learn from zero foundation. Suggestions
- [err] 1055 - expression 1 of order by clause is not in group by clause MySQL
- Which is more advantageous in short-term or long-term spot gold investment?
- 7-7 7003 combination lock (PTA program design)
猜你喜欢
外网打点(信息收集)
网络基础详解
HackMyvm靶机系列(2)-warrior
Attack and defense world misc practice area (GIF lift table ext3)
1143_ SiCp learning notes_ Tree recursion
Tencent map circle
撲克牌遊戲程序——人機對抗
强化学习基础记录
It's never too late to start. The tramp transformation programmer has an annual salary of more than 700000 yuan
DVWA (5th week)
随机推荐
Record an API interface SQL injection practice
内网渗透之内网信息收集(二)
实验四 数组
Interpretation of iterator related "itertools" module usage
强化学习基础记录
Canvas foundation 1 - draw a straight line (easy to understand)
记一次api接口SQL注入实战
Build domain environment (win)
Attack and defense world misc practice area (GIF lift table ext3)
Intel oneapi - opening a new era of heterogeneity
captcha-killer验证码识别插件
Sqqyw (indifferent dot icon system) vulnerability recurrence and 74cms vulnerability recurrence
强化学习基础记录
【头歌educoder数据表中数据的插入、修改和删除】
实验七 常用类的使用(修正帖)
7-9 制作门牌号3.0(PTA程序设计)
HackMyvm靶机系列(3)-visions
Experiment 8 exception handling
An unhandled exception occurred when C connected to SQL Server: system Argumentexception: "keyword not supported:" integrated
Hackmyvm Target Series (3) - vues