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

数据结构之栈和队列---c++

栈和队列的简单介绍

栈是一个“先进后出”结构
栈

队列

入队演示

队列是一种“先进先出”的结构
入队

出队演示

出队
接下来我们开始本次的内容

栈实现队列

在这里插入图片描述

分析

1.我们可以老老实实的写一个栈然后将所有的接口函数实现出来,最后再进行实现队列,但是显然是效率低下的方法
2.我们使用数组模拟栈,然后再进行实现队列—可行
3.或者直接使用STL

算法演示

栈实现队列动画演示

开始实现

class MyQueue {
public://我们不需要使用他的函数,因为我不想传参//定义两个stack一个是输入栈,一个是输出栈stack<int> pushst;stack<int> popst;MyQueue() {}//将元素输入到输入栈中void push(int x) {pushst.push(x);}int pop() {int res;//定义一个int型的值,用来接受返回值//pop的时候是从输出栈的栈顶出数据//如果输出栈为空,判断输入栈有没有数据,只有输入栈有数据的时候才能进行转移//只有输出栈有数据才能进行pop//我们可以将顺序进行转换,但是需要进行重复的步骤//也就是说,1.一开始popst没有元素为空,//2.pushst有值,将pushst的元素转移到popst中,//3.在进行popst不为空的判断进行pop那么//1.3步是相同的操作,如果将2换到最前面,后面只需要紧跟一个1步骤就能完成操作if(!popst.size()) {while(pushst.size()){popst.push(pushst.top());pushst.pop();}}if(popst.size())res=popst.top(),popst.pop();return res;}//同上int peek() {int res;if(!popst.size()) {while(pushst.size()){popst.push(pushst.top());pushst.pop();}}if(popst.size())res=popst.top();return res;}   //当pushst和popst同时没有值的时候->空bool empty() {if(pushst.size()||popst.size()) return false;return true;}
};

队列实现栈

算法演示

进栈

进栈

出栈

出栈

开始实现

c++中queue是双端队列,但是我们不适用这个特性,我们一点点的实现

class MyStack {
public:queue<int> q1,q2;MyStack() {}//使用假设的方式,定义空队列,进行判断是否与自己的假设相反,再空的队列中添加元素void push(int x) {queue<int>* em=&q1,*noem=&q2;if(!em->size()) noem=em,em=&q2;em->push(x);}//在pop的时候需要将不为空的队列找到,然后使队列中只剩一个元素,其余的元素全部移入另一个队列中,最后将这个元素记录并且删除int pop() {queue<int>* em=&q1,*noem=&q2;if(!noem->size()) em=noem,noem=&q1;while(noem->size()>1){em->push(noem->front());noem->pop();}int res=0;if(noem->size()==1){res=noem->front();noem->pop();}return res;}//同上int top() {queue<int>* em=&q1,*noem=&q2;if(!noem->size()) em=noem,noem=&q1;while(noem->size()>1){em->push(noem->front());noem->pop();}int res=0;if(noem->size()==1){res=noem->front();em->push(noem->front());noem->pop();}return res;}bool empty() {if(q1.size()||q2.size()) return false;return true;}
};/*** Your MyStack object will be instantiated and called as such:* MyStack* obj = new MyStack();* obj->push(x);* int param_2 = obj->pop();* int param_3 = obj->top();* bool param_4 = obj->empty();*/

设计循环队列

在这里插入图片描述

算法演示

在这里插入图片描述

开始实现

