博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【数据结构周周练】004顺序栈与链栈 -数制转换
阅读量:4074 次
发布时间:2019-05-25

本文共 2275 字,大约阅读时间需要 7 分钟。

这次只有一道题:数制转换,采用了顺序栈和链栈。这是栈的一个很经典的应用,不过结构定义和算法实现方法不唯一,如果大家有其他的算法实现,在下面评论哦!

目录


习题一:数制转换

1、题目

将一个十进制的数转化为八进制。

2、顺序栈实现

代码

#define MAXSTACKSIZE 20#define STACKCREMENT 5#include
#include
using namespace std;typedef struct { int *base; int *top; int stacksize;}SqStack;int InitStack(SqStack &S) { S.base = (int*)malloc(MAXSTACKSIZE * sizeof(SqStack)); if (!S.base) { exit(OVERFLOW); } S.top = S.base; S.stacksize = MAXSTACKSIZE; return 1;}int Push(SqStack &S, int e) { if (S.top - S.base == S.stacksize) { S.base = (int *)realloc(S.base, (S.stacksize + STACKCREMENT) * sizeof(SqStack)); if (!S.base) { cout << "空间分配失败" << endl; exit(OVERFLOW); } S.stacksize += STACKCREMENT; } *S.top++ = e; return 1;}int Pop(SqStack &S, int &e) { if (S.top == S.base) return 0; e = *--S.top; return 1;}int DecimalismToOctal(SqStack &S, int decimalism, int &octal) { int remainder; int r; octal = 0; do{ remainder = decimalism % 8; Push(S, remainder); decimalism /= 8; } while (decimalism); while (S.top != S.base) { octal *= 10; Pop(S, r); octal += r; } return 1;}void main() { SqStack S; InitStack(S); int decimalism_a = 160; int octal_a; DecimalismToOctal(S, decimalism_a, octal_a); cout << "将十进制" << decimalism_a << "转化为八进制后的值为" << octal_a << endl;}

执行结果

3、链栈实现

代码

#include
#include
using namespace std;typedef struct LNode { int data; struct LNode *next;}LNode, *LinkStack;int InitStack(LinkStack &LS) { LS = (LinkStack)malloc(sizeof(LNode)); if (!LS) { cout << "空间分配失败" << endl; return OVERFLOW; } LS->next = NULL; return 1;}int Push(LinkStack &LS, int e) { LS->data = e; LinkStack p = (LinkStack)malloc(sizeof(LNode)); p->next = LS; LS = p; return 1;}int Pop(LinkStack &LS, int &e) { if (LS->next) { LinkStack p = LS->next; e = p->data; LS->next = p->next; free(p); return 1; } return 0;}int DecimalismToOctal(LinkStack &LS, int decimalism, int &octal) { int r; octal = 0; while (decimalism) { r = decimalism % 8; decimalism /= 8; Push(LS, r); } while (LS->next) { octal *= 10; Pop(LS, r); octal += r; } return 1;}void main() { LinkStack S; InitStack(S); int decimalism_a = 120; int octal_a; DecimalismToOctal(S, decimalism_a, octal_a); cout << "将十进制" << decimalism_a << "转化为八进制后的值为" << octal_a << endl;}

执行结果

你可能感兴趣的文章
SIGN UP BEC2
查看>>
S3C2440中对LED驱动电路的理解
查看>>
Windows CE下USB摄像头驱动开发(以OV511为例,附带全部源代码以及讲解) [转]
查看>>
出现( linker command failed with exit code 1)错误总结
查看>>
iOS开发中一些常见的并行处理
查看>>
iOS获取手机的Mac地址
查看>>
ios7.1发布企业证书测试包的问题
查看>>
如何自定义iOS中的控件
查看>>
iOS 开发百问
查看>>
Mac环境下svn的使用
查看>>
github简单使用教程
查看>>
如何高效利用GitHub
查看>>
环境分支-git版本管理
查看>>
uni-app 全局变量
查看>>
java 不用递归写tree
查看>>
springboot2 集成Hibernate JPA 用 声明式事物
查看>>
fhs-framework jetcache 缓存维护之自动清除缓存
查看>>
SpringBoot 动态编译 JAVA class 解决 jar in jar 的依赖问题
查看>>
fhs-framework springboot mybatis 解决表关联查询问题的关键方案-翻译服务
查看>>
ZUUL2 使用场景
查看>>