编程基于栈的操作实现将任意一个非负十进制数,打印输出与其等值的八进制数

这篇具有很好参考价值的文章主要介绍了编程基于栈的操作实现将任意一个非负十进制数,打印输出与其等值的八进制数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

提示:数据结构进制转化:

编程基于栈的操作实现将任意一个非负十进制数,打印输出与其等值的八进制数


一、第一种写法

代码如下(示例):

//Author:北硝 Date:2023.3.25
#include <stdio.h>
#include <stdlib.h>
//本程序主要实现功能说明
//编程基于栈的操作实现将任意一个非负十进制数,打印输出与其等值的八进制数;

#define STACK_INIT_SIZE 100
#define STACK_INCREMENT 10
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define TRUE 1
#define FALSE 0

typedef int SElemType;
typedef int Status;

typedef struct {
    SElemType* base;
    SElemType* top;
    int stacksize;
} SqStack;

Status InitStack(SqStack* S) {
    S->base = (SElemType*)malloc(STACK_INIT_SIZE * sizeof(SElemType));
    if (!S->base) {
        return OVERFLOW;
    }
    S->top = S->base;
    S->stacksize = STACK_INIT_SIZE;
    printf("栈初始化成功!\n");
    return OK;
}

Status Push(SqStack* S, SElemType e) {
    if (S->top - S->base >= S->stacksize) {
        S->base = (SElemType*)realloc(S->base, (S->stacksize + STACK_INCREMENT) * sizeof(SElemType));
        if (!S->base) {
            return OVERFLOW;
        }
        S->top = S->base + S->stacksize;
        S->stacksize += STACK_INCREMENT;
    }
    *S->top++ = e;
    return OK;
}

Status Pop(SqStack* S, SElemType* e) {
    if (S->top == S->base) {
        return ERROR;
    }
    *e = *--S->top;
    return OK;
}

Status StackEmpty(SqStack S) {
    if (S.top == S.base) {
        return TRUE;
    }
    return FALSE;
}

int main() {
    SqStack S;
    int N, e;
    InitStack(&S);
    printf("请输入一个十进制数:");
    scanf_s("%d", &N);
        while (N) {
            Push(&S, N % 8);
            N = N / 8;
        }
    printf("转换为八进制数为:");
    while (!StackEmpty(S)) {
        Pop(&S, &e);
        printf("%d", e);
    }
    printf("\n");
    return 0;
}

运行效果展示:对于输入的任意一个非负十进制整数,打印输出与其等值的八进制数,数据结构,数据结构

二、第二种写法

/Author:北硝 Date:2023.3.25
#include <stdio.h>
#include <stdlib.h>

#define STACK_SIZE 50

typedef struct {
    int top;
    int stack[STACK_SIZE];
} Stack;

void initStack(Stack *s) {
    s->top = -1;
}

void push(Stack *s, int value) {
    if (s->top >= STACK_SIZE - 1) {
        printf("Stack Overflow\n");
        return;
    }
    s->top++;
    s->stack[s->top] = value;
}

int pop(Stack *s) {
    if (s->top < 0) {
        printf("Stack Underflow\n");
        exit(1);
    }
    int value = s->stack[s->top];
    s->top--;
    return value;
}

int isEmpty(Stack *s) {
    return (s->top == -1);
}

void printOctal(int num) {
    Stack s;
    initStack(&s);

    while (num != 0) {
        int remainder = num % 8;
        push(&s, remainder);
        num /= 8;
    }

    if (isEmpty(&s)) {
        printf("0");
    }

    while (!isEmpty(&s)) {
        int octalDigit = pop(&s);
        printf("%d", octalDigit);
    }
}

int main() {
    int num;
    printf("请输入一个十进制数: ");
    scanf_s("%d", &num);
    printf("转换为八进制数为: ");
    printOctal(num);
    printf("\n");
    return 0;
}

运行效果展示:
对于输入的任意一个非负十进制整数,打印输出与其等值的八进制数,数据结构,数据结构


总结

数据结构中编程基于栈的操作实现将任意一个非负十进制数,打印输出与其等值的八进制数文章来源地址https://www.toymoban.com/news/detail-737518.html

