qq_40227644
qq_40227644
2017-10-18 14:50
采纳率: 100%
浏览 958
已采纳

新手求解 数据结构 十进制转八进制 哪个地方错了

#include
#include
#include
#include
#include

#define OK 1
#define ERROR 1
#define STACK_INIT_SIZE 100 //存储空间初始分配量
#define STACKINCREMENT 10 //存储空间分配增量

typedef int SElemType;
typedef int Status ;

typedef struct {
SElemType * base; // 在栈构造之前和销毁之后,base的值为null
SElemType * top; // 栈顶指针
int stacksize; // 当前已分配的存储空间,以元素为单位
}SqStack;
Status InitStack (SqStack &S){
//构造空栈S
if(!S.base) exit (OVERFLOW);//存储分配失败
S.top = S.base;
S.stacksize = STACK_INIT_SIZE;
return OK;
}//InitSTACK
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;
}//Push
int StackEmpty(SqStack S)
{ // 查看栈是否为空
if(S.top == S.base) exit(OVERFLOW);
else return 1;
}//Empty
Status Pop( SqStack &S , SElemType &e){
//若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK,否则返回ERROR
if(S.top == S.base) return 1;
e = *--S.top;
return OK;
}//Pop
void conversion()
{//将十进制转化为八进制
SqStack S;
int N;
int e;
InitStack(S);
printf("输入N的值:");
scanf("%d",&N);
printf("转换后的值:");
while(N)
{
Push(S,N%8);
N=N/8;
}
while(StackEmpty(S))
{
Pop(S,e);
printf("%d\n",e);
}
}
int main()
{
conversion();
getch();
return 0;
}

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • daiyinglang
    siyelangshao 2017-10-19 07:50
    已采纳

    (1)
    Status InitStack (SqStack &S){
    //构造空栈S
    S.base = (SElemType * )malloc(STACK_INIT_SIZE * sizeof (SElemType)); //先分配内存,与S.stacksize = STACK_INIT_SIZE;保持一致。
    if(!S.base) exit (OVERFLOW);//存储分配失败
    S.top = S.base;
    S.stacksize = STACK_INIT_SIZE;
    return OK;
    }//InitSTACK

    (2)
    Status Push ( SqStack &S, SElemType e){

    • S.top++ = e; 结合后面逻辑看此处是* ++S.top = e;,先增加top,在放值 } (3) Status Pop( SqStack &S , SElemType &e){ //若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK,否则返回ERROR if(S.top == S.base) return 1; e = *S.top--; //先取值再出栈 return OK; }//Pop
    点赞 评论

相关推荐