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

C++封装:栈、队列

栈的封装:

#include <iostream>using namespace std;//封装栈
class myStack
{
private:int *data;int top=-1;        //记录栈顶元素下标int size;          //栈的大小
public:myStack():size(10){data = new int[size];top=-1;}myStack(int size){data = new int[size];top=-1;this->size=size;}~myStack(){delete []data;}//operator=myStack &operator=(const myStack &other){//防止自己给自己赋值if(this==&other){return *this;}//释放当前空间delete []data;//重新分配内存size=other.size;data=new int[size];for(int i=0;i<size;i++){data[i]=other.data[i];}top=other.top;return *this;}//访问栈顶元素int my_top(){return data[top];}//判空bool my_empty(){return top==-1;}//判满bool my_full(){return top==size-1;}//返回容纳的元素数int my_size(){return size;}//向栈顶插入元素void my_push(int a){//判断栈是否已经满if(my_full()){cout<<"入栈失败!"<<endl;return ;}//入栈top++;data[top]=a;cout<<"入栈成功!"<<endl;}//删除栈顶元素void my_pop(){if(my_empty()){cout<<"出栈失败!"<<endl;return ;}//判断是否为空cout<<data[top]<<"出栈成功!"<<endl;top--;}//遍历栈void show(){for(int i=0;i<=top;i++){cout<<data[i]<<" ";}cout<<endl;}};int main()
{//插入myStack s;s.my_push(5);s.my_push(8);s.my_push(3);s.my_push(10);s.show();cout << "**************************" << endl;//删除s.my_pop();s.my_pop();s.show();cout << "**************************" << endl;//赋值myStack s1;s1=s;s1.show();cout << "**************************" << endl;//访问栈顶cout<<s.my_top()<<endl;return 0;
}

队列的封装:

#include <iostream>using namespace std;//封装队列
class myQueue
{
private:int *data;        //队列容器int size;         //容器大小int front;        //队头下标int back;         //队尾下标
public:myQueue():size(15){data = new int[size];size=15;front=0;back=0;}myQueue(int size){data = new int[size];this->size=size;front=0;back=0;}~myQueue(){delete []data;}//operator=myQueue &operator=(const myQueue &other){//防止自己给自己赋值if(this==&other){return *this;}//释放当前空间delete []data;//重新分配内存size=other.size;data=new int[size];for(int i=0;i<size;i++){data[i]=other.data[i];}front=other.front;back=other.back;return *this;}//判空bool my_empty(){return front==back;}//判满bool my_full(){return (back+1)%size==front;}//访问当一个元素int get_front(){if(my_empty()){cout<<"访问失败!"<<endl;return -1;}return data[front];}//访问最后一个元素int get_back(){if(my_empty()){cout<<"访问失败!"<<endl;return -1;}//back=0,表示最后一个元素在末尾if(back==0){return data[size-1];}return data[back-1];}//返回容纳的元素个数int my_size(){return size;}//尾插void my_push(int a){if(my_full()){cout<<"入队失败!"<<endl;return ;}//入队data[back]=a;//队列变化back=(back+1)%size;cout<<"入队成功!"<<endl;}//头删void my_pop(){if(my_empty()){cout<<"出队失败!"<<endl;return ;}cout<<"出队成功!"<<endl;//队头变化front=(front+1)%size;}//遍历void show(){if(my_empty()){cout<<"遍历失败!"<<endl;}for(int i=front;i!=back;i=(i+1)%size){cout<<data[i]<<" ";}cout<<endl;}};int main()
{myQueue q(10);//入队q.my_push(23);q.my_push(22);q.show();//访问首尾元素cout<<"首"<<q.get_front()<<endl;cout<<"尾"<<q.get_back()<<endl;//赋值myQueue q2;q2=q;q2.show();//出队q.my_pop();q.show();return 0;
}

复习:栈和队列的区别

栈(Stack)和队列(Queue)是两种常见的数据结构。

1. 规则与操作特性

队列:先进先出,就是最先进入队列的元素将最先被移除。主要有入队和出队两种操作。入队操作在队列的尾部添加元素,而出队操作则从队列的头部移除元素。

:后进先出,就是最后进入栈的元素将最先被移除。主要支持入栈和出栈两种操作。入栈和出栈都是在栈顶

2. 指针与结构

队列:通常有两个指针,一个指向队首用于出队操作;另一个指向队尾,用于入队操作。这有助于区分队列的头部和尾部,从而保持FIFO的特性。

:只有一个指针,指向栈顶,用于入栈和出栈操作。栈顶是栈中最后添加或即将被移除的元素的位置。

思维导图:


http://www.mrgr.cn/news/19155.html

相关文章:

  • 技术Leader在训练团队思考力中的核心职责
  • MySQL三大日志详解
  • MyBatis 源码解析:Executor 接口的核心作用
  • WEB服务与虚拟主机/IIS中间件部署
  • 服务器搭建NFS服务,将文挂载到windows
  • SpringMvc--后续(参数问题)
  • Python世界:文件自动化备份实践
  • 如何开启事务、确认提交事务、事务回滚、自动提交和禁止自动提交?
  • Tomcat部署及优化
  • Leetcode面试经典150题-54.螺旋矩阵
  • 力扣面试150 旋转链表 闭链成环
  • ChatTCP:一款离线TCP数据包分析macOS APP,致力于让分析TCP数据包像看聊天记录一样简单
  • 如何在 Linux Terminal 中使用 Cmd+C复制,Cmd+V粘帖?
  • Docker入门学习-01
  • vue3页面空白-普通函数和箭头函数提升的不同
  • Windows使用ffmpeg获取麦克风数据
  • 激光雷达产品介绍
  • MySQL备份:备份策略、物理备份、mysqldump备份、增量备份、差异备份
  • DeFi是否还存在Alpha机会?Pencils Protocol 带领市场“向前看”
  • 深入理解 Prometheus 数据模型与指标监控