使用链式栈,实现十进制转八进制:键盘输入一个十进制数,经过链式栈的相关算法,输出八进制数

题目:
使用链式栈,实现十进制转八进制:键盘输入一个十进制数,经过链式栈的相关算法,输出八进制数。
在这里插入图片描述
代码:

#include <stdio.h>
//链式栈节点
typedef struct node
{
    //数据域
    int data;
    struct node *next;
} Node;
//链式栈管理结构体
typedef struct linkStack
{
    int size;
    Node *top;
} Linkstack;
//初始化空栈
Linkstack *Initstack()
{
    Linkstack *s = (Linkstack *)malloc(sizeof(Linkstack));
    if (s != NULL)
    {
        s->top = NULL;
        s->size = 0;
    }
    return s;
}
//判断栈是否为空
int ifNULL(Linkstack *s)
{
    if (s->size == 0)
        return 1;
    else return 0;
}
//取栈顶元素
int top(Linkstack *s, int *p)
{
    if (ifNULL(s))
        return 0;
    *p = s->top->data;
    return 1;
}
//出栈
int Pop(Linkstack *s)
{
    if (ifNULL(s))
        return 0;
    //取栈顶元素的地址
    Node *pm = s->top;
    //将原栈顶元素剔除出栈
    s->top = pm->next;
    //pm->next = NULL;
    //*p = pm->data;
    free(pm);
    return 1;
}
//入栈
int Push(Linkstack *s, int data)
{
    Node *new = (Node *)malloc(sizeof(Node));
    if (new != NULL)
    {
        new->data = data;
        new->next = s->top;
        s->top = new;
        s->size++;
        return 1;
    }  
}
int main()
{
    int a, tmp, data;
    Linkstack *s = Initstack();
    printf("输入十进制整数:");
    scanf("%d", &a);
    while (a)
    {
        tmp = a % 8;
        Push(s, tmp);
        a = a / 8;
    }
    printf("八进制数:");
    while(!ifNULL(s))
    {
        printf("%d", s->top->data);
        Pop(s); 
    }
    return 0;
}
  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
十进制二进制的算法如下: 1. 定义一个,并初始化为空。 2. 将十进制不断模2,将得到的余压入中,直到商为0。 3. 从顶开始弹出每个元素,拼接成二进制。 代码实现如下: ```python class StackNode: def __init__(self, data): self.data = data self.next = None class LinkedStack: def __init__(self): self.top = None def is_empty(self): return self.top is None def push(self, data): node = StackNode(data) node.next = self.top self.top = node def pop(self): if self.is_empty(): return None data = self.top.data self.top = self.top.next return data def decimal_to_binary(decimal): stack = LinkedStack() while decimal > 0: remainder = decimal % 2 stack.push(remainder) decimal //= 2 binary = '' while not stack.is_empty(): binary += str(stack.pop()) return binary ``` 十进制八进制算法十进制二进制类似,只需要将除改为8即可。代码实现如下: ```python def decimal_to_octal(decimal): stack = LinkedStack() while decimal > 0: remainder = decimal % 8 stack.push(remainder) decimal //= 8 octal = '' while not stack.is_empty(): octal += str(stack.pop()) return octal ``` 可以通过以下代码进行测试: ```python decimal = 123 binary = decimal_to_binary(decimal) octal = decimal_to_octal(decimal) print(f"{decimal}的二进制表示为:{binary}") print(f"{decimal}的八进制表示为:{octal}") ``` 输出结果为: ``` 123的二进制表示为:1111011 123的八进制表示为:173 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

邢饱饱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值