您的位置:首页 > 理论基础 > 数据结构算法

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

2017-05-16 23:55 393 查看

一、算法描述

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

二、数据结构与算法

1、数据结构(栈)

#define STACK_INIT_SIZE 100//存储空间初始分配量
#define STACKINCREMENT 10//存储空间分配增量
typedef struct{
SElemType *base;//栈的首地址指向的元素指针
SElemType *top;//栈顶指针 **注意这个栈顶指针指向的是栈中的顶 这个顶是元素为空的
int stackSize;//当前已分配的存储空间,以元素为单位
}SqStack;

Status InitStack(SqStack &S){
//构造一个空栈S
S.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;否则返回ERROR
if (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、算法

//数制转换 p48
void 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请按任意键继续. .
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: