数据结构 栈和队列
数制转换
问题描述
完成数字十进制到八进制的转换。
输入示例:
请输入需转换的数的个数:3
请输入需转换的数:28,58,190
输出示例:
转换结果为:
1、 34
2、 72
3、 276
#include<stdio.h>
#include<stdlib.h>
#include<memory.h>
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define OVERFLOW 0
#define OK 1
#define ERROR 0
typedef int SElemType;
typedef int Status;
typedef struct {
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
Status InitStack(SqStack *p)//构造一个空栈p
{
p->base = (SElemType*)malloc(STACK_INIT_SIZE * sizeof(SElemType));
if (!p->base)
exit(OVERFLOW);
p->top = p->base;
p->stacksize = STACK_INIT_SIZE;
return OK;
}
Status Push(int e, SqStack *p)//插入e为栈的新元素
{
SElemType *newbase;
if ((p->top - p->base) >= p->stacksize)
{
newbase = (SElemType*)realloc(p->base, (STACKINCREMENT + p->stacksize) * sizeof(SElemType));
if (!newbase)
exit(OVERFLOW);
p->base = newbase;
p->stacksize += STACKINCREMENT;
}
*(p->top)++ = e;
return OK;
}
Status StackEmpty(SqStack *p)//若栈为空栈,则返回OK,否则返回ERROR
{
if (p->base == p->top)
return OK;
return ERROR;
}
Status Pop(SqStack *p, int *n)//若栈不为空,则删除栈顶元素,用*n返回其值
{
if (p->base == p->top)
return ERROR;
*n = *(--p->top);
return OK;
}
void Conversion(int n, SqStack *p)//对于任意输入的一个非负十进制整数,打印输出与其等值的八进制数
{
int e;
InitStack(p);
while (n)
{
Push(n % 8, p);
n /= 8;
}
while (!StackEmpty(p))
{
Pop(p, &e);
printf("%d", e);
}
printf("\n");
}
int main()
{
int x,n;
SqStack p;
printf("请输入需要转换的个数:");
scanf_s("%d", &x);
getchar();
int *q;
q = (int*)malloc(x*(sizeof(int)));//动态申请内存
memset(q, 0, x);//初始化,每个元素都为零
int i,j;
printf("请输入需要转换的数:");
for (i = 0; i < x; i++)//数组赋值
{
scanf_s("%d", &q[i]);
getchar();
}
printf("转换结果:\n");
for(j=0;j<x;j++)
{
printf("%d", j + 1);
printf("\t");
n = q[j];
Conversion(n, &p);
}
getchar();
return 0;
}
运行结果
通过输入需要转换的数的个数 实现多个数的数制转换
文章部分代码转载于:https://www.cnblogs.com/hellocheng/p/7350135.html