首页 > 编程语言 >C++分别用顺序栈和链栈实现数制的转换相关代码

C++分别用顺序栈和链栈实现数制的转换相关代码

时间:2023-01-12 19:00:25浏览次数:45  
标签:Status 数制 cout int C++ 链栈 OK num return

//案例分析:将一个十进制数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;
}

标签:Status,数制,cout,int,C++,链栈,OK,num,return
From: https://www.cnblogs.com/shidawuyu/p/17047682.html

相关文章

  • 自己的devc++的语法配置
    效果如下......
  • c++ std string replaceAll函数
    std提供的string的replace方法,不太方便stringreplaceAll(string&str,stringoldStr,stringnewStr){string::size_typepos=str.find(oldStr);while(pos......
  • C++学习笔记 [ 2 ]
    C++问题的补充前言关于对之前遗留的补充malloc和new的区别const和引用的深入this指针的深入一、C++中对象的创建malloc和new创建对象//定义一个Pointe......
  • C++学习笔记(四)~substr()函数
    substr(pos,len)作用        返回一个新构造的串对象,其值初始化为该对象的子字符串的副本。子字符串是对象的一部分,从字符位置pos开始并跨越len个字符(或直到字符串......
  • C(C++)函数返回多个值
    【Q】C(C++)函数如何返回多个值?【A】1、指针:4票2、结构体:4票 返回多个数据,并且各个数据类型都不相同。 直接返回结构体,程序执行效率会受到影响。因为需要复制......
  • C++不要对函数返回值添加std::move()
    C++不要对函数返回值添加std::move()ReferencesC++函数返回局部变量的std::move()问题?ReturnStatementCopyelisionSummary编译器会进行返回值优化——复制省......
  • Effective C++ 笔记
    EffectiveC++笔记Sec0Introduction本书的目的:如何有效运用C++,使软件易理解、易维护、可移植、可扩充、高效、并有预期行为提出的忠告分两类:一般性的设计策略,带有......
  • C++ 使用 new 创建二维数组
    C++使用new创建二维数组最直接的方法就是 ​​newT[M][N]​​​。返回的指针类型是 ​​T(*)[N]​​​,它是指向数组的指针,可以直接使用数组下标形式访问元素。释放内......
  • 【C++11】chrono库
    chrono是c++11中的时间库,提供计时、时钟等功能学习chrono,关键是理解里面精度、时间段、时间点的概念1.精度时钟节拍(时间精度),后面的时间段和时间点都是基于精度的计算......
  • 5月TIOBE编程语言:Python持续第一,C++将冲击前三
    新的TIOBE5月编程语言榜单出炉了,让我们一起看一下这次有哪些新看点:Python稳居第一,C++或将冲至Top3本次的榜单和4月相比没有明显变化,Top5依然是Python、C、Java、C++......