//使用数组进行实现,结构体需要包含数组,实际使用的空间个数,头,尾
typedef struct {int* a;int k;int hh,tt;
} MyCircularQueue;//当头和尾重合的时候就是空的时候
bool myCircularQueueIsEmpty(MyCircularQueue* obj) {return obj->hh==obj->tt;
}bool myCircularQueueIsFull(MyCircularQueue* obj) {return (obj->tt+1)%(obj->k+1)==obj->hh ;
}   
MyCircularQueue* myCircularQueueCreate(int k) {MyCircularQueue* queue=(MyCircularQueue*)malloc(sizeof(MyCircularQueue));queue->a=(int*)malloc(sizeof(int)*(k+1));queue->k=k;queue->hh=queue->tt=0;return queue;
}
//对特殊情况进行判断,当tt位于最后一个的时候,需要将他从重新置为开头
bool myCircularQueueEnQueue(MyCircularQueue* obj, int value) {if(myCircularQueueIsFull(obj)) return false;obj->a[obj->tt++]=value;obj->tt%=(obj->k+1);return true;
}
//对特殊情况进行判断,当hh位于最后一个的时候,需要将他从重新置为开头
bool myCircularQueueDeQueue(MyCircularQueue* obj) {if(myCircularQueueIsEmpty(obj)) return false;obj->hh++;obj->hh%=(obj->k+1);return true;
}   
//如果为空直接返回-1,不为空返回相应的值
int myCircularQueueFront(MyCircularQueue* obj) {if(myCircularQueueIsEmpty(obj)) return -1;return obj->a[obj->hh];
}
//最后一个数据是在tt的前一个位置,同时当tt位于开头的时候需要找到最后的位置找值
int myCircularQueueRear(MyCircularQueue* obj) {if(myCircularQueueIsEmpty(obj)) return -1;return obj->a[(obj->tt+obj->k)%(obj->k+1)];
}void myCircularQueueFree(MyCircularQueue* obj) {free(obj->a);free(obj);
}/*** Your MyCircularQueue struct will be instantiated and called as such:* MyCircularQueue* obj = myCircularQueueCreate(k);* bool param_1 = myCircularQueueEnQueue(obj, value);* bool param_2 = myCircularQueueDeQueue(obj);* int param_3 = myCircularQueueFront(obj);* int param_4 = myCircularQueueRear(obj);* bool param_5 = myCircularQueueIsEmpty(obj);* bool param_6 = myCircularQueueIsFull(obj);* myCircularQueueFree(obj);
*/

相关文章:

数据结构之栈和队列---c++

栈和队列的简单介绍 栈 栈是一个“先进后出”结构 队列 入队演示 队列是一种“先进先出”的结构 出队演示 接下来我们开始本次的内容 栈实现队列 分析 1.我们可以老老实实的写一个栈然后将所有的接口函数实现出来&#xff0c;最后再进行实现队列&#xff0c;但是显然…...

《网约车运营数据分析实战》学习笔记

这篇文章整理自 接地气的陈老师 x 和鲸社区 | 网约车运营分析 数据分析实战活动业务讲解会【接地气的陈老师】的讲解 活动介绍 假设你是某打车APP的商业数据分析师&#xff0c;为某大区提供日常数据报表。现在大区领导表示&#xff1a;希望你从日常数据监测中&#xff0c;发现…...

PostgreSQL常用函数

PostgreSQL常用函数 内置函数 PostgreSQL 内置函数也称为聚合函数&#xff0c;用于对字符串或数字数据执行处理。 下面是所有通用 PostgreSQL 内置函数的列表&#xff1a; COUNT 函数&#xff1a;用于计算数据库表中的行数。MAX 函数&#xff1a;用于查询某一特定列中最大值…...

决策树和随机森林对比

1.用accuracy来对比 # -*-coding:utf-8-*-""" accuracy来对比决策树和随机森林 """ from sklearn.tree import DecisionTreeClassifier from sklearn.ensemble import RandomForestClassifier from sklearn.datasets import load_wine#(178, 13…...

CS 144 Lab Seven -- putting it all together

CS 144 Lab Seven -- putting it all together 引言测试lab7.ccUDPSocketNetworkInterfaceAdapterTCPSocketLab7main方法子线程 小结 对应课程视频: 【计算机网络】 斯坦福大学CS144课程 Lab Six 对应的PDF: Checkpoint 6: putting it all together 引言 本实验无需进行任何编…...

opencv基础-29 Otsu 处理(图像分割)

Otsu 处理 Otsu 处理是一种用于图像分割的方法&#xff0c;旨在自动找到一个阈值&#xff0c;将图像分成两个类别&#xff1a;前景和背景。这种方法最初由日本学者大津展之&#xff08;Nobuyuki Otsu&#xff09;在 1979 年提出 在 Otsu 处理中&#xff0c;我们通过最小化类别内…...

gcc-buildroot-9.3.0 和 gcc-arm-10.3 的区别

gcc-buildroot-9.3.0 和 gcc-arm-10.3 是两个不同的 GCC (GNU Compiler Collection) 版本&#xff0c;主要用于编译 C、C 和其他语言的程序。它们之间的区别主要体现在以下几个方面&#xff1a; 版本号&#xff1a;gcc-buildroot-9.3.0 对应的是 GCC 9.3.0 版本&#xff0c;而 …...

IDEA Run SpringBoot程序步骤原理

这个文章不是高深的原理文章&#xff0c;仅仅是接手一个外部提供的阉割版代码遇到过的一个坑&#xff0c;后来解决了&#xff0c;记录一下。 1、IDEA Run 一个SpringBoot一直失败&#xff0c;提示找不到类&#xff0c;但是maven install成功&#xff0c;并且java -jar能成功ru…...

