C语言利用栈结构具有先进后出的特性,编程实现:输入一个任意十进制数,转换为八进制数进行输出。

#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define stack_size 100
#define OVERFLOW 0
#define EXIT -2
typedef int Selemtype;
typedef int ElemType;
typedef int Status;
typedef struct{
int *base;
int *top;
int stacksize;
}SqStack; //*定义栈结构

Status InitStack (SqStack *S) //构造一个空栈
{ S->base =(Selemtype*)malloc(stack_size*sizeof(ElemType));
if (!S->base) EXIT (OVERFLOW);
S->top = S->base;
S->stacksize = stack_size;
return OK;
}//InitStack
Status GetTop(SqStack *S,Selemtype *e)//若栈不空,则用e返回S的栈顶元素,并返回OK,否则返回ERROR
{

if (S->top==S->base) return ERROR;
e=*(S->top-1);
return OK;
}// GetTop
Status Push (SqStack *S,Selemtype *e) //插入元素e为新的栈顶元素
{

if (S->top-S->base>=S->stacksize){//栈满,追加存储空间
S->base=(ElemType*)realloc(S->base,
(S->stacksize+stackincrement)*sizeof(ElemType));
if (!S->base) EXIT (OVERFLOW);//存储分配失败
S->top=S->base+S->stacksize;
S->stacksize+=stackincrement;
}
*S->top++=e;
return OK;
}//Push
Status StackEmpty(SqStack *S){

if (S->base==S->top) return OK;
else return ERROR;
} // StackEmpty

Status Pop(SqStack *S,Selemtype *e)//若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK,否则返回ERROR
{

if (S->top==S->base) return ERROR;
e=*--S->top;
return OK;
}//Pop
void conversion()//10进制转换成8进制
{
ElemType N, e;

SqStack S;
InitStack(*S);

scanf("%d",&N);
printf("10进制数转换为8进制数为:");
while(N){
Push(&S,N%8);
N=N/8;
}
while (!StackEmpty(*S)){
Pop(*S,*e);

printf("%d",e);

}
printf("\n");
}
void main(){
printf("请输入你要转换的10进制数:");

conversion();
}
求改此程序并指出具体错在哪

#include<stdlib.h>
#define initsize 20
#define increment 10
typedef char elemtype;
typedef struct stack{
elemtype *base;
elemtype *top;
int stacksize;
}stack;
void initstack(stack &s)//初始化栈
{s.base=(elemtype *)malloc(initsize*sizeof(elemtype));
if(!s.base)
exit(0);
s.stacksize=initsize;
s.top = s.base;}
void push(stack &s,elemtype e)//入栈,栈满则追加栈空间
{if(s.top-s.base>=initsize)
s.base=(elemtype *)realloc(s.base,(s.stacksize+increment)*sizeof(elemtype));
if(!s.base)
exit(0);
s.stacksize+=increment;
*s.top=e;
s.top++;
}
void pop(stack &s,elemtype &e)//出栈
{if(s.base==s.top)
printf("有错误");
else
e=*--s.top;
}
int empty(stack &s)//判栈空
{if(s.base==s.top)
return 1;
else return 0;
}
void clear(stack &s)
{if(s.base==s.top)
return ;
s.base=s.top;
}
void conversion(int n,int N)//进制转换
{int c;
char e;
stack s;
initstack(s);
while(n!=0)
{c=n%N;
n=n/N;
if(c<10)
*s.top++='0'+c;
else
{*s.top++='A'+c-10;
}
}
while(!empty(s))
{pop(s,e);
printf("%c",e);
}
clear(s);
}
void main()
{
int n,N;
printf("请输入十进制数:");
scanf("%d",&n);
printf("请输入需要转化进制:");
scanf("%d",&N);
printf("转化后的数是:");
conversion(n,N);
}追问

你这个程序有错误,我那个是C语言的,不是C++的,而且你这已经不算是修改了吧...

温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网