Cpp/Qtday030908cpp基础

目录

目录

自行封装一个栈的类,包含私有成员属性:栈的数组、记录栈顶的变量

成员函数完成:构造函数、析构函数、拷贝构造函数、入栈、出栈、清空栈、判空、判满、获取栈顶元素、求栈的大小

头文件:stack.h

源文件:  stack.cpp

测试文件:main.cpp

效果图

自行封装一个循环顺序队列的类,包含私有成员属性:存放队列的数组、队头位置、队尾位置

成员函数完成:构造函数、析构函数、拷贝构造函数、入队、出队、清空队列、判空、判满、求队列大小

头文件:queue.h

源文件:  queue.cpp

测试文件:main.cpp

效果图

思维导图


自行封装一个栈的类,包含私有成员属性:栈的数组、记录栈顶的变量
成员函数完成:构造函数、析构函数、拷贝构造函数、入栈、出栈、清空栈、判空、判满、获取栈顶元素、求栈的大小
头文件:stack.h
#ifndef STACK_H
#define STACK_H
#include <iostream>using namespace std;class Stack
{
private:int data[128];int top;
public:Stack();~Stack();Stack(Stack &s);//判空bool stack_empty();//返回布尔类型,真为空,假为非空//判满bool stack_full();//返回布尔类型,真为满,假为非满//入栈int stack_in(int num);//出栈int stack_out();//清空栈bool stack_clear();//获取栈顶元素int stack_get_top();//求栈的大小int stack_size();//为了便于观察现象,加一个展示栈内元素的函数,从栈顶向栈底void stack_show();
};#endif // STACK_H
源文件:  stack.cpp
#include "stack.h"Stack::Stack():top(-1){cout<<"Stack:构造函数"<<endl;
}Stack::~Stack(){cout<<"Stack:析构函数"<<endl;
}Stack::Stack(Stack &s):top(s.top){for(int i=0; i<=top; i++){data[i] = s.data[i];}cout<<"Stack:拷贝构造函数"<<endl;
}
//判空
bool Stack::stack_empty(){//top正好记录栈顶元素的下标,所以当top为-1时,栈空return -1 == top;
}
//判满
bool Stack::stack_full(){//top正好记录栈顶元素的下标,所以当top为127时,栈满return 127 == top;
}
//入栈
int Stack::stack_in(int num){//如果栈满,则拒绝入栈if(Stack::stack_full()){cout<<"栈已满"<<endl;return -1;}//将栈顶变量的值+1,就能指向新的栈顶top++;//将要入栈的数据放入数组中data[top] = num;return 0;
}
//出栈
int Stack::stack_out(){//判断栈是否为空,为空则无法出栈if(Stack::stack_empty()){cout<<"栈已空"<<endl;return -1;}//按照我的定义,top正好记录了栈顶元素的下标,因此top--,会将top自减,并且top--这个表达式//的值为top,所以可以输出data[top]也就是栈顶元素的值,同时top自减一次,而要出栈,出的//就是栈顶元素return data[top--];
}
//清空栈
bool Stack::stack_clear(){//如果栈本身为空则无需清空if(Stack::stack_empty()){cout<<"栈已空"<<endl;return false;}//如果栈非空则需要清空//将栈顶指针置为-1即可top = -1;return true;
}
//获取栈顶元素
int Stack::stack_get_top(){//首先栈要非空if(Stack::stack_empty()){cout<<"栈已空"<<endl;return -1;}//原理与出栈相同,唯一的区别就是无需将栈顶变量移动return data[top];
}
//求栈的大小
int Stack::stack_size(){//已知,top变量记录了栈顶元素的下标,所以要求栈中的元素数量,只需将top+1就可得到return top+1;
}
//为了便于观察现象,加一个展示栈内元素的函数,从栈顶向栈底
void Stack::stack_show(){//首先栈要非空if(Stack::stack_empty()){cout<<"栈为空"<<endl;return ;}for(int i=top; i>-1; i--){cout << data[i] << "  ";}cout<<endl;
}
测试文件:main.cpp
#include <iostream>
#include "stack.h"using namespace std;int main()
{Stack s1;//入栈s1.stack_in(4);//展示栈内元素cout<<"s1:";s1.stack_show();s1.stack_in(3);//展示栈内元素cout<<"s1:";s1.stack_show();s1.stack_in(9);//展示栈内元素cout<<"s1:";s1.stack_show();s1.stack_in(6);//展示栈内元素cout<<"s1:";s1.stack_show();s1.stack_in(1);//展示栈内元素cout<<"s1:";s1.stack_show();s1.stack_in(5);//展示栈内元素cout<<"s1:";s1.stack_show();s1.stack_in(5);//展示栈内元素cout<<"s1:";s1.stack_show();s1.stack_in(7);//展示栈内元素cout<<"s1:";s1.stack_show();//拷贝构造函数的使用Stack s2(s1);//展示栈内元素cout<<"s2:";s2.stack_show();//出栈cout<<s1.stack_out()<<"出栈成功"<<endl;//展示栈内元素cout<<"s1:";s1.stack_show();cout<<s1.stack_out()<<"出栈成功"<<endl;//展示栈内元素cout<<"s1:";s1.stack_show();cout<<s1.stack_out()<<"出栈成功"<<endl;//展示栈内元素cout<<"s1:";s1.stack_show();//获取栈的大小cout<<"此时栈内元素的数量为:"<<s1.stack_size()<<endl;//栈顶元素为cout<<"栈顶元素为:"<<s1.stack_get_top()<<endl;//清空栈s1.stack_clear();cout<<"栈清空成功"<<endl;//展示栈内元素cout<<"s1:";s1.stack_show();return 0;
}
效果图