海康威视摄像头配置RTSP协议访问、onvif协议接入、二次开发SDK接入

一、准备工作 (1)拿到摄像头之后,将摄像头电源线插好,再将网线插入到路由器上。 (2)将自己的笔记本电脑也连接到路由器网络,与摄像头出在同一个局域网。 二、配置摄像头 2.1 激活方式选择 第一次使用设备需要激活,在进行配置。 最简单,最方便的方式是选择浏览器激…...

Android中的Parcelable 接口

Android中的Parcelable 接口 在Android中&#xff0c;Parcelable接口是用于实现对象序列化和反序列化的一种机制。它允许我们将自定义的Java对象转换成一个可传输的二进制数据流&#xff0c;以便在不同组件之间传递数据。通常在Activity之间传递复杂的自定义对象时&#xff0c…...

Docker-Compose编排与部署

目录 Docker Compose Compose的优点 编排和部署 Compose原理 Compose应用案例 安装docker-ce 阿里云镜像加速器 安装docker-compose docker-compose用法 Yaml简介 验证LNMP环境 Docker Compose Docker Compose 的前身是 Fig&#xff0c;它是一个定义及运行多个 Dock…...

Linux JDK 安装

文章目录 安装步骤1、卸载openJDK1.1 查看当前Linux系统是否安装java,卸载openjdk1.2 卸载系统中已经存在的openJDK 2、在/usr/local目录下创建java目录3、上传JDK到Linux系统4、解压jdk5、配置Jdk环境变量6、重新加载/etc/profile文件&#xff0c;让配置生效7、测试安装是否成…...

JS中常用的数组拷贝技巧

我们都知道&#xff0c;数组也是属于对象&#xff0c;在JS中对象的存储方式则是引用的方式。我们想要拷贝一个数组&#xff0c;就不能只是变量之前的赋值拷贝&#xff0c;这样他们将共享同一个引用&#xff0c;而数组又具有可变性&#xff0c;所以无法将原数组和拷贝的数组的数…...

SAP ABAP程序性能优化-养成良好的代码习惯

ABAP程序基本上都需要从数据库里面抓数&#xff0c;所以性能很重要&#xff0c;同时有一些基本的&#xff0c;和优秀的写法是我们必须要掌握的&#xff0c;不然就会造成程序性能很差。下面给予总结&#xff08;这里包括有很基本的&#xff0c;也包括有比较少用到的&#xff09;…...

SQL SERVER ip地址改别名

SQL server在使用链接服务器时必须使用别名&#xff0c;使用ip地址就会把192.188.0.2这种点也解析出来 解决方案&#xff1a; 1、物理机ip 192.168.0.66 虚拟机ip 192.168.0.115 2、在虚拟机上找到 C:\Windows\System32\drivers\etc 下的 &#xff08;我选中的文件&a…...

数据结构-1

1.2 线性结构树状结构网状结构&#xff08;表 数 图&#xff09; 数据&#xff1a;数值型 非数值型 1.2.3数据类型和抽象数据类型 1.3抽象数据类型 概念小结&#xff1a; 线性表: 如果在独立函数实现的 .c 文件中需要包含 stdlib.h 头文件&#xff0c;而主函数也需要包含 st…...

Java自定义校验注解实现List、set集合字段唯一性校验

文章目录 一&#xff1a; 使用场景二&#xff1a; 定义FieldUniqueValid注解2.1 FieldUniqueValid2.2 注解说明2.3 Constraint 注解介绍2.4 FieldUniqueValid注解使用 三&#xff1a;自定义FieldUniqueValidator校验类3.1 实现ConstraintValidator3.2 重写initialize方法3.3 重…...

xiaoweirobot.chat

目录 1 xiaoweirobot.chat 1.1 DetailList 2 HttpData 2.1 doInBackground 2.2 onPostExecute xiaoweirobot.chatpackage com.shrimp.xiaoweirobot.chat; DetailList <...

【无公网IP】本地电脑搭建个人博客网站(并发布公网访问 )和web服务器

【无公网IP】本地电脑搭建个人博客网站&#xff08;并发布公网访问 &#xff09;和web服务器 文章目录 【无公网IP】本地电脑搭建个人博客网站&#xff08;并发布公网访问 &#xff09;和web服务器前言1. 安装套件软件2. 创建网页运行环境 指定网页输出的端口号3. 让WordPress在…...

SpringCloud(29):Nacos简介

