|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include <stdio.h
#include<malloc.h>
#define kaipi 100
typedef struct
{
int *top;
int *base;
int chang;
}zhan;
int chushi(zhan *z)
{
z->base=(int *)malloc(kaipi*sizeof(int));
if(!z->base)
{
printf("开辟失败!日!空间怎么怎么快就用完了!垃圾PC赶快丢了吧买新的吧!!!");
return 0;
}
z->top=z->base;
z->chang=kaipi;
return 0;
}
int jinzhan(zhan *z,int shu,int jin)
{
if((z->top)-(z->base)==(z->chang))
{
printf("额!栈的空间已经用完了要开辟增加新的空间了!不然就要产出上溢了!我们还是让PC要增加新的空间吧O(∩_∩)O~!请输入要增加的空间大小!");
int xin;
scanf("%d",&xin);
z->base=(int *)realloc(z->base,(shu+xin)*sizeof(int));
if(!z->base)
{
printf("开辟失败!日!空间怎么怎么快就用完了!垃圾PC赶快丢了吧买新的!!!");
return 0;
}
z->top=z->base+shu;
z->chang=shu+xin;
}
while(shu)
{
*(z->top)=shu%jin;
z->top++;//小甲鱼老师为什么我用C语言写进栈是z-top++而汇编却是SP偏移地址--;我就是想可不可以将汇编中栈地址不安从小到大,而是按从大到小。来实现C和汇编的栈操作统一啊
shu=shu/jin;
}
return 0;
}
int chuzhan(zhan *z)
{
if(z->top==z->base)
{
printf("如果程序在运行就要产生下益了!!!还是让PC停止吧!!!O(∩_∩)O~");
return 0;
}
while(z->top!=z->base)
{
if(*(--(z->top))<10)
{
printf("%d",*(z->top));
}
else
{
*(z->top)=*(z->top)-10+65;
printf("%c",*(z->top));
}
}
printf("\n");
free(z->base);
return 0;
}
void main()
{
int shu,jin;
zhan z;
printf("请输入你要转换的10进制数字");
scanf("%d",&shu);
printf("请输入你想转换的进制");
scanf("%d",&jin);
chushi(&z);
jinzhan(&z,shu,jin);
chuzhan(&z);
}
|
|