版权声明:转载标明出处即可 https://blog.csdn.net/hpu2022/article/details/83861647
#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;
}