自行封装一个循环顺序队列的类,包含私有成员属性:存放队列的数组、队头位置、队尾位置
成员函数完成:构造函数、析构函数、拷贝构造函数、入队、出队、清空队列、判空、判满、求队列大小
头文件:queue.h
#ifndef QUEUE_H
#define QUEUE_H#include <iostream>using namespace std;class Queue
{
private:int data[12];int head;int tail;public://构造函数Queue();//析构函数~Queue();//拷贝构造函数Queue(Queue &q);//判空bool queue_empty();//判满bool queue_full();//入队int queue_in(int num);//出队int queue_out();//清空队列bool queue_clear();//求队列大小int queue_size();//为了便于观察现象,加一个展示队列元素的函数,从队头到队尾void queue_show();
};#endif // QUEUE_H
源文件:  queue.cpp
#include "queue.h"//构造函数
Queue::Queue():head(0),tail(0){cout<<"Queue:构造函数"<<endl;
}//析构函数
Queue::~Queue(){cout<<"Queue:析构函数"<<endl;
}//拷贝构造函数
Queue::Queue(Queue &q):head(q.head),tail(q.tail){int h = head;while(h!=tail){data[h] = q.data[h];h = (h+1)%12;}cout<<"Queue:拷贝构造函数"<<endl;
}//判空
bool Queue::queue_empty(){//当队列的头变量与尾变量的值相同时,队列为空return head == tail;
}//判满
bool Queue::queue_full(){//队尾变量记录的下标中是不保存变量的,以便操作与计数//因此,当队尾变量的值比对头变量的值小1或者-11的时候,队满return (tail+1)%12 == head;
}//入队
int Queue::queue_in(int num){//要能入队,首先队列不能为满if(Queue::queue_full()){cout<<"队列已满,无法入队"<<endl;return -1;}//此时可以入队data[tail] = num;//队尾变量自增一次tail = (tail + 1)%12;return 0;
}//出队
int Queue::queue_out(){//要能出队,首先队列不能为空if(Queue::queue_empty()){cout<<"队列已空,无法入队"<<endl;return -1;}//此时可以出队int tmp = data[head];//对头变量自增一次head = (head + 1)%12;return tmp;
}//清空队列
bool Queue::queue_clear(){//若队列为空则无需清空if(Queue::queue_empty()){cout<<"队列已空,无需清空"<<endl;return false;}//操作队头队尾变量,使满足队列为空的条件head = tail;return true;
}//求队列大小
int Queue::queue_size(){//根据队首队尾的位置即可求出队列大小return (tail + 12 - head)%12;
}//为了便于观察现象,加一个展示队列元素的函数,从队头到队尾
void Queue::queue_show(){//若队列为空则提示队列为空if(Queue::queue_empty()){cout<<"队列为空"<<endl;return;}int h = head;while(h!=tail){cout<<data[h]<<"  ";h = (h+1)%12;}cout<<endl;return;
}
测试文件:main.cpp
#include <iostream>
#include "queue.h"
using namespace std;int main()
{Queue q1;//入队q1.queue_in(4);//展示cout<<"q1: ";q1.queue_show();//入队q1.queue_in(3);//展示cout<<"q1: ";q1.queue_show();//入队q1.queue_in(9);//展示cout<<"q1: ";q1.queue_show();//入队q1.queue_in(6);//展示cout<<"q1: ";q1.queue_show();//入队q1.queue_in(1);//展示cout<<"q1: ";q1.queue_show();//入队q1.queue_in(5);//展示cout<<"q1: ";q1.queue_show();//入队q1.queue_in(5);//展示cout<<"q1: ";q1.queue_show();//入队q1.queue_in(7);//展示cout<<"q1: ";q1.queue_show();//拷贝构造函数Queue q2(q1);//展示cout<<"q2: ";q2.queue_show();//出队cout<<q1.queue_out()<<"出队成功"<<endl;//出队cout<<q1.queue_out()<<"出队成功"<<endl;//出队cout<<q1.queue_out()<<"出队成功"<<endl;//展示cout<<"q1: ";q1.queue_show();//求队列大小cout<<"q1队列大小为"<<q1.queue_size()<<endl;//清空队列q1.queue_clear();cout<<"队列清空成功"<<endl;//展示cout<<"q1: ";q1.queue_show();//求队列大小cout<<"q1队列大小为"<<q1.queue_size()<<endl;return 0;
}
效果图

