算法:数制转换(栈的应用)-数据结构(6)

来源:互联网 发布:ubuntu ports 源 编辑:程序博客网 时间:2024/06/14 08:42

一、算法描述

将一个数按照想要的进制,进行转换。用到的栈的原因是,计算出来的数是从第一位开始的,为了方便输出,进行的栈的运用。其实就是逆序输出P48

二、数据结构与算法

1、数据结构(栈)

#define STACK_INIT_SIZE 100//存储空间初始分配量#define STACKINCREMENT 10//存储空间分配增量typedef struct{SElemType *base;//栈的首地址指向的元素指针SElemType *top;//栈顶指针 **注意这个栈顶指针指向的是栈中的顶 这个顶是元素为空的 int stackSize;//当前已分配的存储空间,以元素为单位}SqStack;Status InitStack(SqStack &S){//构造一个空栈SS.base = (SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType));if (!S.base){return OVERFLOW;}S.top = S.base;S.stackSize = STACK_INIT_SIZE;return OK;}Status GetTop(SqStack S, SElemType &e){//若栈不空,则返回S的栈顶元素,并返回OK;否则返回ERRORif (S.base == S.top){return ERROR;}e = *(S.top - 1);return OK;}Status Push(SqStack &S, SElemType e){//e元素进栈if (S.top - S.base >= S.stackSize){//栈满了,追加存储空间S.base = (SElemType*)realloc(S.base, (S.stackSize + STACKINCREMENT)*sizeof(SElemType));if (S.base == NULL){return OVERFLOW;}S.top = S.base + S.stackSize;S.stackSize += STACKINCREMENT;}*S.top++ = e;return OK;}Status Pop(SqStack &S, SElemType &e){//出栈if (S.top == S.base){return ERROR;}e = *--S.top;return OK;}bool StackEmpty(SqStack S){return S.base == S.top;}

2、算法

//数制转换 p48void conversion(int inputNum,int formatNum){//将inputNum数字 进行formatNum进制转换 SqStack stack;InitStack(stack);while (inputNum){Push(stack, inputNum%formatNum);inputNum /= formatNum;}//打印输出的进制数while (!StackEmpty(stack)){//栈还没空的情况下int e;Pop(stack, e);printf("%d", e);}}

三、执行

conversion(1348, 8);
输出:
2504请按任意键继续. .







原创粉丝点击