欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

用链栈实现十进制到二进制的转换

程序员文章站 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;
}

 

相关标签: