利用堆栈,设计算法将一个十进制正整数转换为十六进制数输出。(先设计存储结构,在设计算法,算法要加

2024-11-12 11:39:41
推荐回答(3个)
回答1:

存储结构就是int 数组 Stack,算法就是每次输入一个数字x,进行下面的循环:

1、x 不为零继续,为零则跳出。

2、每次将x 余16 的结果入栈(实际上是将x 的16 进制的第i 位入栈,i 表示循环次数)。

函数式程序设计语言中,不同子函数的参数的种类和个数是不相同的,编译器也是使用堆栈来存储子程序的参数。

递归能够增强语言的表达能力和降低程序设计难度。递归程序的递归深度通常是不确定的,需要将子程序执行的返回地址保存到堆栈这种先进后出式的结构中,以保证子程序的返回地址的正确使用顺序。

扩展资料:

一个由C/C++编译的程序占用的内存分为以下几个部分:

1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数名,局部变量的名等。其操作方式类似于数据结构中的栈。

2、堆区(heap)— 由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。

3、静态区(static)—全局变量和局部静态变量的存储是放在一块的。程序结束后由系统释放。

4、文字常量区—常量字符串就是放在这里的,程序结束后由系统释放 。

5、程序代码区— 存放函数体的二进制代码。

参考资料来源:百度百科-堆栈





回答2:

#include 
#define MAXSIZE 256
int Stack[MAXSIZE];
int top = -1;
bool isempty(){
    return top == -1;
}
void push(int d){
    Stack[++top] = d;
}
int pop(){
    return Stack[top--];
}
char dec2hex(int x){
    return (x>9?'a':'0') + (x%10);
}
int main(){
    int x;
    scanf("%d", &x);
    //除16取余
    while(x){
        push(x%16);
        x /= 16;
    }
    while(!isempty())
        putchar(dec2hex(pop()));
}

存储结构就是int 数组 Stack

算法就是每次输入一个数字x,进行下面的循环:

1.    x 不为零继续,为零则跳出   

2.    每次将x 余16 的结果入栈(实际上是将x 的16 进制的第i 位入栈,i 表示循环次数)

3.    x = x/16.(将x 自除以16)转至1

这是16 进制的存储过程,输出就是先读出(dec2hex() 函数完成)在打印出来:

顺序从栈顶到栈底分别是这个数字(16 进制下的)高位到低位。

回答3:

我是用JAVA的 所以只能说原理
先说栈结构 是FILO 先进后出 可以用list, 实在不济用数组也行
算法设计:

设置一个对象 result 这个对象在初始化的时候 加上 如果整数是10就返回A 11B..15F这样的转义
设置一个函数 f(x)
另f(x) = X对16取余数(取模)
X对16取整
返回 值(整数,余数)
;
设定main函数
1键盘录入一个数 得到X
2 循环调用f(x),判出条件是 f(x)的返回值 整数部分=0
3 循环体内将余数部分压栈
循环体内 X= 整数部分 调用f(x) 循环
4 逆序输出栈内内容