注册 登录
编程论坛 新人交流区

栈的进制转换应用问题

lovableqz 发布于 2007-11-14 19:48, 620 次点击

请高手指教为什么以下程序不能实现十进制数转八进制数
原代码如下:

#include "stdio.h"

#include "stdlib.h"

#define STACK_INIT_SIZE 100

/*存储空间初始分配量*/

#define STACKINCREMENT 10

/*存储空间分配增量*/

#define OVERFLOW -2

#define OK 1

#define ERROR 0

typedef int Status;

typedef int SElemType;

typedef struct{

SElemType *base; /*在栈构造之前和销毁之后,base的值为NULL*/

SElemType *top; /*栈顶指针*/

int stacksize; /*当前已分配的存储空间,以元素为单位*/

}SqStack;

Status InitStack(SqStack S){

/*构造一个空栈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;

}

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)exit(OVERFLOW); /*存储分配失败*/

S.top=S.base+S.stacksize;

S.stacksize+=STACKINCREMENT;

}

*S.top++=e;

return OK;

}

Status Pop(SqStack S,SElemType *e){

/*若栈不空,则删除S的栈顶元素,e返回其值,并返回OK;否则返回ERROR*/

if(S.top==S.base)return ERROR;

e=--S.top;

return OK;

}

Status StackEmpty(SqStack S){

/*若栈S是空栈,则返回TRUE,否则返回FALSE*/

if(S.top==S.base)return OK;

return ERROR;

}

void conversion(){

/*对于输入的任意一个非负十进制整数,打印输出与其等值的八进制数*/

SqStack S;

int *e,N;

InitStack(S);

scanf("%d",&N);

while(N){

Push(S,N%8);

N=N/8;

}

while(!StackEmpty(S)){

Pop(S,e);

printf("%d",*e);

}

}

void main(){

conversion();

getch(); /*使用WinTC编译后的运行结果不马上关闭*/

}

1 回复
#2
tlk2007-11-14 20:26
回复:(lovableqz)栈的进制转换应用问题
顶你
1