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

C++ 学习 2024.9.3

封装栈与队列

栈:

#include <iostream>using namespace std;class Stack
{
private:int *a;      //动态数组存储元素int size;    //栈容量int top;   //栈顶元素索引
public://有参构造Stack(int size):size(size),top(-1){a=new int[size];}//析构~Stack(){delete[]a;}//判空bool empty(){return top==-1;}//入栈void push_in(int const &e){if(top+1==size)  //二倍扩容{int *newa=new int[size*2];for(int i=0;i<size;++i){newa[i]=a[i];}delete[]a;a=newa;size*=2;}a[++top]=e;}//出栈void pop(){if(empty()){cout<<"栈为空,出栈失败"<<endl;}else{--top;}}//栈内元素个数int size_1(){if(empty())  //栈空{return 0;}return top+1;}//访问栈顶元素void at_top(){if(!empty()){cout<<"栈顶元素为:"<<a[top]<<endl;}else{cout<<"栈为空"<<endl;}}//展示函数void show(){cout<<"栈内元素为"<<endl;for(int i=0;i<=top;i++){cout<<a[i]<<" ";}cout<<endl;}
};int main()
{Stack s(10);s.push_in(5);s.push_in(2);s.push_in(0);s.show();             //5 2 0int count=s.size_1();cout<<"栈内元素个数为:"<<count<<endl;s.push_in(9); s.show();           //5 2 0 9s.pop();cout<<"执行一次pop函数后"<<endl;s.show();          //5 2 0s.at_top();   //访问栈顶元素s.pop();s.pop();s.pop();   //此时栈为空s.pop();return 0;
}

队列:

#include <iostream>using namespace std;
int count=0;
class Queue
{
private:int *a;     //动态数组存储int size;    //队列容量int front;   //队头元素索引int last;  //队尾元素索引
public://有惨构造Queue(int size):size(size),front(0),last(0){a=new int[size];}//析构函数~Queue(){delete []a;}//判空bool empty(){return front==last;}//访问队头元素void at_front(){if(empty()){cout<<"队列为空"<<endl;}else{cout<<"队头元素为:"<<a[front]<<endl;}}//访问队尾元素void at_last(){if(empty()){cout<<"队列为空"<<endl;}else{cout<<"队尾元素为:"<<a[(last+size-1)&size]<<endl;}}//队列中元素个数int size_1(){if(empty())  //栈空{return 0;}return last-front;}//向队尾插入元素void push_in(int const &e){if((last+1)%size==front)   //二倍扩容{int *newa=new int[size*2];for(int i=0;i<size;++i){newa[i]=a[(front+i)&size];}delete []a;a=newa;size*=2;front=0;last=size/2;}a[last]=e;last=(last+1)%size;count++;}//删除首个元素void pop(){if(empty()){cout<<"队列为空"<<endl;}else{front++;front%=size;}}//展示函数void show(){if(empty()){cout<<"队列为空"<<endl;}else{cout<<"队列中元素为:"<<"";for(int i=front;i<count;i++){cout<<a[i]<<" ";}cout<<endl;}}
};int main()
{Queue q(10);q.push_in(1);q.push_in(3);q.push_in(1);q.push_in(4);q.show();       //1 3 1 4int haha=q.size_1();cout<<"队列中元素个数为:"<<haha<<endl;   //4q.pop();cout<<"执行一次pop函数后"<<endl;q.show();  //3 1 4q.at_front();q.at_last();    //访问队尾元素一直显示0  抓耳挠腮仍无法解决return 0;
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • C++ MQTT客户端库libmosquitto的使用
  • 编译与链接
  • ChatTCP:一款离线TCP数据包分析macOS APP,致力于让分析TCP数据包像看聊天记录一样简单
  • 【QT】析构函数执行引发异常
  • MATLAB 中双引号 ““ 和单引号 ‘‘ 的区别详解
  • 设计模式-原型适配器桥接外观
  • Pixelmator Pro for Mac 专业图像处理软件【媲美PS的修图软件】
  • 【openwrt-21.02】T750 openwrt-21.02 Linux-5.4.238 input子系统----gpio-keys实现分析
  • MySQL5.7配置优化
  • Shell教程_在Bash_Shell中使用for循环详解
  • 《Rust避坑入门记》第1章:挖数据竞争大坑的滥用可变性
  • 2.SpringBoot项目pom.xml文件配置
  • ASP.NET Core 入门教学五 集成日志
  • Linux:手搓shell
  • 研究生深度学习入门的十天学习计划------第六天
  • @angular/forms 源码解析之双向绑定
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • CSS 提示工具(Tooltip)
  • gitlab-ci配置详解(一)
  • JavaScript创建对象的四种方式
  • js正则,这点儿就够用了
  • Python利用正则抓取网页内容保存到本地
  • React 快速上手 - 07 前端路由 react-router
  • React系列之 Redux 架构模式
  • vue:响应原理
  • XML已死 ?
  • 当SetTimeout遇到了字符串
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 蓝海存储开关机注意事项总结
  • 聊聊directory traversal attack
  • 你真的知道 == 和 equals 的区别吗?
  • 使用 Xcode 的 Target 区分开发和生产环境
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 移动端唤起键盘时取消position:fixed定位
  • 译米田引理
  • Prometheus VS InfluxDB
  • ​油烟净化器电源安全,保障健康餐饮生活
  • # .NET Framework中使用命名管道进行进程间通信
  • # windows 运行框输入mrt提示错误:Windows 找不到文件‘mrt‘。请确定文件名是否正确后,再试一次
  • ###C语言程序设计-----C语言学习(3)#
  • #php的pecl工具#
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (力扣题库)跳跃游戏II(c++)
  • (每日一问)操作系统:常见的 Linux 指令详解
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (十三)Flask之特殊装饰器详解
  • (四)进入MySQL 【事务】
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • (转)Windows2003安全设置/维护
  • (最简单,详细,直接上手)uniapp/vue中英文多语言切换
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...
  • .NET Core 和 .NET Framework 中的 MEF2
  • .NET Core中如何集成RabbitMQ