到了这里,关于编程基于栈的操作实现将任意一个非负十进制数,打印输出与其等值的八进制数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【 第4关:入栈和出栈的基本操作】【编程题实训-栈】【头歌】【bjfu-243】

    本关任务:输入一个整数序列a1,a2,a3…,an。当ai不等于-1时将ai进栈;当ai=-1时,输出栈顶元素并将其出栈。 输入 多组数据,每组数据有两行,第一行为序列的长度n,第二行为n个整数,整数之间用空格分隔。当n=0时输入结束。 输出 对于每一组数据输出若干行。每行为相应的出

    2024年02月06日
    浏览(43)
  • Erocool是一个编程项目 - 实现一个基于Python的简单游戏

    在这篇文章中,我们将探讨一个名为Erocool的编程项目,它是一个基于Python的简单游戏。我们将详细介绍这个项目的目标、功能和实现细节,并提供相应的源代码。 Erocool项目的目标是创建一个有趣的游戏,其中玩家需要通过键盘输入正确的答案来解决问题。这个游戏的主题是

    2024年01月23日
    浏览(53)
  • 栈的定义及基本操作实现(顺序栈)

    个人主页:【😊个人主页】 系列专栏:【❤️数据结构与算法】 学习名言:天子重英豪,文章教儿曹。万般皆下品,惟有读书高 第一章 ❤️ 学前知识 第二章 ❤️ 单向链表 第三章 ❤️ 递归 相信大家小时后一定玩过玩具枪吧,在我们装子弹时玩具枪的子弹只能从弹夹的一

    2023年04月08日
    浏览(94)
  • 【 第1关:基于栈的中缀算术表达式求值】【编程题实训-栈】【头歌】【bjfu-240】

    本关任务:输入一个中缀算术表达式,求解表达式的值。运算符包括+、-、*、/、(、)、=,参加运算的数为double类型且为正数。(要求:直接针对中缀算术表达式进行计算,不能转换为后缀或前缀表达式再进行计算,只考虑二元运算即可。) 输入 多组数据,每组数据一行,对

    2024年02月06日
    浏览(54)
  • C语言:写一个函数,输入一个十六进制数,输出相应的十进制数

    分析:     当用户运行该程序时,程序会提示用户输入一个十六进制数。用户需要在命令行中输入一个有效的十六进制数,例如:\\\"1A3F\\\"。     接下来,程序调用了名为 xbed 的函数,并将用户输入的十六进制数作为参数传递给该函数。 在函数 xbed 中,我们定义了两个变量 i 和

    2024年02月04日
    浏览(48)
  • 头歌(C语言)-数据结构与算法-栈的实现-第1关:实现一个顺序存储的栈

    任务描述 相关知识 栈的基本概念 栈结构的定义(C) 顺序栈的操作 编程要求 测试说明 任务描述 本关任务是实现 step1/SeqStack.cpp 中的 SS_IsFull 、 SS_IsEmpty 、 SS_Length 、 SS_Push 和 SS_Pop 五个操作函数,以实现判断栈是否为满、是否为空、求栈元素个数、进栈和出栈等功能。 相关

    2024年02月07日
    浏览(65)
  • 【分布鲁棒和多目标非负矩阵分解】基于DR-NMF的对NMF问题噪声模型的识别鲁棒性研究(Matlab代码实现)

    💥💥💞💞 欢迎来到本博客 ❤️❤️💥💥 🏆博主优势: 🌞🌞🌞 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️ 座右铭: 行百里者,半于九十。 📋📋📋 本文目录如下: 🎁🎁🎁 目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码、数据、文章

    2024年02月07日
    浏览(52)
  • 【Linux网络】网络编程套接字 -- 基于socket实现一个简单UDP网络程序

    我们把数据从A主机发送到B主机,是目的吗?不是,真正通信的不是这两个机器!其实是这两台机器上面的软件(人) 数据有 IP(公网) 标识一台唯一的主机 ,用谁来标识各自主机上客户或者服务进程的唯一性呢? 为了更好的表示一台主机上服务进程的唯一性,我们采用 端口号

    2024年02月12日
    浏览(159)
  • 详解自己动手添加一个函数实现任意字段调用

    是否遇到过想调用某些自定义字段,却发现dedecms的标签底层模板字段不包括这个字段呢?这就大大限制了灵活性,但dede也不可能让所有字段都允许调用的,那样就会大大降低系统效率,所以今天分享的是一个比较完美解决这个问题的方法,配合dede标签,几乎可以说没有什么

    2024年02月02日
    浏览(92)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包