题目内容
将十进制整数转换为base进制数输出(使用栈)
个人解法
#include#include #define STACK_INIT_SIZE 100 //存储空间初始分配量 #define STACKINCREMENT 10 //存储空间分配增量 #define Succeed 1 #define Error 0 #define Overflow -1 typedef int SElemType; typedef struct { SElemType *base; //在栈构造之前和销毁之后,base的值为NULL SElemType *top; //栈顶指针 int stacksize; //当前已分配的存储空间,以元素为单位 } SqStack; //建(初始化)栈 void InitStack(SqStack &S) { S.base = (SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType)); //申请空间,空间地址赋给指针base if (!S.base) //存储分配失败 { printf("数据溢出,存储分配失败!"); exit(Overflow); } else { S.top = S.base; //初始状态top=base S.stacksize = STACK_INIT_SIZE; printf("初始化成功!"); } } //获取栈顶元素 void GetTop(SqStack S) { SElemType e; if (S.top == S.base) //栈空 printf("栈空!"); else { e = *(S.top - 1); //不能用*(-S.top) printf("栈顶元素为%d", e); //注意数据类型应与SElemType的类型相对应 } } //进栈 void Push(SqStack &S) { SElemType e; if (S.top - S.base >= S.stacksize) //栈满,追加存储空间 { S.base = (SElemType *)realloc(S.base, (S.stacksize + STACKINCREMENT) * sizeof(SElemType)); if (!S.base) //存储分配失败 { printf("数据溢出,存储分配失败!"); exit(Overflow); } S.top = S.base + S.stacksize; S.stacksize += STACKINCREMENT; } *S.top++ = e; //插入元素e为新的栈顶元素,即*S.top = e; S.top++; printf("进栈成功!"); } //出栈 void Pop(SqStack &S) { SElemType e; if (S.top == S.base) printf("栈空!"); else { e = *--S.top; printf("出栈成功!"); } } //判空 bool StackEmpty(SqStack S) { if (S.top == S.base) return true; else return false; } //求长度 int StackLength(SqStack S) { return S.top - S.base; } //清空 void ClearStack(SqStack &S) { if (S.base) { S.top = S.base; printf("栈已清空!"); } } //销毁 void DestroyStack(SqStack &S) { if (S.base) { free(S.base); S.stacksize = 0; S.base = S.top = NULL; printf("栈已销毁!"); } } //将任意非负十进制整数转化为base进制数 void conversion() { int N; SElemType e; SqStack S; S.base = (SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType)); //申请空间,空间地址赋给指针base S.top = S.base; //初始状态top=base S.stacksize = STACK_INIT_SIZE; printf("请输入想转化的十进制非负整数:n"); scanf("%d", &N); while (N) { *S.top++ = N % *S.base; //插入余数为新的栈顶元素,即*S.top = N % *S.base; S.top++; N = N / *S.base; } printf("转化结果为:n"); while (!StackEmpty(S)) { SElemType e = *--S.top; printf("%x", e); //这里%x为十六进制类型,涵盖了二、八、十进制类型 } } int main() { conversion(); system("pause"); return 0; }
运行结果:
本人拙作,请大佬们点评。



