c++ 实现栈、单向队列、双向队列

一、栈实现

code

//
// Created by shaoxinHe on 2024/6/8.
//#ifndef CPRIMER_MYSTACK_H
#define CPRIMER_MYSTACK_H#include "stdexcept"
#include "iostream"using namespace std;struct queuNode {int num{};queuNode *next = nullptr;
};class myStack {
private:queuNode *stackTop;int stackSize = 0;public:myStack() {stackTop = nullptr;stackSize = 0;}~myStack() {while (stackTop) {delete stackTop;stackTop = stackTop->next;}}bool push(int num) {if (stackSize == 0) {stackTop = new queuNode;stackTop->num = num;stackSize++;return true;} else if (stackSize) {auto *tempNode = new queuNode;tempNode->num = num;tempNode->next = stackTop;stackTop = tempNode;stackSize++;return true;}return false;}int pop() {if (!isEmpty()) {throw out_of_range("栈为空");}int num = stackTop->num;queuNode *temp = stackTop;stackTop = stackTop->next;delete temp;stackSize--;return num;}int size(){return this->stackSize;}bool isEmpty(){return size() == 0;}
};#endif //CPRIMER_MYSTACK_H

二、单向队列

code

//
// Created by shaoxinHe on 2024/6/8.
//#ifndef CPRIMER_MYQUEUE_H
#define CPRIMER_MYQUEUE_H#include "stdexcept"struct queueNode {int num;queuNode *next = nullptr;
};class myQueue {
private:queueNode *front, *rear;int queueSize;
public:myQueue() {front = nullptr;rear = nullptr;queueSize = 0;}~myQueue() {while (front) {queuNode *temp = front;front = front->next;delete temp;}}int size() {return queueSize;}bool isEmpty() {return queueSize == 0;}void push(int num) {auto *temp = new queuNode;temp->num = num;if (isEmpty()) {front = rear = temp;queueSize++;return;}// 队尾插入元素rear->next = temp;rear = temp;queueSize++;}int pop() {if (isEmpty()) throw std::out_of_range("数组越界");queuNode *temp = front;front = front->next;int num = temp->num;queueSize--;delete temp;return num;}};#endif //CPRIMER_MYQUEUE_H

三、双向队列

code

//
// Created by shaoxinHe on 2024/6/8.
//#ifndef CPRIMER_DOUBLEQUEUE_H
#define CPRIMER_DOUBLEQUEUE_H#include "stdexcept"struct doubleNode {int data;doubleNode *pre, *next;explicit doubleNode(int num) {data = num;pre = next = nullptr;}
};class doubleQueue {
private:int dqSize;doubleNode *front, *rear;
public:doubleQueue() {dqSize = 0;front = rear = nullptr;}~doubleQueue() {while (front) {doubleNode *temp = front;front = front->next;delete temp;}}int size() {return dqSize;}bool isEmpty() {return size() == 0;}void pushFront(int num) {push(num, true);}void pushRear(int num) {push(num, false);}int getFront(){if(isEmpty()) throw std::out_of_range("双向队列为空");return front->data;}int getRear(){if(isEmpty()) throw std::out_of_range("双向队列为空");return rear->data;}void push(int num, bool isFront) {auto *node = new doubleNode(num);if (isEmpty()) {front = rear = node;dqSize++;} else if (isFront) {      // 插入元素到双向队列头front->pre = node;node->next = front;front = node;dqSize++;} else {                  // 插入元素到双向队列的队尾rear->next = node;node->pre = rear;rear = node;dqSize++;}}int popFront() {if (isEmpty()) throw std::out_of_range("双向队列为空");int num = front->data;dqSize--;doubleNode *temp = front;front = front->next;delete temp;return num;}int popRear() {if (isEmpty()) throw std::out_of_range("双向队列为空");int num = rear->data;dqSize--;doubleNode *temp = rear;rear = rear->pre;delete temp;return num;}
};#endif //CPRIMER_DOUBLEQUEUE_H

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/850535.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据+AI 打造企业的“金山银山”

今日之世界,数据是生产资料,而人工智能(AI)是生产工具,它们的结合,带来的是业务的增长、新质生产力的提升,就是金山银山。 创新是源动力 凡是到过浙江省安吉县余村的人,应该都会被它…

2D图片的描边

第一种 Sprite 外边框 原理是找到边缘像素,然后设置颜色,边缘像素的特点是像素的八个方向的邻像素不全是透明或者不全是不透明,这样的像素就是边缘上的像素,下面是找到的shader源码,很简单 Shader "Custom/Spri…

【云原生_K8S系列】Kubernetes 控制器之 Deployment

在 Kubernetes 中,Deployment 是一种高级控制器,负责管理应用的部署和生命周期。它提供了一种声明性的方式来定义应用的期望状态,并确保实际状态与期望状态保持一致。Deployment 可以自动处理应用的滚动更新、扩展和回滚等任务,是…

Spring AI 第二讲 之 Chat Model API 第九节 watsonx.ai Chat

通过 watsonx.ai,你可以在本地运行各种大型语言模型(LLM),并从中生成文本。Spring AI 通过 WatsonxAiChatModel 支持 watsonx.ai 文本生成。 您首先需要拥有一个 watsonx.ai 的 SaaS 实例(以及一个 IBM 云帐户&#x…

Elasticsearch高效检索:基础查询详解

在当今大数据和云计算的时代,信息的快速检索和高效处理成为了企业竞争的关键。Elasticsearch,作为一款基于Lucene构建的开源、分布式、RESTful搜索引擎,以其强大的全文搜索和结构化搜索能力,赢得了众多开发者和企业的青睐。今天&a…

web前端复试经验:深度解析与实用指南

web前端复试经验:深度解析与实用指南 在Web前端开发领域的求职过程中,复试无疑是一个至关重要的环节。它既是对求职者技术实力的全面检验,也是展现个人能力与潜力的绝佳机会。本文将围绕四个方面、五个方面、六个方面和七个方面,…

C++STL(四)priority_queue的详细用法及仿函数实现

目录 一:🔥介绍二:🔥priority_queue 的基本操作三:🔥priority_queue 的原型定义四:🔥重写仿函数4.1.仿函数的介绍4.2.priority_queue仿函数代码示例 五:🔥pri…

Recognize Anything: A Strong Image Tagging Model(RAM模型使用方法)

一、RAM模型介绍 这篇论文介绍了一个名为“Recognize Anything Model”(RAM)的新型基础模型,专用于图像标签识别(图像分类)。这一模型采用大规模图像-文本配对数据进行训练,无需手动注释,能够在…

关于焊点检测(SJ-BIST)模块实现

关于焊点检测(SJ-BIST)模块实现 语言 :Verilg HDL 、VHDL EDA工具:ISE、Vivado、Quartus II 关于焊点检测(SJ-BIST)模块实现一、引言二、焊点检测功能的实现方法(1) 输入接口&#x…

数据库(28)——联合查询

对于union查询&#xff0c;就是把多次查询的结果合并起来&#xff0c;形成一个新的查询结果集。 语法 SELECT 字段列表 FROM 表A... UNION [ALL] SELECT 字段列表 FROM 表B...; 演示 select * from user where age > 22 union all select * from user where age < 50; u…

oracle linux和ubuntu的区别

Oracle Linux和Ubuntu是两种不同的Linux发行版&#xff0c;它们有一些区别&#xff1a; 背景和支持&#xff1a; Oracle Linux是由Oracle公司开发和支持的&#xff0c;它是基于Red Hat Enterprise Linux (RHEL)的一个分支。Ubuntu是由Canonical Ltd.开发和支持的&#xff0c;它…

【Python机器学习】PCA——特征提取(2)

上一篇写过了用单一最近邻分类器训练后的精度只有0.22. 现在用PCA。想要度量人脸的相似度&#xff0c;计算原始像素空间中的距离是一种相当糟糕的方法。用像素表示来比较两张图像时&#xff0c;我们比较的是每个像素的灰度值与另一张图像对应位置的像素灰度值。这种表示与人们…

Vue3 组合式 API:依赖注入(四)

provide() provide() 函数是用于依赖注入的一个关键部分。这个函数允许你在组件树中提供一个值或对象&#xff0c;使得任何子组件&#xff08;无论层级多深&#xff09;都能够通过 inject() 函数来访问这些值。 import { provide, ref } from vue; export default { setup(…

iOS Universal Links 配置

前言 Universal Links 通用链接&#xff0c;我的理解就是通过点击这个链接&#xff0c;能够打开应用&#xff0c;还可以根据配置的路径和参数跳转到App内指定页面和传递参数。我们做微信QQ登录分享时会要求配置这个链接。网上有很多文章介绍了如何配置&#xff0c;但是每次随便…

力扣经典面试题-旋转链表(Java)

1.题目描述&#xff1a;给你一个链表的头节点 head &#xff0c;旋转链表&#xff0c;将链表每个节点向右移动 k 个位置。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], k 2 输出&#xff1a;[4,5,1,2,3] 示例 2&#xff1a; 输入&#xff1a;head [0,1,2], k …

python数据分析-连云港石化基地2023年用电量分析

接下来对连云港石化基地2023年用电量进行分析&#xff0c;首先导入数据分析基本的包&#xff1a; import pandas as pd import matplotlib.pyplot as plt# Load the data from the provided Excel files file_path1 data1.xlsx file_path2 data2.xlsxdata1 pd.read_excel(f…

设计模式之观察者模式ObserverPattern(十一)

一、概述 观察者模式 (Observer Pattern) 是一种行为型设计模式&#xff0c;又被称为发布-订阅 (Publish/Subscribe) 模式&#xff0c;它定义了对象之间的一种一对多的依赖关系&#xff0c;使得当一个对象的状态发生变化时&#xff0c;所有依赖于它的对象都会自动收到通知并更新…

Leetcode 力扣109. 有序链表转换二叉搜索树 (抖音号:708231408)

给定一个单链表的头节点 head &#xff0c;其中的元素 按升序排序 &#xff0c;将其转换为 平衡 二叉搜索树。 示例 1: 输入: head [-10,-3,0,5,9] 输出: [0,-3,9,-10,null,5] 解释: 一个可能的答案是[0&#xff0c;-3,9&#xff0c;-10,null,5]&#xff0c;它表示所示的高…

arm架构下torch环境的安装(主要是conda,torch,torchvision以及tensorflow)

以前装过arm架构下的深度学习环境还是有点麻烦的&#xff0c;在此记录一下 参考&#xff1a;https://blog.csdn.net/condom10010/article/details/128139401?ops_request_misc&request_id&biz_id102&utm_termorin%E5%B9%B3%E5%8F%B0%E6%9E%B6%E6%9E%84%E9%85%8D%E…

ubuntu22.04防火墙策略

1. 安装和配置UFW 1.1 安装UFW 如果UFW尚未安装&#xff0c;可以使用以下命令进行安装&#xff1a; sudo apt update sudo apt install ufw1.2 启用UFW 启用UFW并允许SSH流量&#xff0c;以防止自己被锁定在系统之外&#xff1a; sudo ufw allow OpenSSH sudo ufw enable2…