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

C++手动实现栈、和队列

栈的实现

头文件
#ifndef MY_STACK_H
#define MY_STACK_H
#include <iostream>using namespace std;class my_stack
{
private:int *base;//动态栈指针int top;//栈顶元素int size;//栈大小
public:my_stack();//无参构造my_stack(int size):top(-1),size(size){base = new int[this->size];cout<<"有参构造"<<endl;}~my_stack(){delete []base;cout<<"析构函数"<<endl;}//赋值my_stack & operator=(const my_stack &str);//访问栈顶元素int my_top();//检查容器是否为空bool my_empty();//返回容纳元素数int my_size();//插入栈顶void my_push(int value);//删除栈顶void my_pop();
};#endif // MY_STACK_H
源文件
#include "my_stack.h"//赋值
my_stack & my_stack::operator=(const my_stack &str)
{if(this != &str){delete []base;this->size = str.size;this->top = str.top;base = new int[size];for(int i = 0;i<size;i++){base[i] = str.base[i];}}return *this;
}//访问栈顶元素
int my_stack::my_top()
{if(my_empty()){cout<<"栈为空"<<endl;return -1;}return base[top];
}//检查容器是否为空
bool my_stack::my_empty()
{return top == -1;
}//返回容纳元素数
int my_stack::my_size()
{return top+1;
}
//插入栈顶
void my_stack::my_push(int value)
{if(top >= size){cout<<"栈满"<<endl;return;}base[++top] = value;cout<<value<<"插入成功"<<endl;
}
//删除栈顶
void my_stack::my_pop()
{if(my_empty()){cout<<"栈为空"<<endl;return;}top--;cout<<"删除栈顶成功"<<endl;
}
主程序
#include "my_stack.h"
int main()
{my_stack s(10);s.my_push(23);s.my_push(45);s.my_push(74);cout<<"栈顶 = "<<s.my_top()<<endl;cout<<"栈元素个数="<<s.my_size()<<endl;s.my_pop();cout<<"删除栈顶后栈元素个数="<<s.my_size()<<endl;return 0;
}

队列的实现

头文件
#ifndef QUEUE_H
#define QUEUE_H
#include <iostream>using namespace std;class queue
{
private:int *base;//队列动态数组int front;//头部int rear;//尾部int size;//容器大小
public:queue();//无参构造queue(int size):front(0),rear(0),size(size)//有参构造{base = new int[size];cout<<"有参构造"<<endl;}//析构函数~queue(){delete [] base;cout<<"析构函数"<<endl;}//赋值queue &operator=(const queue &str);//访问第一个元素int my_front();//访问最后一个元素int my_back();//检查容器是否为空bool my_empty();//返回容器的元素数int my_size();//向队尾插入元素void my_push(int value);//删除首个插入元素void my_pop();
};#endif // QUEUE_H
源文件
#include "queue.h"//赋值
queue &queue::operator=(const queue &str)
{if(this != &str){delete []base;front = str.front;rear = str.rear;size = str.size;base = new int[size];for(int i = front;i<rear;i++){base[i] = str.base[i];}}return *this;
}
//访问第一个元素
int queue::my_front()
{if(my_empty()){cout<<"队列为空"<<endl;return -1;}return base[front];
}
//访问最后一个元素
int queue::my_back()
{if(my_empty()){cout<<"队列为空"<<endl;return -1;}return base[rear-1];
}
//检查容器是否为空
bool queue::my_empty()
{return rear == front;
}
//返回容器的元素数
int queue::my_size()
{return rear-front;
}
//向队尾插入元素
void queue::my_push(int value)
{base[rear++] = value;cout<<"插入成功"<<endl;
}
//删除首个插入元素
void queue::my_pop()
{if(my_empty()){cout<<"队列为空"<<endl;return;}cout<<"首元素"<<base[front++]<<"删除成功"<<endl;
}
主程序
#include "queue.h"int main()
{queue s(10);s.my_push(14);s.my_push(24);s.my_push(41);s.my_push(4);cout<<"最后一个元素是"<<s.my_back()<<endl;s.my_pop();cout<<"第一个元素"<<s.my_front()<<endl;return 0;
}

思维导图

相关文章:

  • 如何修改Nuget包的缓存路径
  • 零工市场小程序的未来发展趋势
  • kubevirt基于CDI创建虚拟机
  • 如何在openEuler上安装和配置openGauss数据库
  • 基于springboot+vue学生宿舍管理系统设计与实现
  • 17.第二阶段x86游戏实战2-线程发包和明文包
  • GWAS分析中PCA分层不明显怎么办?你秀什么优越感?
  • 2024年国外优质API:情绪识别口碑佳
  • 【开源免费】基于SpringBoot+Vue.JS网上购物商城(JAVA毕业设计)
  • MATLAB GUI设计原则与实践
  • 【Mybatis-plus】【MybatisX】:Mybatis-plus快速上手 and MybatisX插件的使用——加强开发效率
  • 电磁铁选用和设计需要考虑的哪些方面
  • Meta Orion 原型的生产成本约为 10,000 美元
  • 美国惊曝超大规模信息泄露事件!超1亿人受到影响
  • 【高阶数据结构】平衡二叉树(AVL)的插入(4种旋转方法+精美图解+完整代码)
  • CSS盒模型深入
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • Java比较器对数组,集合排序
  • PhantomJS 安装
  • python docx文档转html页面
  • ReactNative开发常用的三方模块
  • SQLServer之创建数据库快照
  • 百度地图API标注+时间轴组件
  • 从0实现一个tiny react(三)生命周期
  • 订阅Forge Viewer所有的事件
  • 浮现式设计
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 基于游标的分页接口实现
  • 记录一下第一次使用npm
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 力扣(LeetCode)357
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • 用Node EJS写一个爬虫脚本每天定时给心爱的她发一封暖心邮件
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • ​什么是bug?bug的源头在哪里?
  • #Datawhale AI夏令营第4期#多模态大模型复盘
  • #进阶:轻量级ORM框架Dapper的使用教程与原理详解
  • $ git push -u origin master 推送到远程库出错
  • (55)MOS管专题--->(10)MOS管的封装
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (PySpark)RDD实验实战——求商品销量排行
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (补充)IDEA项目结构
  • (六)软件测试分工
  • (三)centos7案例实战—vmware虚拟机硬盘挂载与卸载
  • (三)Kafka离线安装 - ZooKeeper开机自启
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • (轉貼) 蒼井そら挑戰筋肉擂台 (Misc)
  • ./和../以及/和~之间的区别
  • .babyk勒索病毒解析:恶意更新如何威胁您的数据安全
  • .MyFile@waifu.club.wis.mkp勒索病毒数据怎么处理|数据解密恢复
  • .net core + vue 搭建前后端分离的框架
  • .Net Winform开发笔记(一)