思维导图

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

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

相关文章

Android——数据存储(一)(二十一)

1. 数据存储 1.1 知识点 &#xff08;1&#xff09;掌握Android数据存储的分类&#xff1b; &#xff08;2&#xff09;可以使用SharedPreferences存储数据。 1.2 具体内容 对于我们数据的存储而言&#xff0c;Android一共提供了5个数据存储的方式&#xff1a;SharedPrefe…

一个帮各位填秋招表格省一点事的浏览器插件

最近应该很多和我一样的双非鼠鼠在秋招等面试&#xff0c;而且处于海投阶段&#xff0c;为了不忘记投了哪些公司&#xff0c;可以用这样一个表格来记录&#xff1a; 其中有些字段&#xff0c;比如状态、投递时间、查看进度的网址其实可以不手动输入&#xff0c;所以搞个插件来…

使用Idea导入mybatis dependence时爆红解决方法

<dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.5</version></dependency>如上在pom.xml中配置mybatis的dependence1时出现爆红的情况。 解决方法 找到idea编辑器右侧的maven按钮…

java_error_in_idea.hprof 文件

在用户目录下的java_error_in_idea.hprof文件(/Users/用户) 大约1.5个G,IDEA的错误日志,可以删除

Java基于 SpringBoot 的车辆充电桩系统

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W,Csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 文章目录 1、效果演示效果图技术栈 2、 前言介绍&#xff08;完整源码请私聊&#xff09;3、主要技术3.4.1 …

Mysql 入门篇之二进制安装

文章目录 Mysql 5.7 入门安装卸载自带组件下载二进制包安装配置 Mysql 8.0 入门安装卸载自带组件下载二进制包安装配置 Mysql 5.7 入门安装 环境说明&#xff1a;CentOS Linux release 7.6.1810 (Core) 4核4G 卸载自带组件 卸载自带的mysql相关组件 rpm -qa | grep mysql rpm…

unity面试题(基础篇)

事件函数的执行顺序 事件函数的执行顺序 - Unity 手册运行 Unity 脚本会按预定顺序执行大量事件函数。本页面将介绍这些事件函数,并说明它们的执行顺序。https://docs.unity.cn/cn/2019.4/Manual/ExecutionOrder.html 加载第一个场景 Awake:始终在任何 Start 函数之前并在实…

RHCA之路---EX280(8)

RHCA之路—EX280(8) 1. 题目 On master.lab.example.com using the template file in http://materials.example.com/exam280/gogs as a basis, install an application in the ditto project according to the following requirements: All of the registry entries must poi…

Python UI自动化 —— pytest常用运行参数解析、pytest执行顺序解析

