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

循环队列的顺序实现和链式实现 #数据结构(C,C++)

记录一下作者在学习数据结构中的所有数据结构和算法的具体实现
顺带补充相关知识
本系列文章注重的是代码实现!代码实现!代码实现!

这里放一个代码合集(目前正在逐步更新中)
代码合集链接

什么是队列

队列也是一种插入和删除受限的线性表。
只允许在一端插入,另一端删除的受限制的线性表。

由于顺序实现的顺序队列会存在假溢出问题,所以我们更常使用的是循环队列,
循环队列就是将顺序队列从逻辑上变为一个环状数组。

顺序循环队列代码实现

#include<iostream>using namespace std;/*由于顺序实现的顺序队列会存在假溢出问题,所以我们直接实现循环队列在循环队列中,区分队满和队空有多种处理方式。1.牺牲一个存储单元,入队时少用一个队列单元。(最常用,所以实现这一种)队满:(q.rear+1)%N==q.front队空:q.rear==q.front2.结构体中增加一个size字段,用来记录元素个数队满:显然size==N队空:显然size==0*/const int N = 100;//最大容量typedef struct queue {int rear;//队尾int front;//队头int data[N];
}sq;// 初始化队列
void initQueue(sq& q) {q.front = q.rear = 0;
}
// 是否为空
bool isEmpty(sq q) {return q.front == q.rear;
}
// 是否队满
bool isFull(sq q){return (q.rear + 1) % N == q.front;
}
// 入队
bool push(sq& q,int num) {if (isFull(q))return false;q.data[q.rear] = num;q.rear = (q.rear + 1) % N;return true;
}
// 出队
bool pop(sq& q,int& num) {if (isEmpty(q))return false;num = q.data[q.front];q.front = (q.front + 1) % N;return true;
}
// 读队首元素
bool getFront(sq& q,int& num) {if (isEmpty(q))return false;num = q.data[q.front];return true;
}

链队实现

链队相当于一个有头尾节点的单链表

#include<iostream>typedef struct linkNode {int data;struct linkNode* next;
}linkNode;typedef struct {linkNode* front;linkNode* rear;
}linkQueue;bool initQueue(linkQueue& q) {q.front = q.rear = (linkNode*)malloc(sizeof(linkNode));if (q.front == NULL || q.rear == NULL)return false;q.front->next = NULL;return true;
}bool isEmpty(linkQueue q) {if (q.front == q.rear)return true;else return false;
}bool enQueue(linkQueue& q, int x) {linkNode* s = (linkNode*)malloc(sizeof(linkNode));if (s == NULL)return false;s->data = x;s->next = NULL;q.rear->next = s;q.rear = s;return true;
}bool deQueue(linkQueue& q, int& x) {if (isEmpty(q))return false;linkNode* p = q.front->next;x = p->data;q.front->next = p->next;if (q.rear == p)q.rear = q.front;free(p);return true;
}bool getHead(linkQueue q, int& x) {if (isEmpty(q))return false;x = q.front->next->data;return true;
}int main() {return 0;
}

参考

王道数据结构考研复习指导书
严蔚敏数据结构

相关文章:

  • 大模型之微调篇——指令微调数据集准备
  • Codeforces Round 1028 (Div. 2) A-C
  • Kafka 与其他 MQ 的对比分析:RabbitMQ/RocketMQ 选型指南(二)
  • Future异步与Promise
  • shell脚本--条件
  • 【边缘计算】引论基础
  • Python实例题:基于边缘计算的智能物联网系统
  • 吴恩达:从斯坦福到 Coursera,他的深度学习布道之路
  • 【开源项目】当大模型推理遇上“性能刺客”:LMCache 实测手记
  • 分布式锁的四种实现方式:从原理到实践
  • IntelllJ IDEA 打开别人项目没有自动配置导致运行按钮不能亮
  • 【基础算法】二分(二分查找 + 二分答案)
  • MySQL性能脉搏:核心指标深度解析与高可用实战
  • XML SimpleXML
  • 外部表(EXTERNAL TABLE)详解
  • 机器学习15-XGBoost
  • MolyCamCCD复古胶片相机:复古质感,时尚出片
  • CentOS7 挂载磁盘出错mount: /dev/sdb is write-protected, mounting
  • ECS 任务 / Lambda / Fargate / Athena / Glue
  • STM32F103C8T6 学习笔记摘要(三)
  • 南昌城市旅游网站建设/哈尔滨关键词排名工具
  • 网站连接怎么做/上海网站快速排名优化
  • 不懂代码如何做网站/店铺推广渠道有哪些
  • wordpress 1g 不够用/邯郸seo营销
  • 关于门户网站建设的请示/今天重大新闻事件
  • 查网站域名备案查询/护肤品软文推广