(C语言描述)栈的应用——数值转换(十进制转八进制)

本文介绍了使用C语言实现十进制数转换为八进制数的方法,通过除8取余的策略,逐步将整数部分转换,并用栈来存储余数。详细展示了转换过程及对应的代码实现。
解题思路

十进制转八进制:

整数部分,除8取余法,每次将整数部分除以8,余数为该位权上的数,商继续除以8,余数又为上一个位权上的数,然后以此类推一直下去,直到商为零

例:1348转八进制:
(1)
x: 1348
y=x%8=4
此时 4 入栈

栈中元素:
4

(2)
x:1348/8=168
y=x%8=0
此时 0 入栈

栈中元素:
0
4

(3)
x: 168/8=21
y=x%8=5
此时5入栈

栈中元素:
5
0
4

(4)
x: 21/8=2
y=x%8=2;
此时2入栈

栈中元素:
2
5
0
4

(5)
x:2/8=0
结束循环

代码
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

typedef struct SNode
{
	int value;
	struct SNode *next;
}*SNode;

typedef struct Stack
{
	SNode top;
	SNode bottom;
	int len;
}*Stack;

void InitStack(Stack S)
{
	S->top = (SNode)malloc(sizeof(SNode));
	S->bottom= (SNode)malloc(sizeof(SNode));
	S->top = NULL;
	S->bottom = S->top;
	S->len = 0;
}

bool IsEmpty(Stack S)
{
	if (S->len == 0)
		return true;
	else
		return false;
}

void Push(Stack S, int x)
{
	SNode node = (SNode)malloc(sizeof(SNode));
	node->value = x;
	if (S->top == S->bottom)
	{
		S->top = node;
		node->next = NULL;
	}
	else
	{
		node->next = S->top;
		S->top = node;
	}
	S->len++;
}

//出栈
void Pop(Stack S)
{
	if (IsEmpty(S))
		printf("此栈为空\n");
	else
	{
		printf("栈顶元素为:%d\n", S->top->value);
		S->top = S->top->next;
		S->len--;
	}
}

void main()
{
	Stack S = (Stack)malloc(sizeof(Stack));
	InitStack(S);
	printf("输入要转换的数:\n");
	int x = 0;
	scanf_s("%d", &x);
	while (x)
	{
		Push(S, x%8);
		x = x / 8;
	}
	while (!IsEmpty(S))
	{
		Pop(S);
	}
	system("pause");
}

运行结果
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值