c语言数据结构--顺序栈

实验内容:

用顺序存储结构,实现教材定义的栈的基本操作,提供数制转换功能,将输入的十进制整数转换成二进制。

实验步骤:

(1)按照实验要求编写代码,构造顺序栈。
(2)输入验收用例,验证其输出结果。

#include <iostream>
#include <cmath>
using namespace std;
#define MAXSIZE 100
typedef int SElemType;//定义顺序栈的存储结构
typedef struct{SElemType *base;//栈底指针SElemType *top;//栈顶指针int stacksize;//栈的容量
}SqStack;void Help()
{cout << "1.初始化为空栈" << endl;cout << "2.销毁栈" << endl;cout << "3.将栈置空" << endl;cout << "4.判断栈是否为空栈" << endl;cout << "5.返回栈的长度" << endl;cout << "6.求栈顶元素" << endl;cout << "7.插入元素,并使其成为栈顶元素" << endl;cout << "8.删除栈顶元素,并返回其值" << endl;cout << "9.输出栈内元素" << endl;cout << "10.创建并输入栈元素" << endl;cout << "11.十进制转二进制" << endl;cout << "12.退出"<< endl;  
}//初始化为空栈
int InitStack(SqStack&S)
{S.base=new SElemType[MAXSIZE];if(!S.base){cout<<"存储空间分配失败"<<endl;exit(0);//异常退出}S.top=S.base;//top初始为base,空栈S.stacksize=MAXSIZE;//stacksize置为栈的最大容量MAXSIZEreturn 1;
}//销毁栈
int DestroyStack(SqStack &S)
{if(S.base){delete[]S.base;S.stacksize=0;S.base=S.top=NULL;}return 1;
}//将栈置空
int ClearStack(SqStack &S)
{if(S.base) S.top=S.base;cout<<"栈已置空"<<endl;return 1;
}//判断栈是否为空栈
bool StackEmpty(SqStack S)
{if(S.top==S.base) return true;else return false;
}//返回栈的长度
int StackLength(SqStack S)
{return S.top-S.base;
}//求栈顶元素
int GetTop(SqStack S,SElemType&e)
{if(S.top==S.base) return 0;e=*(S.top-1);return 1;
}//插入元素,并使其成为栈顶元素
int Push(SqStack &S,SElemType e)
{if(S.top-S.base==S.stacksize)return 0;*S.top++=e;return 1;
}//删除栈顶元素,并返回其值
int Pop(SqStack &S,SElemType&e)
{if(S.top==S.base)return 0;e=*--S.top;return 1;
}//输出栈内元素
void print(SqStack S)
{while(S.top!=S.base){cout<<*(S.top-1);S.top--;}cout<<endl;
}//创建并输入栈元素
void BulidStack(SqStack &S,int n)
{while(n--){cin>>*S.top;S.top++;}
}//数制转换
void DataChange(SqStack &S,int P) {   InitStack(S);int x = 0;do {x = P % 2;P = P / 2;Push(S, x);} while (P != 0);print(S);DestroyStack(S);}bool IsLegal(SqStack S)
{if(abs(S.top-S.base)>MAXSIZE)return false;else if(!S.base)return false;elsereturn true;
}
int main()
{SqStack S;SElemType e;int n,m;Help();while(1){cout<<"请输入你的选择:";cin>>n;if(n==1){InitStack(S);cout<<"初始化成功"<<endl;}else if(n==2){if(!IsLegal(S)){cout<<"请先将栈初始化"<<endl;}else{DestroyStack(S);cout<<"销毁成功"<<endl;}}else if(n==3){if(!IsLegal(S)){cout<<"请先将栈初始化"<<endl;}else{ClearStack(S);}}else if(n==4){if(!IsLegal(S)){cout<<"请先将栈初始化"<<endl;}else{if(StackEmpty(S))cout<<"栈为空"<<endl;elsecout<<"栈非空"<<endl;}}else if(n==5){if(!IsLegal(S)){cout<<"请先将栈初始化"<<endl;}else{cout<<"栈的长度为:"<<StackLength(S)<<endl;}}else if(n==6){if(!IsLegal(S)){cout<<"请先将栈初始化"<<endl;}else{if(GetTop(S,e))cout<<"栈顶元素为:"<<e<<endl;elsecout<<"操作失败!"<<endl;}}else if(n==7){if(!IsLegal(S)){cout<<"请先将栈初始化"<<endl;}else{cout<<"请输入一个元素:";cin>>e;if(Push(S,e))cout<<"操作成功!"<<endl;elsecout<<"操作失败!"<<endl;}}else if(n==8){if(!IsLegal(S)){cout<<"请先将栈初始化"<<endl;}else{if(Pop(S,e))cout<<"栈顶元素为:"<<e<<endl;elsecout<<"操作失败!"<<endl;}}else if(n==9){if(!IsLegal(S)){cout<<"请先将栈初始化"<<endl;}print(S);cout<<endl;}else if(n==10){cout<<"请输入要初始化的元素个数:";cin>>m;cout<<"请输入"<<m<<"个元素:"<<endl;BulidStack(S,m);}else if(n==11){cout<<"请输入想要转换的十进制数:";int p;cin>>p;DataChange(S,p);}else if(n==12){return 0;}else{cout<<"操作有误"<<endl;}}return 0;
}

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【密码学】公钥密码的基本概念

在先前我写的密码学体制文章中谈到&#xff0c;现代密码学分为两大体制&#xff0c;介绍了一些有关对称密码体制诸如流密码和分组密码的内容。本文的主要内容则切换到公钥密码体制&#xff08;又称非对称密码体制&#xff09;&#xff0c;简述了公钥密码体制的基本思想和应用方…

2008年上半年软件设计师【上午题】真题及答案

文章目录 2008年上半年软件设计师上午题--真题2008年上半年软件设计师上午题--答案 2008年上半年软件设计师上午题–真题 2008年上半年软件设计师上午题–答案

微信小程序style动态绑定Object不生效处理方法

渲染的时候style变成了[Object Object] 解决方法: 给Object外面加一个[] <image :style"[imgStyle]" :src"url"></image>

算法学习笔记(8.1)-动态规划入门

目录 问题特性&#xff1a; 最优子结构&#xff1a; 代码示例&#xff1a;&#xff08;动态规划最优子结构&#xff09; 上述最小代价爬楼梯的运行过程&#xff1a; 代码示例&#xff1a; 无后效性&#xff1a; 解析&#xff1a; 具体过程图示如下&#xff1a; 具体的…

MAVLink代码生成-C#

一. 准备Windows下安装环境 Python 3.3 – 官网链接下载Python future模块 –pip3 install future TkInter (GUI 工具). – python for Windows自带&#xff0c;无需下载环境变量PYTHONPATH必须包含mavlink存储库的目录路径。 –set PYTHONPATH你的mavlink源码路径 源码下载在…

如何恢复永久删除的婚礼照片

我们的生活就像一本记忆剪贴簿&#xff0c;充满了褪色和模糊的快照。尽管我们想记住事情并留住快乐的回忆&#xff0c;但随着时间的流逝&#xff0c;它们会被冲走。为了避免这种情况并记住这些记忆&#xff0c;我们以照片的形式捕捉瞬间。这有助于缓解和分享那些快乐的时刻。但…

变阻器的故障排除方法有哪些?

变阻器&#xff0c;特别是滑动变阻器&#xff0c;作为电子电路中的常见元件&#xff0c;其故障排除方法主要依据具体的故障现象来确定。以下是一些常见的故障现象及其排除方法&#xff1a; 一、接触不良 现象&#xff1a;电阻器不起作用或电压不稳定。 排除方法&#xff1a; …

手撸俄罗斯方块(五)——游戏主题

手撸俄罗斯方块&#xff08;五&#xff09;——游戏主题 当确定游戏载体&#xff08;如控制台&#xff09;后&#xff0c;界面将呈现出来。但是游戏的背景色、方块的颜色、方框颜色都应该支持扩展。 当前游戏也是如此&#xff0c;引入了 Theme 的概念&#xff0c;支持主题的扩…

《面向对象分析与设计》读书笔记2

1、概念模型记录了系统中存在&#xff08;或者将存在&#xff09;的领域实体以及他们与系统中其他领域实体的关系&#xff0c;概念层的建模是利用业务领域的术语来完成的&#xff0c;应该是技术无关的。系统的逻辑视图利用了概念模型中创造的概念&#xff0c;建立起关键抽象和机…

flask模块化、封装使用缓存cache(flask_caching)

1.安装flask_caching库 pip install flask_caching 2.创建utils Python 软件包以及cache_helper.py 2.1cache_helper.py代码 from flask_caching import Cachecache Cache()class CacheHelper:def __init__(self, app, config):cache.init_app(app, config)staticmethoddef…

arm 、stm32、linux该如何学习?有没有先后顺序,先学什么比较好?

先讲自己&#xff0c;我是从Arduino单片机入门&#xff0c;再到stm32 &#xff0c;再开发瑞萨&#xff0c;TI&#xff0c;然后学校教了51。这是一个奇怪的学习过程&#xff0c;所以当我第一次接触51单片机的时候&#xff0c;刚好我有一些资料&#xff0c;是我根据网友给的问题精…

多个单元运算符合用???:::

string a "a";string b "b";string c "c";string r a "a" ? b "b" ? c"c" ? "b" : "cc" : "33":"44";string rr a "a"? b "b" ?(c …

PHP老照片修复文字识别图像去雾一键抠图微信小程序源码

&#x1f50d;解锁复古魅力&#xff0c;微信小程序黑科技大揭秘&#xff01;老照片修复&更多神奇功能等你来试&#xff01; &#x1f4f8; 【老照片修复&#xff0c;时光倒流的美颜术】 你是否珍藏着一堆泛黄的老照片&#xff0c;却因岁月侵蚀而模糊不清&#xff1f;现在…

buuctf zip伪加密

[BUUCTF]zip伪加密_buuctf zip伪加密-CSDN博客 借鉴以上博客 010打开 这两个位置是计算机判断是否为加密文件 两个都为09(奇数) 一般为真加密 两个为偶数(00)不加密 一个奇数一个偶数,伪加密 (注意,是一般) 这道题两个奇数,以为是真加密 暴力解码一下,解不出 看到题目提…

为服务器安全保驾护航的“三道防线”!

前言&#xff1a; 随着互联网的发展与普及&#xff0c;服务器安全性的保护变得越来越重要。服务器是企业和个人在网络中存储和处理敏感数据的重要设备&#xff0c;一旦服务器遭到未经授权的访问或攻击&#xff0c;可能导致数据泄露、系统崩溃等严重后果。因此&#xff0c;具备强…

ICC2:split_fanout如何插inverter pair

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 相关文章链接: ICC2:split fanout用法

【排序 - 堆排序】

堆排序&#xff08;Heap Sort&#xff09;是一种高效的排序算法&#xff0c;利用了堆这种数据结构的特性。堆排序的时间复杂度为 O(n log n)&#xff0c;并且是一个原地排序算法&#xff0c;不需要额外的存储空间。 堆的基本概念 堆是一种特殊的树形数据结构&#xff0c;分为…

用Racket做一个拼图游戏——4 实现工具

4 实现工具 思路理清楚了&#xff0c;接下来就一个一个功能实现。在阐述实现功能的编程过程中&#xff0c;会延伸讲解编程思路、相关的Racket函数及相关知识点&#xff0c;力图达到在实践中的学习目的。 在编程实现过程中&#xff0c;首先实现图片操作功能&#xff0c;再通过…

告别混乱,可道云企业网盘个人标签,让文件管理更轻松

在信息爆炸的时代&#xff0c;你是不是常常觉得自己的大脑就像一台过载的处理器&#xff0c;各种文件、资料、想法在脑海中“打架”&#xff0c;让你焦头烂额&#xff1f; 别担心&#xff0c;可道云企业网盘个人标签功能来拯救你的“大脑内存”了&#xff01; 我们需要告别无…

Python 轻松生成多种条形码、二维码 (Code 128、EAN-13、QR code等)

条形码和二维码是现代信息交换和数据存储的重要工具&#xff0c;它们将信息以图形的形式编码&#xff0c;便于机器识别和数据处理&#xff0c;被广泛应用于物流、零售、医疗、教育等各领域。 本文将介绍如何使用Python快速生成各种常见的条形码如Code 128、EAN-13&#xff0c;…