C++ 第三讲

news2025/1/22 9:07:53

1 >手动封装一个顺序栈类(数据元素为整形),要求私有成员属性:堆区空间的指针,用于存放数据,和一个指向栈顶元素的变量

main.cpp

#include "zuoye.h"

int main()
{
    //实例化对象
    My_stack Stck;

    My_stack &st = Stck;

    //入栈
    Stck.My_pop(st);
    //出栈
    Stck.My_push(st);

    int key = Stck.My_get(st);
    cout << "栈顶元素 >>> " << key << endl;

    return 0;
}

head.h

#ifndef ZUOYE_H
#define ZUOYE_H


#include <iostream>

using namespace std;

#define N 10

class My_stack
{
private:
    int *ptr;
    int top;

public:
    My_stack():ptr(new int [N]), top(-1) {
        cout << "顺序栈创建成功" << endl;
    }
    ~My_stack() {
        delete []ptr;
        cout << "顺序栈退出成功" << endl;
    }
    //判空
    bool My_empty(My_stack &st);
    //判满
    bool My_full(My_stack &st);
    //入栈
    void My_pop(My_stack &st);
    //出栈
    void My_push(My_stack &st);
    //遍历
    void My_show(My_stack &st);
    //栈顶元素的引用
    int My_get(My_stack &st);
};

#endif // ZUOYE_H

test.cpp

#include "zuoye.h"



//判空
bool My_stack :: My_empty(My_stack &st){
   if(-1 == st.top){
       return true;
   }
   return false;
}
//判满
bool My_stack :: My_full(My_stack &st){
    if(N-1 == st.top){
        return true;
    }
    return false;
}
//入栈
void My_stack :: My_pop(My_stack &st){
    char ch = '\0';
    int key = 0;

    while(1){
        //入栈
        cout << " 是否入栈 Y/N >>> " ;
        cin >> ch;
        if(ch == 'Y' || ch == 'y'){
            cout << " 请输入要入栈的值 >>> " ;
            cin >> st.ptr[++(st.top)];

        }else{
            break;
        }
        //判满
        key = My_full(st);
        if(1 == key){
          cout << "栈满" << endl;
          break;
        }
    }
    My_show(st); //遍历
}

void My_stack :: My_push(My_stack &st){
    bool key;
    char ch = 0;

    while(1){
        key = My_empty(st);
        //判空
        if(1 == key){
          cout << "栈空" << endl;
          break;
        }
        cout << " 是否出栈 Y/N >>>";
        cin >> ch;
        //出栈
        if(ch == 'Y' || ch == 'y'){
            cout << " 出栈的值为 >>>" << st.ptr[(st.top)--];
        }else{
            break;
        }
    }
    My_show(st);  //遍历
}
//遍历
void My_stack :: My_show(My_stack &st){
    int i = 0;
    for(;i <= st.top ; i++){
        cout << st.ptr[i] << "  ";
    }
    cout << endl;
}
//栈顶元素引用
int My_stack :: My_get(My_stack &st){
    return st.ptr[st.top];
}

2 >思维导图

 

 

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

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

相关文章

【数据结构】手撕排序NO.1----排序初识

目录 一. 前言 二. 排序的概念及运用 2.1 排序的概念 2.2 排序的运用 2.3 常见的排序算法 三. 冒泡and选择排序 3.1 冒泡排序 3.2 选择排序 四. 各大排序算法的复杂度和稳定性 一. 前言 从本期开始&#xff0c;我们的数据结构将迎来一个新的篇章&#xff1a;排序篇&#xff…

【7天学GO】第1章 开发环境

1.1 开篇介绍(必看) A. Why choose the go language B. 学语言阶段 1.2 环境搭建前戏 A. 学习一门语言步骤 B. 编译型与解释型 1.3 mac系统Go开发环境搭建 (略) 1.4 linux系统Go开发环境搭建 (略) 1.5 windows系统Go开发环境搭建 A. 开发环境搭建 Stage 1&#xff1a…

Appium+python自动化(十一)- 元素定位- 下卷超详解)

1、 List定位 List故名思义就是一个列表&#xff0c;在python里面也有list这一个说法&#xff0c;如果你不是很理解什么是list&#xff0c;这里暂且理解为一个数组或者说一个集合。首先一个list是一个集合&#xff0c;那么他的个数也就成了不确定性&#xff0c;所以这里需要用复…

和为 K 的子数组——前缀和+哈希

题目链接&#xff1a;力扣 注意&#xff1a;此题不能使用滑动窗口&#xff0c;因为数组中可能会出现负数。也就是说右指针向后移1位不能保证区间会增大&#xff0c;左指针向后移1位也不能保证区间和会减小。给定左右指针的位置没有二段性 已知sum[i]是从nums[0~i]的和&#x…

STM32之按键驱动的使用和自定义(MultiButton)

原始Github地址 Github地址 修改后 调整内容 将宏定义转换成配置结构体 头文件 #ifndef _MULTI_BUTTON_H_ #define _MULTI_BUTTON_H_#include "stdint.h" #include "string.h"//According to your need to modify the constants. //#define TICKS_IN…

数据结构--图的存储邻接表法

数据结构–图的存储邻接表法 邻接矩阵&#xff1a; 数组实现的顺序存储&#xff0c;空间复杂度高&#xff0c;不适合存储稀疏图 邻接表&#xff1a; 顺序链式存储 邻接表法&#xff08;顺序链式存储&#xff09; //边/弧 typedef struct ArcNode {int adjvex; //边/弧指向哪个…

