注册 登录
编程论坛 数据结构与算法

数据结构出入栈练习,输入一个十进制数,转换为八进制输出

sally02468 发布于 2015-11-25 21:33, 2533 次点击
题目:键盘输入一个十进制数,将其转换为八进制数,输出转换后的数。
例如:(1348)10 =(2504 )8
1.将元素取余入栈。
2.将元素出栈。


有一个错误,怎么改都不对

#include<stdio.h>
#include<stdlib.h>
#define ERROR  0
#define OK 1
#define OVERFLOW -2
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef int SElemType;
typedef struct{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;

//输入任意一个非负十进制整数,打印输出与其等值的八进制数
void conversion(int N){
InitStack(S);//构造空栈
SElemType e;
   SqStack s;
scanf("%d",N);
while(N){
    Push(S,N%8);
    N=N/8;
}
while(!StackEmpty(S)){
    Pop(S,e);
    printf("%d",e);
}

}//conversion

//构造一个空栈S
int InitStack(SqStack S){
    S.base=(SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType));
    if(!S.base)exit(OVERFLOW);
    S.top=S.base;
    S.stacksize=STACK_INIT_SIZE;
    return OK;
    }//InitStack

int 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)exit(OVERFLOW);
      S.top=S.base+S.stacksize;
      S.stacksize+=STACKINCREMENT;

}
* S.top++=e;
return OK;
}//Push

int Pop(SqStack S,SElemType e){
//若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR;
if(S.top==S.base)return ERROR;
e=*--S.top;
return OK;
}//Pop

int  main(){
int N;
//scanf("%d",&N);
conversion(N);
print(N);
return 0;
}
0 回复
1