用链栈实现十进制到二进制的转换
程序员文章站
2022-05-20 13:18:44
...
#include <iostream>
using namespace std;
typedef struct Stack{
int data;
int length;
Stack *next;
} StackNode, *LinkStack;
bool StackInit(LinkStack &S) // 初始化函数,初始为空
{
S = NULL;
return true;
}
bool StackPush(LinkStack &S, int e) // 入栈
{
LinkStack p = new StackNode; // 生成新节点
p->data = e; // 生成数据域
if(S == NULL) // 栈的长度加一
p->length = 1;
else
p->length = S->length + 1;
p->next = S; // 插入在栈顶
S = p; // 修改栈顶, S 始终指向栈顶
return true;
}
bool StackPop(LinkStack &S) // 出栈
{
LinkStack p = S;
if(S == NULL)
return false;
else
{
S = S->next; // 栈顶指针后移
delete p;
return true;
}
}
int StackTop(const LinkStack &S) // 取出栈顶元素
{
if(S == NULL)
return false;
else
return S->data;
}
int StackLength(const LinkStack &S) // 求栈的长度
{
if(S == NULL)
return 0;
else
return S->length;
}
bool StackClear(LinkStack &S) // 清空栈
{
LinkStack p;
while(S)
{
p = S;
S = S->next;
delete p;
}
return true;
}
void change(LinkStack &S, int n) // 十进制到二进制转换函数
{
int e;
do{
e = n % 2;
n = n / 2;
StackPush(S, e);
}while(n);
}
int main()
{
int n;
LinkStack S; // 定义
StackInit(S); // 初始化
while(cin >> n)
{
cout << "十进制数:" << n << endl;
cout << "对应二进制:";
change(S, n);
int len = StackLength(S); // 求出栈的长度
for(int i = 0; i<len; i++)
{
cout << StackTop(S); // 输出栈顶元素
StackPop(S); // 弹出
}
cout << endl;
StackClear(S); // 清空
}
return 0;
}
上一篇: 栈---棒球比赛
下一篇: [leetcode] 112. 路径总和
推荐阅读
-
用PHP实现小写金额转换大写金额的代码(精确到分)
-
栈实现十进制转换为二进制,八进制和十六进制
-
C语言用栈的思想实现十进制转二进制
-
Python 进制转换, 实现任意进制转换为任意进制的方法, 支持小数和负数, 二进制转十进制, 十进制转二进制, 小数进制转换, k进制转换
-
C语言使用栈和队列实现二进制与十进制的互转(带小数)
-
用python实现十进制与二进制的相互转换
-
十进制有符号小数转换成二进制数的实现_Matlab实现_归一化处理
-
将十进制数字转换为二进制数字(栈的应用)
-
用栈来实现二进制数转化为十进制数
-
java函数实现进制转换与java实现八进制到十进制的转换(百练OJ:2735:八进制到十进制)