6-1 十进制转二进制(顺序栈设计和应用) (20分)_数据结构实验3_羊卓的杨

6-1 十进制转二进制(顺序栈设计和应用) (20分)

设计一个顺序栈,并利用该顺序栈将给定的十进制整整数转换为二进制并输出。

函数接口定义:

#define MaxSize 100    /* 栈最大容量 */
int top;        /* 栈顶指针 */
int mystack[MaxSize];    /* 顺序栈 */

/*判栈是否为空,空返回true,非空返回false */
bool isEmpty();

/* 元素x入栈 */
void Push(int x);

/* 取栈顶元素 */
int getTop();

/* 删除栈顶元素 */
void Pop();

其中 MaxSize 和 top 分别为栈的最大容量和栈顶指针。数组mystack 用来模拟顺序栈。请实现给出的isEmpty、Push、getTop和Pop这四个函数。

裁判测试程序样例:

#include <bits/stdc++.h>
using namespace std;

#define MaxSize 100        /* 栈最大容量 */
int top;                /* 栈顶指针 */
int mystack[MaxSize];    /* 顺序栈 */

/*判栈是否为空,空返回true,非空返回false */
bool isEmpty();

/* 元素x入栈 */
void Push(int x);

/* 取栈顶元素 */
int getTop();

/* 删除栈顶元素 */
void Pop();

/* 十进制正整数转换为二进制 */
void dec2bin(int x) {
    top = -1;            /* 初始化栈顶指针 */
    while (x) {
        Push(x % 2);
        x >>= 1;
    }
    while (!isEmpty()) {
        int t = getTop();
        Pop();
        printf("%d", t);
    }
    printf("\n");
}

int main(int argc, char const *argv[])
{
    int n;
    while (scanf("%d", &n) != EOF) {
        dec2bin(n);
    }
    return 0;
}

/* 请在这里填写答案 */

答案样例:

/*判栈是否为空,空返回true,非空返回false */
bool isEmpty(){
	if(top == -1)
		return true;
	return false;
}
/* 元素x入栈 */
void Push(int x){
	mystack[++top]=x;
}
/* 取栈顶元素 */
int getTop(){
	return mystack[top];
}
/* 删除栈顶元素 */
void Pop(){
	mystack[top--]=0;
}

我的好伙计你点个赞再走,你要是三连一下就更好了❀

bilibili:羊卓的杨
公众号:羊卓的杨

  • 15
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,这是一个关于进制转换的编程问题。以下是一个使用顺序栈实现的示例代码: ```python class Stack: def __init__(self): self.items = [] def push(self, item): self.items.append(item) def pop(self): return self.items.pop() def is_empty(self): return len(self.items) == 0 def convert_base(num, base): digits = "0123456789ABCDEF" stack = Stack() while num > 0: rem = num % base stack.push(rem) num = num // base new_num = "" while not stack.is_empty(): new_num += digits[stack.pop()] return new_num # 二进制十进制 num = "101010" base = 2 decimal = 0 for digit in num: decimal = decimal * base + int(digit) print(decimal) # 十进制转二进制 num = 42 base = 2 binary = convert_base(num, base) print(binary) # 十进制转八进制 num = 42 base = 8 octal = convert_base(num, base) print(octal) # 十进制转十六进制 num = 42 base = 16 hexadecimal = convert_base(num, base) print(hexadecimal) ``` 希望这个示例代码能够帮助你理解如何使用顺序栈实现进制转换。 ### 回答2: 利用顺序栈可以用来求各种进制之间的转换顺序栈是一种后进先出(LIFO)的数据结构,可以通过入和出操作实现进制转换。 首先,我们来看二进制十进制。将二进制从最低位开始,逐位取出,然后乘以2的相应次幂,并将结果累加得到十进制。 接下来是二进制转八进制。将二进制从最低位开始,将每3位二进制一组,转换成对应的八进制。 再来是二进制转十六进制。将二进制从最低位开始,将每4位二进制一组,转换成对应的十六进制。 然后是十进制转二进制。将十进制不断除以2,将余依次入,直到商为0。然后依次出得到二进制。 以上转换过程都可以利用顺序栈来辅助实现。中存储转换后的结果,每次计算得到的位。最后按照出顺序组合起来,即得到转换后的进制利用顺序栈进行进制转换可以简化计算过程,提高转换效率。通过入、出操作和进制转换规则的结合,可以轻松实现各种进制之间的转换。 ### 回答3: 利用顺序栈可以很方便地实现各种进制之间的转换。 首先来看二进制十进制。我们可以从二进制的最低位开始,每次取出一个位,然后用2的幂次方乘以二进制位上的字,最后将这些乘积相加得到十进制。我们可以利用顺序栈二进制从低位到高位依次入,然后出计算得到十进制。 接下来是二进制转八进制和十六进制。与二进制十进制类似,我们可以按照每3位或4位为一组进行划,将每组二进制转化为对应的八进制或十六进制。再利用顺序栈将每组的结果入,最后将中的结果依次出,得到最终的八进制或十六进制。 最后是十进制转二进制。我们可以使用除2取余的方法,将十进制不断除以2,每次取余并将余,直到商为0为止。然后将中的余依次出,得到最终的二进制。 通过使用顺序栈,我们可以方便地完成各种进制之间的转换顺序栈的先进后出的特性非常适合这一类问题的解决。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值