当前位置: 首页 > news >正文

循环队列的基本操作(3种处理方式,2种实现方式)

为区分队空队满有3种处理方式:
①牺牲一个单元
②增设表示元素个数的数据成员
③增设tag数据成员

1.front->队头元素,rear->队尾元素下一位置

1.1牺牲一个单元

1.1.1定义

#define MaxSize 50
typedef struct {ElemType data[MaxSize];int front, rear;
}SqQueue;

1.1.2初始化

void InitQueue(SqQueue &Q) {Q.rear = Q.front = 0;
}

1.1.3判空

bool isEmpty(SqQueue Q) {if(Q.rear = Q.front)return true;elsereturn false;
}

1.1.4 入队

bool EnQueue(SqQueue &Q, ElemType x) {if((Q.rear + 1) % MaxSize == Q.front)//队满报错return false;Q.data[Q.rear] = x;Q.rear = (Q.rear + 1) % MaxSize;return true;
}

1.1.5出队

bool DeQueue(SqQueue &Q, ElemType &x) {if(Q.rear = Q.front)//队空报错return false;x = Q.data[Q.front];Q.front= (Q.front+ 1) % MaxSize;return true;
}

1.1.6 读队头元素

bool GetHead(SqQueue &S, ElemType &x) {if(Q.rear = Q.front)//队空报错return false;x = Q.data[Q.front];return true;
}

1.2增设表示元素个数的数据成员

1.2.1定义

#define MaxSize 50
typedef struct {ElemType data[MaxSize];int front, rear;int size;
}SqQueue;

1.2.2初始化

void InitQueue(SqQueue &Q) {Q.rear = Q.front = 0;Q.size = 0;
}

1.2.3判空

bool isEmpty(SqQueue Q) {if(Q.size == 0)return true;elsereturn false;
}

1.2.4 入队

bool EnQueue(SqQueue &Q, ElemType x) {if(Q.size == MaxSize)//队满报错return false;Q.data[Q.rear] = x;Q.rear = (Q.rear + 1) % MaxSize;return true;
}

1.2.5出队

bool DeQueue(SqQueue &Q, ElemType &x) {if(Q.size == 0)//队空报错return false;x = Q.data[Q.front];Q.front= (Q.front+ 1) % MaxSize;return true;
}

1.2.6 读队头元素

bool GetHead(SqQueue &S, ElemType &x) {if(Q.size == 0)//队空报错return false;x = Q.data[Q.front];return true;
}

1.3增设tag数据成员

1.3.1定义

#define MaxSize 50
typedef struct {ElemType data[MaxSize];int front, rear;int tag;
}SqQueue;

1.3.2初始化

void InitQueue(SqQueue &Q) {Q.rear = Q.front = 0;Q.tag = 0;
}

1.3.3判空

bool isEmpty(SqQueue Q) {if(Q.rear = Q.front && Q.tag == 0)return true;elsereturn false;
}

1.3.4 入队

bool EnQueue(SqQueue &Q, ElemType x) {if(Q.rear = Q.front && Q.tag == 1)//队满报错return false;Q.data[Q.rear] = x;Q.rear = (Q.rear + 1) % MaxSize;tag = 1;return true;
}

1.3.5出队

bool DeQueue(SqQueue &Q, ElemType &x) {if(Q.rear = Q.front && Q.tag == 0)//队空报错return false;x = Q.data[Q.front];Q.front= (Q.front+ 1) % MaxSize;tag = 1;return true;
}

1.2.6 读队头元素

bool GetHead(SqQueue &S, ElemType &x) {if(Q.rear = Q.front && Q.tag == 0)//队空报错return false;x = Q.data[Q.front];return true;
}

2.front->队头元素,rear->队尾元素

2.1牺牲一个单元

2.1.1定义

#define MaxSize 50
typedef struct {ElemType data[MaxSize];int front, rear;
}SqQueue;

2.1.2初始化

void InitQueue(SqQueue &Q) {Q.front = 0;Q.rear = MaxSize - 1;
}

2.1.3判空

bool isEmpty(SqQueue Q) {if((Q.rear + 1) % MaxSize == Q.front)return true;elsereturn false;
}

2.1.4 入队

bool EnQueue(SqQueue &Q, ElemType x) {if((Q.rear + 2) % MaxSize == Q.front)//队满报错return false;Q.rear = (Q.rear + 1) % MaxSize;Q.data[Q.rear] = x;return true;
}

2.1.5出队

bool DeQueue(SqQueue &Q, ElemType &x) {if((Q.rear + 1) % MaxSize == Q.front)//队空报错return false;x = Q.data[Q.front];Q.front= (Q.front+ 1) % MaxSize;return true;
}

