【数据结构】利用栈将十进制整数转换为对应的八进制数

实验3  栈的基本操作

一、实验目的

 熟练应用顺序表和单链表存储结构,实现栈的初始化、入栈、出栈等基本操作。

二、实验软硬件要求

硬件:一台安装了windows操作系统的计算机。

软件:C语言编程工具

  • 实验内容(需写出源程序)
  1. 利用栈的基本操作实现将一个键盘输入的十进制整数转换为对应的八进制数。

v#include<stdio.h>

#include<stdlib.h>

#include<string.h>

#define OK 1

#include<stdio.h>

#include<stdlib.h>

#include<malloc.h>

#define TRUE 1

#define FALSE 0

#define OK 1

#define ERROR 0

#define OVERFLOW -2

typedef int Status;

typedef int Boolean;

typedef int SElemType;

#define STACK_INIT_SIZE 100

#define STACK_INCREMENT 10

//顺序栈

struct SqStack

{

       SElemType *base;

       SElemType *top;

       int stacksize;

};

//构造一个空栈S

Status InitStack(SqStack &S)

{

       S.base = (int*)malloc(STACK_INIT_SIZE*sizeof(int));

       if (!S.base)

              exit(OVERFLOW);

       S.top = S.base;

       S.stacksize = STACK_INIT_SIZE;

       return OK;

}

//检查s栈是否为空栈

Boolean StackEmpty(SqStack S)

{

       if (S.top == S.base)

              return TRUE;

       else

              return FALSE;

}

//插入元素e为新的栈顶元素

Status Push(SqStack &S,int e)

{

       if (S.top-S.base >= S.stacksize)  //栈满,追加存储空间

       {

              S.base = (SElemType*)realloc(S.base,(S.stacksize+STACK_INCREMENT)*sizeof(SElemType));

              if (!S.base)

                     exit (OVERFLOW);

              S.top = S.base + S.stacksize;

              S.stacksize += STACK_INCREMENT;

       }

       *(S.top)++=e;

       return OK;

}

//若栈不为空,删除S的栈顶元素,用e返回其值

Status Pop(SqStack &S,int &e)

{

       if (S.top == S.base)

              return ERROR;

       e = *--S.top;

       return OK;

}

// 对于输入的非负十进制整数,打印输出与其等值的八进制数

void conversion(SqStack S)

{   

    int N,e;

    InitStack(S);

    printf("请输入一个十进制整数:");

    scanf("%d",&N);

    while(N){

        Push(S,N%8);

        N=N/8; 

    }

    printf("转为八进制:");

    while(!StackEmpty(S)){

        Pop(S,e);

        printf("%d",e);

    }

   printf("\n");

}

主函数

int main()

{

       SqStack S;

    conversion(S);

}

结果



我的其他专栏:

单片机原理

模式识别原理

数字电子技术实验

自动控制原理

模拟电子技术

数据结构

 

关注我了解更多

### 回答1: 可以按照以下步骤使用stack实现整数十进制八进制: 1. 将十进制整数不断除以8,将余压入stack中,直到商为为止。 2. 从stack中依次弹出余,得到的就是八进制的各位字。 3. 将八进制的各位字拼接起来,得到最终的八进制。 例如,将十进制27转换八进制的过程如下: 1. 27 ÷ 8 = 3 … 3,余为3,将3压入stack中。 2. 3 ÷ 8 = … 3,商为,停止除法运算。 3. 从stack中依次弹出余,得到的是3和3,拼接起来得到最终的八进制33。 因此,利用stack可以很方便地实现整数十进制八进制。 ### 回答2: 是一种允许在一端进行插入和删除操作的数据结构,常用于将据按照“先进后出”的顺序存储。在计算机科学中,被广泛应用于算法的实现中,特别是逆波兰表达式、表达式求值、并行处理、回溯等领域。 将一个整数十进制转换八进制的过程可以通过以下步骤实现: 1. 用目标整数除以8,得到商和余,将余,直到商为0。 2. 从中依次弹出每个余,依次构成八进制。 具体来说,逐步实现的代码如下: ``` #include <iostream> #include <stack> using namespace std; int main() { int num; stack<int> s; cout << "请输入一个十进制整数:"; cin >> num; do { int mod = num % 8;//计算余 s.push(mod);//将余 num /= 8;//更新商 } while (num != 0); cout << "转换结果为:"; while (!s.empty()) {//依次弹出每个余 cout << s.top(); s.pop(); } cout << endl; return 0; } ``` 以上代码首先定义了一个整数num和一个s,然后从标准输入中读取一个整数利用do-while循环计算商和余,并将余压入中,直到商为0。最后,利用while循环依次弹出顶元素(即顺序计算每个余),并输出到标准输出中,完成八进制转换过程。 总之,使用来实现十进制八进制转换可以简化复杂的算法,使之更为清晰明了。利用可以轻松地实现大量经典算法,但也需要仔细考虑算法的缺陷和边界条件,为程序添加必要的异常处理语句,以确保总体的效率和可靠性。 ### 回答3: 十进制八进制是我们经常会用到的转换,对于程序员来说更是常见之一,那么利用stack如何实现整数十进制八进制呢? 1. 确定算法 首先,需要明确的是,十进制八进制的过程中,我们每次将除以8,得到商和余,将余存入中,直到商为0为止。最后,从底至顶取出余,并将其串联起来,得到最终结果。这里我们需要使用stack的push()和pop()函来实现入和出。 2. 编写代码 下面是使用C++写出的十进制八进制的代码实现。 ``` #include <iostream> #include <stack> using namespace std; int main() { stack<int> s; //创建一个整数类型的s int n; //待转换十进制 cin >> n; //十进制八进制 while(n != 0) { s.push(n % 8); n /= 8; } //输出八进制 while(!s.empty()) { cout << s.top(); s.pop(); } return 0; } ``` 上述代码中,我们首先创建了一个整数类型的s,并从用户输入中读入待转换十进制n。然后,利用while循环实现将n除以8,同时将余压入s中,直到商为0。注意在处理完每个余之后要更新n的值。最后,再利用循环从底至顶取出余,并将其串联起来输出。这样,整数十进制八进制过程就实现了。 3. 实验结果 我们输入10,输出12,即将十进制的10转换为了八进制的12,实验结果正确。 4. 总结 因为据的存取是先进后出的方式,可以很好地实现这种值的反向顺序存储和输出。因此,利用stack进行整数十进制八进制是一种快捷方便的方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值