C++分别用顺序栈和链栈实现数制的转换相关代码
//案例分析:将一个十进制数N转化为八进制数,在计算过程中,使得N模8得到八进制数的各个数依次进栈,
//然后将八进制数依次输出,得到八进制数。
#include<iostream>
#include<cstdlib>
using namespace std;
#define OK 1
#define ERROR 0
#define OVERFLOW -1
#define MAXSIZE 100
typedef int Elemtype;
typedef int Status;
//顺序栈实现
typedef struct
{
Elemtype* base;
Elemtype* top;
int stacksize;
}Sqstack;
Status Initstack(Sqstack& s);//初始化顺序栈
Status Insertstack(Sqstack& s, int x);//向顺序栈中插入元素
Status Printstack(Sqstack s);//输出顺序栈
int main(void)
{
int num = 0;
cout << "输入十进制数字num:";
cin >> num;
Sqstack s;
Initstack(s);
while(num){
Insertstack(s, num % 8);
num = num / 8;//更新十进制数字,除以8之后的商
}
cout << "\n输出转化的八进制数为:";
Printstack(s);
return OK;
}
Status Initstack(Sqstack& s)
{
s.base = new Elemtype[MAXSIZE];//为顺序栈动态分配一个最大容量为MAXSIZE的数组空间
if (!s.base) exit(OVERFLOW);//存储分配失败
s.top = s.base;//top初始化为base,空栈
s.stacksize = MAXSIZE;//栈的最大容量为MXAXSIZE
return OK;
}
Status Insertstack(Sqstack& s, int x)
{
if (s.top - s.base == s.stacksize) return ERROR;//判断栈是否满
*(s.top) = x;
s.top++;
return OK;
}
Status Printstack(Sqstack s)
{
if (s.base == s.top) return ERROR;//空栈
for (int k = 0; k < s.top - s.base; k++)
{
cout << *(s.top - k - 1);
}
cout << endl;
return OK;
}
//链栈实现
typedef struct SNode
{
Elemtype data;
struct SNode* next;
}SNode, * Linklist;
Status InitStack(Linklist& S);//初始化链栈
Status PushStack(Linklist& S, Elemtype e);//入链栈
Status PrintStack(Linklist S);//逆序打印链栈
int main(void)
{
int num = 0;
cout << "输入十进制数字num:";
cin >> num;
Linklist S;
S = NULL;
InitStack(S);
while (num) {
PushStack(S, num % 8);
num = num / 8;//更新十进制数字,除以8之后的商
}
cout << "\n输出转化的八进制数为:";
PrintStack(S);
return OK;
}
Status InitStack(Linklist& S)//初始化链栈
{
S = NULL;
return OK;
}
Status PushStack(Linklist& S, Elemtype e)//入链栈
{
SNode* p;
p = new SNode;
p->data = e;
p->next = S;
S = p;
return OK;
}
Status PrintStack(Linklist S)//逆序打印链栈
{
if (S == NULL)
{
cout << "链栈为空。" << endl;
}
cout << "链栈中的元素有:";
SNode* p;
p = S;
while (p != NULL)
{
cout << p->data;
p = p->next;
}
return OK;
}
C++分别用顺序栈和链栈实现数制的转换相关代码的更多相关文章
- C++栈学习——顺序栈和链栈的差别
C++中栈有顺序栈和链栈之分.在顺序栈中,定义了栈的栈底指针(存储空间首地址base).栈顶指针top以及顺序存储空间的大小stacksize(个人感觉这个数据成员是能够不用定义的) //顺序栈数据结 ...
- python数据结构实现(栈和链栈)
栈 class Stack: def __init__(self, limit: int 10): self.stack = [] self.limit = limit def __bool__(se ...
- [C++/JavaScript]数据结构:栈和数列>案例引入(数制的转换)
1 案例1:数制的转换 1.1 背景与原理 1.2 编程复现 (JavaScript版 复现) function convert(value, d){ stack = []; // 栈 result ...
- 数据结构实验3:C++实现顺序栈类与链栈类
实验3 3.1 实验目的 熟练掌握栈的顺序存储结构和链式存储结构. 熟练掌握栈的有关算法设计,并在顺序栈和链栈上实现. 根据具体给定的需求,合理设计并实现相关结构和算法.3.2实验要求3.2.1 ...
- java与数据结构(6)---java实现链栈
栈之链式存储结构链栈 链栈 栈的链式存储结构成为链栈.链栈是没有头结点,头结点就是栈顶指针top. 代码结构 package list; public interface Stackable;公共接口 ...
- 数据结构 - 链栈的实行(C语言)
数据结构-链栈的实现 1 链栈的定义 现在来看看栈的链式存储结构,简称为链栈. 想想看栈只是栈顶来做插入和删除操作,栈顶放在链表的头部还是尾部呢?由于单链表有头指针,而栈顶指针也是必须的,那干吗不让它 ...
- 链栈的基本操作(C语言)
栈的链式储存结构称为链栈.链栈的节点类型与链式线性表的节点类型 定义相同,不同的是它是仅在表头进行操作的单链表.链栈通常用不带头节 点的单链表来实现,栈顶指针就是链表的头指针 ,如图所示: 代码如下: ...
- 数据结构Java实现03----栈:顺序栈和链式堆栈
一.堆栈的基本概念: 堆栈(也简称作栈)是一种特殊的线性表,堆栈的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置进行插入和删除操作,而堆栈只允许在固定一端进行插入和删除 ...
- 顺序栈,链栈,队列java实现
顺序栈 /** * 顺序栈 * */ public class SqStack { //栈的大小 private int maxSize; //栈顶指针 private int top; privat ...
- 刁肥宅详解中缀表达式求值问题:C++实现顺序/链栈解决
1. 表达式的种类 如何将表达式翻译成能够正确求值的指令序列,是语言处理程序要解决的基本问题,作为栈的应用事例,下面介绍表达式的求值过程. 任何一个表达式都是由操作数(亦称运算对象).操作符(亦称运算 ...
随机推荐
- [随笔所想] UBC学习生活经验分享
当时受到了很多人的帮助,在网上也查到了很多经验帖子,比如如何办理签证,如何填写表格,要准备哪些材料以及生活上要带哪些物品,等等.当时就想到等我办理好这些,也一定和大家分享,为更多的人提供一些参考. 1 ...
- [深度学习] Python人脸识别库Deepface使用教程
deepface是一个Python轻量级人脸识别和人脸属性分析(年龄.性别.情感和种族)框架,提供非常简单的接口就可以实现各种人脸识别算法的应用.deepface官方仓库为deepface.deepf ...
- 《Effective C++》构造、析构、赋值运算
Item 05:了解C++默默编写并调用了哪些函数 总结:编译器可以暗自为class创建default 构造函数.copy构造函数.copy assignment操作符,以及析构函数. (这一小节比较 ...
- 网盘不限速下载器,全速下载,快过SVIP
一.软件简介 该软件利用作者开通的SVIP下载文件到服务器,然后由服务器传送给客户端实现不限速下载,所有功能(下载文件夹.批量下载)基本都免费开放了,现在每天每个用户拥有免费的20G的流量可以使用,已 ...
- Linux c 检测当前网卡是否已经启动
思路: 1.socket 建立一个数据报套接字. 2.定义一个struct ifreq ifr 结构体.将网络名称如"eth0" 赋值给ifr结构体的ifr.ifr_name. 3 ...
- MQ系列11:如何保证消息可靠性传输(除夕奉上)
MQ系列1:消息中间件执行原理 MQ系列2:消息中间件的技术选型 MQ系列3:RocketMQ 架构分析 MQ系列4:NameServer 原理解析 MQ系列5:RocketMQ消息的发送模式 MQ系 ...
- WeetCode4 —— 二叉树遍历与树型DP
一丶二叉树的遍历 1.二叉树遍历递归写法与递归序 了解过二叉树的朋友,最开始肯定是从二叉树的遍历开始的,二叉树遍历的递归写法想必大家都有所了解. public static void process( ...
- IntelliJ中高效重构的 10 个快捷方式
前言 在日常的开发工作中,我们经常需要重构,重构可以让我们写出的代码更上一层楼.所以,我会借助IntelliJ提供的一些功能,帮助我高效进行重构.这里是我推荐10个快捷方式,也是我每天都在使用的,非常 ...
- margin-left:auto的妙用
问题描述 如上图所示,我们需要将上述三个标签右对齐,就像上图是要达到的效果,一般采用的方法是对每个标签设置margin-left这样就需要设置三个值. 当文字变长或者变成英文的时候又需要重新设置,否则 ...
- 【大型软件开发】浅谈大型Qt软件开发(三)QtActive Server如何通过COM口传递自定义结构体?如何通过一个COM口来获得所有COM接口?
前言 最近我们项目部的核心产品正在进行重构,然后又是年底了,除了开发工作之外项目并不紧急,加上加班时间混不够了....所以就忙里偷闲把整个项目的开发思路聊一下,以供参考. 鉴于接下来的一年我要进行这个 ...