1 什么是配置中心 1.1 什么是配置 应用程序在启动和运行的时候往往需要读取一些配置信息&#xff0c;配置基本上伴随着应用程序的整个生命周期&#xff0c;比如&#xff1a;数据库连接参数、启动参数等。 配置主要有以下几个特点&#xff1a; 配置是独立于程序的只读变量 …...

Wan2.2-I2V-A14B与Visio流程图结合:让架构图“动”起来

Wan2.2-I2V-A14B与Visio流程图结合&#xff1a;让架构图"动"起来 1. 静态架构图的痛点与动态化需求 在日常技术方案沟通中&#xff0c;我们经常使用Visio绘制各类架构图、网络拓扑图和业务流程图。这些静态图表虽然能清晰展示系统结构&#xff0c;但在演示数据流向…...

零基础玩转Qwen3-VL-8B:上传图片提问,本地AI助手秒答

零基础玩转Qwen3-VL-8B&#xff1a;上传图片提问&#xff0c;本地AI助手秒答 1. 项目简介 Qwen3-VL-8B是一款基于阿里云通义实验室最新多模态模型开发的本地交互工具。它最大的特点就是能让你的电脑变成一个"会看图的智能助手"——你上传一张照片&#xff0c;然后像…...

Infect工具完整教程:快速掌握Android设备病毒传播技术

Infect工具完整教程&#xff1a;快速掌握Android设备病毒传播技术 【免费下载链接】infect Infect Any Android Device With Virus From Link In Termux 项目地址: https://gitcode.com/gh_mirrors/in/infect Infect是一款基于Bash的Android病毒传播工具&#xff0c;专为…...

BepuPhysics2查询系统完全指南:射线检测、扫掠查询与体积查询实战

BepuPhysics2查询系统完全指南&#xff1a;射线检测、扫掠查询与体积查询实战 【免费下载链接】bepuphysics2 Pure C# 3D real time physics simulation library, now with a higher version number. 项目地址: https://gitcode.com/gh_mirrors/be/bepuphysics2 BepuPhy…...

用STM32F103和0.96寸OLED做个桌面电子宠物:从GIF动图到屏幕显示的完整流程

用STM32F103和0.96寸OLED打造智能桌面电子宠物&#xff1a;从动图处理到交互设计的完整指南 在嵌入式开发的世界里&#xff0c;没有什么比亲手打造一个会动的电子宠物更有成就感了。想象一下&#xff0c;你的桌面上有一个由0.96寸OLED屏幕和STM32F103微控制器驱动的小生命&…...

实战演练:用nli-distilroberta-base构建智能问答系统的推理模块

实战演练&#xff1a;用nli-distilroberta-base构建智能问答系统的推理模块 1. 项目概述与核心价值 自然语言推理(NLI)是构建智能问答系统的核心技术之一&#xff0c;它能够判断两个句子之间的逻辑关系。nli-distilroberta-base镜像基于轻量级的DistilRoBERTa模型&#xff0c…...

GitHub协作开发AnythingtoRealCharacters2511项目指南

GitHub协作开发AnythingtoRealCharacters2511项目指南 1. 项目概述与协作价值 AnythingtoRealCharacters2511是一个专门将动漫角色转换为写实真人形象的AI模型项目。这个模型基于Lora技术&#xff0c;经过30900步训练&#xff0c;使用103组图组&#xff08;合计206张图片&…...

ADG实时同步失效的深层原因:从MRP0的WAIT_FOR_LOG状态看standby redolog设计要点

ADG实时同步失效的深层解析&#xff1a;从WAIT_FOR_LOG状态看SRL设计关键点 当Oracle Data Guard环境中MRP0进程陷入WAIT_FOR_LOG状态时&#xff0c;这就像高速公路上的应急车道被占用——整个容灾系统的实时同步能力将陷入瘫痪。本文将带您穿透现象看本质&#xff0c;从存储结…...

seo网上教程有哪些常见错误

SEO网上教程有哪些常见错误 在互联网时代&#xff0c;SEO&#xff08;搜索引擎优化&#xff09;已经成为网站流量和排名提升的关键因素。很多人在学习SEO过程中&#xff0c;常常会遇到一些误区&#xff0c;甚至在网上找到的一些教程中也包含了不少错误。本文将详细介绍一些常见…...

OpenClaw飞书机器人配置:Phi-3-mini-128k-instruct对话式任务触发

OpenClaw飞书机器人配置&#xff1a;Phi-3-mini-128k-instruct对话式任务触发 1. 为什么选择飞书OpenClawPhi-3的组合&#xff1f; 去年团队规模扩张到15人时&#xff0c;我突然发现每天要花2小时处理各种琐碎请求&#xff1a;"下周会议材料准备好了吗&#xff1f;"…...