MVX-Net Multimodal VoxelNet for 3D Object Detection 论文学习

论文链接&#xff1a;MVX-Net Multimodal VoxelNet for 3D Object Detection 1. 解决了什么问题&#xff1f; 2D 目标检测取得了显著成效&#xff0c;但由于输入模态的本质区别&#xff0c;CNN 无法直接应用在 3D 检测任务。LiDAR 能准确地定位到 3D 空间的物体&#xff0c;基…

根据对象数组的key进行分组

简单版&#xff1a; const arr [{key: aaa,tableName: bbbbb},{key: aaa,tableName: bbbbb},{key: www,tableName: bbbbb},{key: www,tableName: bbbbb},{key: mysql_ytr,tableName: bbbbb} ]// 把arr按key進行分組&#xff0c; 輸出結果是對象&#xff0c;對象裡面用key做鍵…

logback自定义调用以及文件输出

1、logback 首先五大日志等级是不可更改的&#xff0c;我们所定义的日志输出和调用也是用的这五大等级&#xff0c;这个就不多说了&#xff0c;没啥用。 2、效果 调用 String msg "测试日志"; MyLoger.myloger(msg); 输出 2023-07-18 10:55:05 [main] INFO m…

[element-ui] el-select,虚拟滚动(vue-virtual-scroll-list)

一、问题描述 表单中某下拉框&#xff0c;由于数据过多&#xff0c;选择的时候会因为数据量过大导致页面卡顿&#xff0c;于是对于el-select进行二次封装&#xff0c;实现虚拟滚动。 二、实现如下&#xff1a; 看起来是加载了全部数据&#xff0c;实际上只加载了自己设定的1…

单例模式类设计|什么是饿汉模式和懒汉模式

前言 那么这里博主先安利一些干货满满的专栏了&#xff01; 首先是博主的高质量博客的汇总&#xff0c;这个专栏里面的博客&#xff0c;都是博主最最用心写的一部分&#xff0c;干货满满&#xff0c;希望对大家有帮助。 高质量干货博客汇总https://blog.csdn.net/yu_cblog/c…

汇编实现1-100累加(ARMv7)

汇编实现1-100累加 代码.text .globl _start _start:mov r0,#0 summationmov r1,#0 autoIncrementbl funadd funadd:cmp r1,#100addccs r0,r1,r0addccs r1,r1,#1mov pc,lr stop:b stop .end运行效果

请问如何用oracle触发器实现不允许新增/删除表/增加/减少/修改字段类型

请问如何用oracle触发器实现不允许新增/删除表/增加/减少/修改字段类型 给本帖投票 56211打赏收藏 分享 转发到动态举报 写回复 性能测试中发现oracle11g数据库每天22点,oralce进程CPU占用率突增>> 11 条回复 切换为时间正序 请发表友善的回复… 发表回复 microsof…

UWB天线设计之一种优化扁平超宽带单极的新方法

文章亮点 一种新颖的方法提出了扁平超宽带单极天线。 通过应用收缩,可以设计具有相同性能的更小的天线作为平面单极天线。 优化结果表明该方法能够设计非常小的天线。 在这项研究中,提出了一种优化扁平超宽带单极天线的新方法。在该方法中,一般性地描述了天线的形状。这种一…

Http 接口测试框架

目录 前言&#xff1a; 实际效果 框架的下一步 最新框架图&#xff08;红色部分未完成&#xff09; 部分代码 你需要做的 前言&#xff1a; 在进行HTTP接口测试时&#xff0c;使用一个可靠的测试框架可以提高测试效率和质量。HTTP接口测试框架是一种用于自动化测试HTTP接…

STM32数字小键盘

基于STM32的数字小键盘 自己的键盘小键盘数字键坏了几个&#xff0c;准备自己用STM32做一个数字键盘。 硬件 找了一些资料&#xff0c;感谢知乎老哥。 原理图 采用的是主控是STM32F103RBT6&#xff0c;上拉1.5K接高速USB。按键采用的是矩阵按键。轴位可以自己选择。还接了一…

OpenCv之图像轮廓

目录 一、图像轮廓定义 二、绘制轮廓 三、计算轮廓面积与周长 一、图像轮廓定义 图像轮廓是具有相同颜色或灰度的连续带你的曲线.轮廓在形状分析和物体的检测和识别中很有用 轮廓的作用: 用于图形分析物体的识别与检测 注意点: 为了检测的准确性&#xff0c;需要先对图像…

AI 救不了好莱坞,16 万演员联合编剧上演史诗级「罢工大戏」

内容一览&#xff1a; 近日&#xff0c;美国演员工会正式加入编剧工会行列&#xff0c;开始举行罢工&#xff0c;由此&#xff0c;被多家媒体称为好莱坞「末日」时刻来临。值得关注的是&#xff0c;本次罢工的原因&#xff0c;除了老生常谈的薪资问题&#xff0c;还有一个重要的…

多用户商城系统Dokan评测优点与缺点(2023)

目录 多用户商城系统Dokan优点 多用户商城系统Dokan缺点 您应该开始使用多供应商市场吗&#xff1f; 多用户商城系统Dokan评论 为什么选择Dokan&#xff1f; 用户界面 用户友好的前端 仪表板和后端 管理员后台 供应商仪表板 第三方兼容性 Dokan 可以卖什么&…

c#调用cpp库,debug时不进入cpp函数

选中c#的项目&#xff0c;右击属性&#xff0c;进入属性页&#xff0c;点击调试&#xff0c;点击打开调试启动配置文件UI&#xff0c;打开启用本机代码调试。