2.1.6 读队头元素

bool GetHead(SqQueue &S, ElemType &x) {if((Q.rear + 1) % MaxSize == Q.front)//队空报错return false;x = Q.data[Q.front];return true;
}

2.2增设表示元素个数的数据成员

2.2.1定义

#define MaxSize 50
typedef struct {ElemType data[MaxSize];int front, rear;int size;
}SqQueue;

2.2.2初始化

void InitQueue(SqQueue &Q) {Q.front = 0;Q.rear = MaxSize - 1;Q.size = 0;
}

2.2.3判空

bool isEmpty(SqQueue Q) {if(Q.size == 0)return true;elsereturn false;
}

2.2.4 入队

bool EnQueue(SqQueue &Q, ElemType x) {if(Q.size == MaxSize)//队满报错return false;Q.rear = (Q.rear + 1) % MaxSize;Q.data[Q.rear] = x;return true;
}

2.2.5出队

bool DeQueue(SqQueue &Q, ElemType &x) {if(Q.size == 0)//队空报错return false;x = Q.data[Q.front];Q.front= (Q.front+ 1) % MaxSize;return true;
}

2.2.6 读队头元素

bool GetHead(SqQueue &S, ElemType &x) {if(Q.size == 0)//队空报错return false;x = Q.data[Q.front];return true;
}

2.3增设tag数据成员

2.3.1定义

#define MaxSize 50
typedef struct {ElemType data[MaxSize];int front, rear;int tag;
}SqQueue;

2.3.2初始化

void InitQueue(SqQueue &Q) {Q.front = 0;Q.rear = MaxSize - 1;Q.tag = 0;
}

2.3.3判空

bool isEmpty(SqQueue Q) {if((Q.rear + 1) % MaxSize == Q.front && Q.tag == 0)return true;elsereturn false;
}

2.3.4 入队

bool EnQueue(SqQueue &Q, ElemType x) {if((Q.rear + 1) % MaxSize == Q.front && Q.tag == 1)//队满报错return false;Q.rear = (Q.rear + 1) % MaxSize;Q.data[Q.rear] = x;tag = 1;return true;
}

2.3.5出队

bool DeQueue(SqQueue &Q, ElemType &x) {if((Q.rear + 1) % MaxSize == Q.front && Q.tag == 0)//队空报错return false;x = Q.data[Q.front];Q.front= (Q.front+ 1) % MaxSize;tag = 1;return true;
}

2.3.6 读队头元素

bool GetHead(SqQueue &S, ElemType &x) {if((Q.rear + 1) % MaxSize == Q.front && Q.tag == 0)//队空报错return false;x = Q.data[Q.front];return true;
}
http://www.lryc.cn/news/100941.html

相关文章:

  • react的特点
  • MATLAB实现图像处理:图像识别、去雨、去雾、去噪、去模糊等等(附上20个完整仿真源码)
  • cmake stm32 模板
  • STM32 UDS Bootloader开发-上位机篇-CANoe制作(2)
  • 实例026 随机更换主界面背景
  • PostgreSQL 简洁、使用、正排索引与倒排索引、空间搜索、用户与角色
  • querySubObject(“Cells(int,int)“, j,i)->property(“Value“)读不到数据问题
  • AutoSAR系列讲解(实践篇)10.2-EcuM的上下电流程
  • 科研院所用泛微搭建信创办公平台,统一办公,业务融合,安全便捷
  • 基于LoRA进行Stable Diffusion的微调
  • C++STL序列式容器——list容器及其常用操作(详解)
  • 【雕爷学编程】MicroPython动手做(15)——掌控板之AB按键2
  • Spring Boot中整合MyBatis(基于xml方式基于注解实现方式)
  • ChatGPT漫谈(三)
  • 树、二叉树(C语言版)详解
  • vue中Cascader 级联选择器实现-修改实现
  • C语言实现三子棋游戏
  • 机器学习深度学习——softmax回归从零开始实现
  • Windows如何安装Django及如何创建项目
  • 在CSDN学Golang云原生(监控解决方案Prometheus)
  • 双重for循环优化
  • golang利用go mod巧妙替换使用本地项目的包
  • 使用 docker 一键部署 MySQL
  • MyBatis-Plus 查询PostgreSQL数据库jsonb类型保持原格式
  • Linux操作系统1-命令篇
  • opencv-24 图像几何变换03-仿射-cv2.warpAffine()
  • 前端常用的条件限制方法小笔记
  • 【LeetCode 算法】Minimum Operations to Halve Array Sum 将数组和减半的最少操作次数-Greedy
  • Doc as Code (3):业内人士的观点
  • 【Kafka】消息队列Kafka基础