利用堆栈,设计算法将一个十进制正整数转换为十六进制数输出。(先设计存储结构,在设计算法,算法要加
【c语言 数据结构题目。】 展开
存储结构就是int 数组 Stack,算法就是每次输入一个数字x,进行下面的循环:
1、x 不为零继续,为零则跳出。
2、每次将x 余16 的结果入栈(实际上是将x 的16 进制的第i 位入栈,i 表示循环次数)。
函数式程序设计语言中,不同子函数的参数的种类和个数是不相同的,编译器也是使用堆栈来存储子程序的参数。
递归能够增强语言的表达能力和降低程序设计难度。递归程序的递归深度通常是不确定的,需要将子程序执行的返回地址保存到堆栈这种先进后出式的结构中,以保证子程序的返回地址的正确使用顺序。
扩展资料:
一个由C/C++编译的程序占用的内存分为以下几个部分:
1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数名,局部变量的名等。其操作方式类似于数据结构中的栈。
2、堆区(heap)— 由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。
3、静态区(static)—全局变量和局部静态变量的存储是放在一块的。程序结束后由系统释放。
4、文字常量区—常量字符串就是放在这里的,程序结束后由系统释放 。
5、程序代码区— 存放函数体的二进制代码。
参考资料来源:百度百科-堆栈
#include <stdio.h>
#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 进制下的)高位到低位。
先说栈结构 是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 逆序输出栈内内容