C语言 栈的应用 数制转换

新手学习数据结构,求高手指出哪里的错误。 应用栈进行10进制数转换8进制。#include <stdio.h>#include <stdlib.h>#define STACK_INIT_SIZE 100;#define STACKINCREMENT 10;#define TRUE 1#define FALSE 0#define OK 1 #define ERROR 0 #define OVERFLOW -2typedef int Status;typedef int SElemType;typedef struct{ SElemType *base; SElemType *top; int stacksize;}SqStack;Status InitStack(SqStack S){ //构造一个空栈 S.base = (int*)malloc(100*sizeof(int)); if(!S.base) exit (OVERFLOW);//储存分配失败 S.top = S.base; S.stacksize = STACK_INIT_SIZE; return OK;} Status Push(SqStack S,int e){ //插入元素e为新的栈顶元素 if(S.top-S.base>=S.stacksize) {//栈满追加空间 S.base = (int *)realloc(S.base,(S.stacksize + 10) * sizeof(int)); if(S.base==NULL) exit(OVERFLOW);//储存分配失败 S.top=S.base+S.stacksize; S.stacksize+=STACKINCREMENT; } *S.top++ = e; return OK;}Status Pop(SqStack S, SElemType e){ //若栈不空,则删除栈顶元素,用e返回其值,并返回OK;否则返回ERROR if(S.top == S.base) return ERROR; e = * --S.top; return OK;}Status StackEmpty(SqStack S){ //若栈为空,则返回TRUE,否则返回FALSE int i; for(i=0;i<S.stacksize;i++) { if(S.base[i]!=NULL) return FALSE; } return TRUE;}void conversion(int N,SqStack S){ //对于输入的任意一个非负十进制整数,打印输出与其等值的八进制数 int e; 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(){ int N; SqStack S; conversion(N,S);}初学者啊,能再详细些么? 要修改后的代码
2026年09月24日 14:00
有2个网友回答
网友(1):

#include "stdafx.h"
#include
#include
#define MaxSize 100

//用栈的方法
typedef struct {
int data[MaxSize];
int top;
}Stack;//顺序栈,也可用链栈

void InitStack(Stack &S)//初始化栈
{
S.top=-1;
}

int push(Stack &S,int x)//入栈
{
if(S.top==MaxSize)
return 0; //栈满
else{
S.top++;
S.data[S.top]=x;
return 1;
}
}

int pop(Stack &S,int &x)//出栈
{
if(S.top==-1)
return 0; //栈空
else{
x=S.data[S.top];
S.top--;
return 1;
}
}

void display(Stack &S)
{
int x;
while(S.top!=-1)
{
pop(S,x);
printf("%x",x);
}

}
void func(int n,int m)//n为十进制数,m为2,8,或16
{
Stack S;
InitStack(S);
while(n!=0)
{
push(S,n%m);
n=n/m;
}
display(S);
}

int main(int argc, char* argv[])
{
int n;
printf("\n请输入一个数:");
scanf("%d",&n);
int m=2;
func(n,m);
m=8;
func(n,m);
m=16;
func(n,m);
return 0;
}

网友(2):

1,函数传参机制再看看
2,判断栈是否为空方法不对