考研复习之队列

server/2025/3/31 8:24:47/

循环队列

队列为满的条件

      队列为满的条件需要特殊处理,因为当队列满时,队尾指针的下一个位置应该是队头指针。但是,我们不能直接比较 rear + 1 和 front 是否相等,因为 rear + 1 可能会超出数组索引的范围。因此,我们需要使用模运算 % 来确保索引在数组范围内循环。

        

        浪费一个空间:
        在这种方法中,我们故意让队列中始终保持一个空闲位置,这样当 rear 的下一个位置是 front 时,队列就是满的。

(Q.rear + 1) % MAX_SIZE == Q.front

入队  出队

#include<iostream>
#define Maxsize 6
using namespace std;typedef struct {int data[Maxsize]; // 数组,存储Maxsize-1个元素int front, rear;   // 队列头和队列尾
} SqQueue;void init(SqQueue &Q) {Q.front = Q.rear = 0;
}bool enqueue(SqQueue &Q, int x) {if ((Q.rear + 1) % Maxsize == Q.front) // 判断循环队列是否满了return false;else {Q.data[Q.rear] = x; // 放入元素Q.rear = (Q.rear + 1) % Maxsize; // 改变队尾标记return true;}
}bool dequeue(SqQueue &Q, int &data) {if (Q.rear == Q.front) // 判断队列是否为空return false;else {data = Q.data[Q.front]; // 取出队头元素Q.front = (Q.front + 1) % Maxsize; // 改变队头标记return true;}
}bool isEmpty(SqQueue Q) {return Q.rear == Q.front;
}int main() {SqQueue Q;bool ret;int data;init(Q); // 初始化队列ret = isEmpty(Q);if (ret) {cout << "kong" << endl;} else {cout << "bu wei kong " << endl;}ret = dequeue(Q, data);if (ret) {cout << "出队的元素是" << data << endl;} else {cout << "kong zhan" << endl;}// 测试入队和出队enqueue(Q, 1);enqueue(Q, 2);enqueue(Q, 3);enqueue(Q, 4);enqueue(Q, 5);while (dequeue(Q, data)) {cout << "出队的元素是" << data << endl;}return 0;
}

链队列

用链表表示队列

#include<iostream>
#include<cstdlib>
using namespace std;
typedef struct node {int data;struct node *next;
}LinkNode; typedef struct {LinkNode * front ,* rear;//链表头,链表尾,即对头和队尾 
}LinkQueue;//用带头结点的链表来实现队列 
void init(LinkQueue &Q)
{Q.front=Q.rear=(LinkNode *)malloc(sizeof(LinkNode)); Q.front->next=NULL;
}void enqueue(LinkQueue &Q,int x)
{LinkNode *newnode;newnode=(LinkNode *)malloc(sizeof(LinkNode));newnode->data=x;Q.rear->next=newnode;Q.rear=newnode;//rear指向新的尾部 newnode->next=NULL;}int dequeue(LinkQueue &Q,int &data)
{if(Q.rear==Q.front ){cout<<"栈空"<<endl;}else{LinkNode * q=Q.front->next;//指向第一个元素 Q.front->next=q->next;data=q->data; //获取出队的元素值 if(Q.rear=q)//队列只剩一个元素,被删除后要改变rear; {Q.front=Q.rear;}}return data;
}
bool IsEmpty(LinkQueue Q)
{if(Q.front==Q.rear ){return true;}else{return false;}
}
int main()
{LinkQueue Q;init(Q); enqueue(Q,1);enqueue(Q,2);enqueue(Q,3);enqueue(Q,4);enqueue(Q,5);int data;data=dequeue(Q,data);cout<<"出对的元素值是"<<data<<" "<<endl;return 0;}


http://www.ppmy.cn/server/179741.html

相关文章

【小程序开发】完整项目结构长啥样?

Hello,欢迎来到AI技术库。AI写代码的时代,人人都可以成为程序员。欢迎继续【小程序开发】系列课。上节课中,我们学习了【手把手教你小程序开发】什么是大前端?,本节课,我们学习第二篇 小程序的完整项目结构。 本文适合阅读对象: 1. 非计算机专业AI爱好者;2. 小程序开发…

springboot使用netty做TCP客户端

1、服务端文档说明 ## 1. 概述本文档描述了Socket模拟器的通信协议实现细节&#xff0c;包括数据包格式、字节序、编码方式等信息。## 2. 通信基础### 2.1 连接方式 - 协议类型&#xff1a;TCP - 网络层&#xff1a;IPv4 (AddressFamily.InterNetwork) - 传输方式&#xff1a;流…

VO、DTO、POJO、PO和DO 的区别

在 Java 开发中&#xff0c;VO、DTO、POJO、PO、DO 等概念经常被使用&#xff0c;它们的主要区别在于 用途 和 设计目的。 &#x1f525; 1. VO&#xff08;View Object&#xff09;—— 视图对象 目的&#xff1a; 用于前端展示&#xff0c;通常是后端返回给前端的数据格式。 …

Perl 环境安装指南

Perl 环境安装指南 引言 Perl是一种广泛使用的解释型、动态编程语言,以其强大的文本处理能力和灵活性著称。本文将为您详细介绍Perl环境的安装过程,包括系统要求、安装步骤以及注意事项。 系统要求 在安装Perl之前,请确保您的计算机满足以下基本要求: 操作系统:Window…

从单机到集群:Elasticsearch集群搭建指南

Elasticsearch是一个分布式搜索和分析引擎&#xff0c;广泛应用于日志分析、全文检索、实时数据分析等场景。在生产环境中&#xff0c;通常需要搭建多节点的Elasticsearch集群以提高系统的可用性、性能和容错能力。本文将详细介绍如何搭建一个Elasticsearch集群。 1 环境准备 …

【linux指令】一文掌握 Linux 基础命令(Linux 命令速查)

文章目录 命令速查表系统硬件用户登陆文件进程安装包文件权限安装源(编译)压缩/打包搜索网络文件传输磁盘使用情况目录遍历文件描述符输出重定向 前后台&&#xff08;终端关闭&#xff0c;程序也关闭&#xff09;nohup&#xff08;终端关闭&#xff0c;程序继续运行&#x…

Android UI 组件系列(三):ImageView 使用技巧与图像加载

引言 在 Android 开发中&#xff0c;图像展示是常见的需求之一&#xff0c;无论是在应用的界面中展示本地图片&#xff0c;还是从网络加载动态内容&#xff0c;ImageView 都是最基础的 UI 组件之一。它不仅能够显示各种类型的图像资源&#xff0c;还可以灵活地调整图像的显示方…

A Brief History: from GPT-1 to GPT-3

This is my reading notes of 《Developing Apps with GPT-4 and ChatGPT》. In this section, we will introduce the evolution of the OpenAI GPT medels from GPT-1 to GPT-4. GPT-1 In mid-2018, OpenAI published a paper titled “Improving Language Understanding …