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.hqwc.cn/news/103039.html

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

相关文章

Linux相关指令(下)

cat指令 查看目标文件的内容 常用选项&#xff1a; -b 对非空输出行编号 -n 对输出的所有行编号 -s 不输出多行空行 一个重要思想&#xff1a;linux下一切皆文件&#xff0c;如显示器文件&#xff0c;键盘文件 cat默认从键盘中读取数据再打印 退出可以ctrlc 输入重定向<…

日常开发中,提升技术的13个建议

最近有位好友问我&#xff1a;日常开发中&#xff0c;都是在做业务需求&#xff0c;如何提升自己的技术呢&#xff1f;因此&#xff0c;本文小黑整理了提升技术的13个建议&#xff0c;小伙伴们&#xff0c;一起加油。 1. 打好基础,深入学习语言特性 比如&#xff0c;对于Java程…

7英寸触摸显示屏企业网络电话

SV-X77英寸触摸显示屏企业网络电话 SV-X7网络电话是一款带有7英寸触摸显示屏的高端式企业级电话&#xff0c;以先进设计及强大的功能大幅度提高企业工作效率。 功能亮点 √ 虚拟可编程按键 — 可动态显示4个分页&#xff0c;每页可设置显示29个DSS键的状态&#xff0c;最多支持…

记一次以太网连接失败修复

症状: 很久没用这个电脑了&#xff0c;开机以后&#xff0c;发现连不上校园网。 遂检查网线&#xff0c;发现网线连在自己笔记本是可以用的&#xff0c;说明网线没问题。 但是网线连在主机是红灯常亮黄灯闪烁&#xff0c;怀疑是网卡有问题&#xff08;后证明不是&#xff0c…

手机上pdf转word的方法,快来掌握一下吧

在日常工作和学习中&#xff0c;我们常常需要将PDF文件转为Word文档以方便编辑和修改。本文将介绍手机上PDF转Word的方法及需要注意的事项。 PDF转Word的方法 目前市面上有很多PDF转Word的应用&#xff0c;通常都是在电脑上操作的&#xff0c;但是很多时候我们不在电脑前如果需…

智慧能源方案:TSINGSEE青犀AI算法中台在能源行业的应用

一、方案背景 互联网、物联网、人工智能等新一代信息技术引领新一轮产业革命&#xff0c;加快能源革命步伐。尤其是随着人工智能技术的不断发展&#xff0c;AI智能检测与识别技术在能源行业的应用也越来越广泛。与此同时&#xff0c;国家出台多项政策&#xff0c;将智慧能源纳…

【ALM工具软件】上海道宁与Perforce为您带来用于整个生命周期的应用程序生命周期管理软件

Helix ALM是 用于整个生命周期的 应用程序生命周期管理的ALM软件 具有专用于 需求管理&#xff08;Helix RM&#xff09;、测试用例管理&#xff08;Helix TCM&#xff09; 问题管理&#xff08;Helix IM&#xff09;的功能模块 Helix ALM提供了 无与伦比的可追溯性 您将…

OceanBase 里的 schema 是什么?

李博洋 OceanBase 技术部研发工程师。 OceanBase 开源社区里经常会看到一些类似于 “ schema 是什么” 的疑问&#xff1a; 很多同学经常会误以为在 OceanBase 里&#xff0c;schema 只是 database 的同义词&#xff0c;这次分享就从 schema 是什么这个问题稍微展开聊一下。 首…

Java多线程4种拒绝策略

文章目录 一、简介二、AbortPolicy拒绝策略A. 概述B. 拒绝策略实现原理C. 应用场景D. 使用示例 三、CallerRunsPolicy拒绝策略A. 概述B. 拒绝策略实现原理C. 应用场景D. 使用示例 四、DiscardPolicy拒绝策略A. 概述B. 拒绝策略实现原理C. 应用场景D. 使用示例 五、DiscardOldes…

libQGLViewer的编译和使用

文章目录 libQGLViewer的编译和使用1 前言2 libQGLViewer开发环境搭建2.1 Qt Creator的下载安装2.2 libQGLViewer的下载编译2.3 安装Qt Designer 的QGLViewer控件插件&#xff08;可选&#xff09;2.3 关于Qt Designer 的QGLViewer控件插件的一些问题 3 在自己的项目中调用4 总…

功能定义-紧急制动系统

功能简介 紧急制动系统的触发过程如上图所示&#xff1a; 安全距离报警&#xff1a;当两车距离较近时&#xff0c;会给予驾驶员相应提示 预报警&#xff1a;当两车存在碰撞风险但风险较低【Danger Level1】时&#xff0c;会给予驾驶员提示【提示相比之前更为明显】 制动预填充&…

Leetcode 2431.最小偶倍数

给你一个正整数 n &#xff0c;返回 2 和 n 的最小公倍数&#xff08;正整数&#xff09;。 示例 1&#xff1a; 输入&#xff1a;n 5 输出&#xff1a;10 解释&#xff1a;5 和 2 的最小公倍数是 10 。示例 2&#xff1a; 输入&#xff1a;n 6 输出&#xff1a;6 解释&#…