pytest常用Console参数&#xff1a; -v 用于显示每个测试函数的执行结果-q 只显示整体测试结果-s 用于显示测试函数中print()函数输出-x 在第一个错误或失败的测试中立即退出-m 只运行带有装饰器配置的测试用例-k 通过表达式运行指定的测试用例-h 帮助 首先来看什么参数都没加…

【数据结构】 七大排序详解(贰)——冒泡排序、快速排序、归并排序

文章目录 ⚽冒泡排序⚾算法步骤&#x1f3a8;算法优化&#x1f94e;代码实现&#xff1a;&#x1f3c0;冒泡排序的特性总结 &#x1f9ed;快速排序⚽算法思路&#x1f4cc;思路一&#xff08;Hoare版&#xff09;&#x1f4cc;思路二&#xff08;挖坑法&#xff09;&#x1f4c…

普通用户使用spark的client无法更新Ranger策略

普通用户使用spark的client无法更新Ranger策略 报错图片&#xff1a; WARN org.apache.ranger.admin.client.RangerAdminRESTClient: Error getting Roles. secureModetrue, usercaojianxiangUCDIPA.VIATRIS.CC (auth:KERBEROS)&#xff0c;responsef"httpStatusCode&quo…

基于SSM的社区管理与服务系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

【JavaScript】JS语法入门到实战

文章目录 一、初识JavaScript1. 什么是JavaScript&#xff1f;2. JavaScript 和 HTML 和 CSS 之间的关系3. JavaScript的运行过程4. JavaScript的组成 二、JavaScript的书写形式三、变量1. 输入输出2. 变量的使用3. 数据类型 四、运算符五、分支和循环语句1. 分支语句2. 循环语…

数据结构之队列的实现(附源码)

目录 一、队列的概念及结构 二、队列的实现 拓展&#xff1a;循环队列 三、初学的队列以及栈和队列结合的练习题 一、队列的概念及结构 队列&#xff1a;只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特殊线性表&#xff0c;队列具有先进先出FIFO(Fi…

后端SpringBoot+前端Vue前后端分离的项目(一)

前言&#xff1a;后端使用SpringBoot框架&#xff0c;前端使用Vue框架&#xff0c;做一个前后端分离的小项目&#xff0c;需求&#xff1a;实现一个表格&#xff0c;具备新增、删除、修改的功能。 目录 一、数据库表的设计 二、后端实现 环境配置 数据处理-增删改查 model…

C++的纯虚函数和抽象类

在C++中,可以将虚函数声明为纯虚函数,语法格式为: virtual 返回值类型 函数名 (函数参数) = 0; 纯虚函数没有函数体,只有函数声明,在虚函数声明的结尾加上=0,表明此函数为纯虚函数。 最后的=0并不表示函数返回值为0,它只起形式上的作用,告诉编译系统“这是纯虚函数”。…

MySQL的概述、版本、安装过程

作者&#xff1a;Insist-- 个人主页&#xff1a;insist--个人主页 作者会持续更新网络知识和python基础知识&#xff0c;期待你的关注 目录 一、MySQL的概述 二、MySQL的版本 三、MySQL的下载与安装 前言 本文将来谈谈MySQL的概述&#xff0c;MySQL的版本&#xff0c;以及它…

Redis 缓存穿透击穿和雪崩

一、说明 Redis 缓存的使用&#xff0c;极大的提升了应用程序的性能和效率&#xff0c;特别是数据查询方面。但同时&#xff0c;它也带来了一些问题。其中&#xff0c;最要害的问题&#xff0c;就是数据的一致性问题&#xff0c;从严格意义上讲&#xff0c;这个问题无解。如果对…

C++11新特性③ | 可变参数模板介绍

目录 1、引言 2、可变参数模板函数 2.1、可变参数模板函数的定义 2.2、参数包的展开 3、可变参数模板类 3.1、继承方式展开参数包 3.2、模板递归和特化方式展开参数包 VC常用功能开发汇总&#xff08;专栏文章列表&#xff0c;欢迎订阅&#xff0c;持续更新...&#xff…

js获得相对路径文件,并上传到服务器

如何通过js获得相对路径文件 已知一个相对路径文件&#xff0c;如何使用js将该文件读取为File格式&#xff0c;最后上传到服务器中呢。 1.最简单的解决方案——fetch 代码 import ./index.scss// js通过相对路径获取文件 function FetchGetLocalFile() {const fetchLocalFile …