c++实现数据结构栈和队列

1、栈

头文件

#ifndef ZHAN_H
#define ZHAN_H#define MAX 8
#include <iostream>
using namespace std;class Shu
{int datatype;  //入栈的数据int *arr;  //栈的数组int top;  //记录栈顶元素的下标public://构造函数Shu();//析构函数~Shu();//判断空int stack_empty();//判断满int stack_full();//入栈int stack_push(int data);//遍历栈void stack_show();//出栈int stack_pop();//获取栈顶元素int stack_top();//求栈的大小int stack_size();//清空栈void stack_free();};void xitong();#endif // ZHAN_H

源文件

#include "zhan.h"Shu::Shu()
{datatype=0;arr = new int[MAX];top=-1;
}Shu::~Shu()
{delete arr;arr=nullptr;
}//判断空
int Shu::stack_empty()
{if(NULL==arr){cout<<"判空失败"<<endl;return -1;}return this->top==-1;}//判断满
int Shu::stack_full()
{if(NULL==arr){cout<<"判满失败"<<endl;return -1;}return this->top==MAX-1;
}//入栈
int Shu::stack_push(int data)
{datatype=data;if(stack_full()){cout<<"入栈失败"<<endl;return -1;}//top下标自增this->top++;//将输入的函数放入数组中arr[this->top]=datatype;cout<<"入栈成功"<<endl;return 0;
}//遍历栈
void Shu::stack_show()
{if(stack_empty()){cout<<"遍历失败"<<endl;return ;}//遍历for(int i=0;i<this->top+1;i++){cout<<arr[i]<<" ";}cout<<endl;
}//出栈
int Shu::stack_pop()
{if(stack_empty()){cout<<"出栈失败"<<endl;return -1;}//出栈cout<<arr[this->top]<<"出栈成功"<<endl;//自减this->top--;return 0;
}//获取栈顶元素
int Shu::stack_top()
{if(stack_empty()){cout<<"获取栈顶元素失败"<<endl;return -1;}//获取栈顶元素cout<<"栈顶元素为:"<<arr[top]<<endl;return 0;
}//求栈的大小
int Shu::stack_size()
{if(stack_empty()){cout<<"求栈大小失败"<<endl;return -1;}//栈的大小int size=this->top+1;cout<<"栈的大小为:"<<size<<endl;return 0;
}//清空栈
void Shu::stack_free()
{this->top=-1;cout<<"清空栈成功"<<endl;
}//系统函数
void xitong()
{//定义一个Shu类型的变量名Shu zhan;while(1){END:system("CLS");cout<<"**********************"<<endl;cout<<"********1、入栈********"<<endl;cout<<"********2、遍历********"<<endl;cout<<"********3、出栈********"<<endl;cout<<"********4、栈顶元素*****"<<endl;cout<<"********5、栈的大小*****"<<endl;cout<<"********0、退出********"<<endl;cout<<"**********************"<<endl;int num;int data;cout<<"请输入对应的功能:";cin>>num;switch(num){case 1:cout<<"请输入要加入的数:";cin>>data;zhan.stack_push(data);break;case 2:zhan.stack_show();break;case 3:zhan.stack_pop();break;case 4:zhan.stack_top();break;case 5:zhan.stack_size();break;case 0:goto ENDL;}int qp;cout<<"输入清屏(7):";cin>>qp;if(qp==7){goto END;}}ENDL:cout<<"系统退出成功"<<endl;zhan.stack_free();}

主函数

#include <iostream>
#include "zhan.h"using namespace std;int main()
{xitong();return 0;
}

2、循环队列

头文件

#ifndef DUILIE_H
#define DUILIE_H#define MAX 8
#include <iostream>
using namespace std;class Shu
{int datatype;  //入队的数据int *arr;  //循环队列的数组int head;  //记录队列头元素的下标int tail;  //记录队列尾元素下标public://构造函数Shu();//析构函数~Shu();//判断空int queue_empty();//判断满int queue_full();//入队int queue_push(int data);//遍历队void queue_show();//出队int queue_pop();//求队列的大小int queue_size();//清空队void queue_free();};//系统函数
void xitong();#endif // DUILIE_H

源文件

#include "duilie.h"Shu::Shu()
{datatype=0;arr = new int[MAX];head=0;tail=0;
}Shu::~Shu()
{delete arr;arr=nullptr;
}//判断空
int Shu::queue_empty()
{if(NULL==arr){cout<<"判空失败"<<endl;return -1;}return this->head==this->tail;}//判断满
int Shu::queue_full()
{if(NULL==arr){cout<<"判满失败"<<endl;return -1;}return (this->tail+1)%MAX==this->head;
}//入队
int Shu::queue_push(int data)
{datatype=data;if(queue_full()){cout<<"入队失败"<<endl;return -1;}//将输入的函数放入数组中arr[this->tail]=datatype;//尾下标自增this->tail=(this->tail+1)%MAX;cout<<"入队成功"<<endl;return 0;
}//遍历栈
void Shu::queue_show()
{if(queue_empty()){cout<<"遍历失败"<<endl;return ;}//遍历for(int i=this->head;i!=this->tail;i=(i+1)%MAX){cout<<arr[i]<<" ";}cout<<endl;
}//出队
int Shu::queue_pop()
{if(queue_empty()){cout<<"出队失败"<<endl;return -1;}//出队cout<<arr[this->head]<<"出队成功"<<endl;//自增this->head=(this->tail+1)%MAX;return 0;
}//求队列的大小
int Shu::queue_size()
{if(queue_empty()){cout<<"求队列大小失败"<<endl;return -1;}//栈的大小int size=(this->tail+MAX-this->head)%MAX;cout<<"队列的大小为:"<<size<<endl;return 0;
}//清空栈
void Shu::queue_free()
{this->head=0;this->tail=0;cout<<"清空队列成功"<<endl;
}//系统函数
void xitong()
{//定义一个Shu类型的变量名Shu zhan;while(1){END:system("CLS");cout<<"**********************"<<endl;cout<<"********1、入队********"<<endl;cout<<"********2、遍历********"<<endl;cout<<"********3、出队********"<<endl;cout<<"********4、队列的大小***"<<endl;cout<<"********0、退出********"<<endl;cout<<"**********************"<<endl;int num;int data;cout<<"请输入对应的功能:";cin>>num;switch(num){case 1:cout<<"请输入要加入的数:";cin>>data;zhan.queue_push(data);break;case 2:zhan.queue_show();break;case 3:zhan.queue_pop();break;case 4:zhan.queue_size();break;case 0:goto ENDL;}int qp;cout<<"输入清屏(7):";cin>>qp;if(qp==7){goto END;}}ENDL:cout<<"系统退出成功"<<endl;zhan.queue_free();}

主函数

#include <iostream>
#include "duilie.h"using namespace std;int main()
{xitong();return 0;
}

3、思维导图

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

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

相关文章

Pytorch Advanced(一) Generative Adversarial Networks

生成对抗神经网络GAN&#xff0c;发挥神经网络的想象力&#xff0c;可以说是十分厉害了 参考 1、AI作家 2、将模糊图变清晰(去雨&#xff0c;去雾&#xff0c;去抖动&#xff0c;去马赛克等)&#xff0c;这需要AI具有“想象力”&#xff0c;能脑补情节&#xff1b; 3、进行数…

使用Pyarmor保护Python脚本不被反向工程

Python可读性强&#xff0c;使用广泛。虽然这种可读性有利于协作&#xff0c;但也增加了未授权访问和滥用的风险。如果未采取适当的保护&#xff0c;竞争对手或恶意攻击者可以复制您的算法和专有逻辑&#xff0c;这将对您软件的完整性和用户的信任产生负面影响。 实施可靠的安…

Java拓展--空间复杂度和时间复杂度

空间复杂度和时间复杂度 文章目录 空间复杂度和时间复杂度空间复杂度时间复杂度**评价排序算法****时间频度****什么是时间频度****忽略常数项****忽略低次项****忽略系数** **时间复杂度****什么是时间复杂度****计算时间复杂度的方法****常见的时间复杂度** **常见的时间复杂…

学习笔记-静态路由配置有来无回导致无法访问目标IP

配置拓扑图&#xff1a; 已经在R1、R2、R3相应端口配置了相应IP。 在R2上配置静态路由&#xff1a; [R2]ip route-static 10.0.3.0 24 10.0.23.3 [R2]ip route-static 10.0.13.0 24 10.0.23.3执行tracert 10.0.3.3&#xff0c;可以到达目标IP 执行tracert 10.0.13.3&#xff…

电子行业云MES解决方案

电子行业MES解决方案主要是针对目前电子生产制造企业面临的产品迭代升级中多品种小批量混线生产、存呆滞问题多;质量检查标准多、售后问题难追溯&#xff1b;生产进度难追踪、车间物料难管控、实际成本难计算等问题&#xff0c;提出的一种切实可行且能降低成本、提高效率的有效…

关于Java的类加载机制

1、概述 类会在运行期间第一次使用时&#xff0c;被类加载器动态加载至JVM。JVM不会一次性加载所有类。因为如果一次性加载&#xff0c;会占用很多的内存。 2、类的生命周期 类的生命周期包括以下 7 个阶段&#xff1a; 加载&#xff08;Loading&#xff09;验证&#xff08;…

【uni-app】

准备工作&#xff08;Hbuilder&#xff09; 1.下载hbuilder&#xff0c;插件使用Vue3的uni-app项目 2.需要安装编译器 3.下载微信开发者工具 4.点击运行->微信开发者工具 5.打开微信开发者工具的服务端口 效果图 准备工作&#xff08;VScode&#xff09; 插件 uni-cr…

Codeforces Round 827 (Div. 4) D 1e5+双重for循环技巧

Codeforces Round 827 (Div. 4) D 做题链接&#xff1a;Codeforces Round 827 (Div. 4) 给定一个由 n个正整数 a1,a2,…,an&#xff08;1≤ai≤1000&#xff09;组成的数组。求ij的最大值&#xff0c;使得ai和aj共质&#xff0c;否则−1&#xff0c;如果不存在这样的i&#…

5.9.Webrtc线程事件处理

在前面的课程中呢&#xff0c;我已经向你介绍了事件处理的一些基础知识&#xff0c;那今天呢&#xff0c;我们再来看一下外边儿rtc下事件处理的基本逻辑是什么&#xff1f; 那首先呢&#xff0c;我们来看一下事件是如何协调线程工作的&#xff0c;那就如果这张图所展示的有两个…

直播进入新风口:XR虚拟直播市场火爆,未来发展势不可挡

&#xfeff; 近年来&#xff0c;直播行业随着技术的不断发展&#xff0c;呈现出了蓬勃的发展态势。在这个竞争日益激烈的直播行业中&#xff0c;XR虚拟直播成为了最新的风口。XR虚拟直播是一种新型的直播形式&#xff0c;通过虚拟现实技术&#xff0c;让用户置身于直播现场&a…

【HELLO NEW WORLD】一封来自开放自动化时代的邀请函

​ 施耐德电气开放自动化平台&#xff0c;迈向开放、高效与韧性、可持续、以人为本的未来工业。 HELLO WORLD 是人类在信息世界开启的第一行 也是我们走进自动化领域迎来的第一句问候 如今 面临向数字化与自动化加速转型的新变局 工业领域迫切地需要一场变革 走向更加高效…

ClickHouse进阶(十三):Clickhouse数据字典-3-文件数据源及Mysql数据源

进入正文前&#xff0c;感谢宝子们订阅专题、点赞、评论、收藏&#xff01;关注IT贫道&#xff0c;获取高质量博客内容&#xff01; &#x1f3e1;个人主页&#xff1a;含各种IT体系技术,IT贫道_大数据OLAP体系技术栈,Apache Doris,Kerberos安全认证-CSDN博客 &#x1f4cc;订阅…