栈的应用-转八进制
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/*
栈的应用
*/
#define INISIZE 100
#define INCRSIZE 10
#include
#include
#include
typedef struct {
int *base;
int *top;
int size;
}stack;
//初始化栈
void init(stack *S){ //假设初始输入不多于100个
S->top=S->base=(int *)malloc(INISIZE*sizeof(int));
if(!S->top){
printf("初始化失败");
exit(1);
}
S->size=INISIZE;
}
//入栈
void push(stack *S,int e){
int *newbase;
if(S->top-S->base>=S->size){ //栈满,增加空间
newbase=(int *)realloc(S->base,(S->size+INCRSIZE)*sizeof(int));
if(!newbase){
printf("\n分配空间失败\n");
exit(1);
}
S->top=newbase;
S->size=S->size+INCRSIZE;
}
*S->top++=e;
}
//出栈
int pop(stack *S){
if(S->top==S->base){
printf("\n出错\n");
return -1;
}
S->top--;
return *S->top;
}
//判断栈是否为空
int sempty(stack *S){
if(S->top==S->base){
return 1; //空
}
else{
return 0; //非空
}
}
//销毁栈
void destroy(stack *S){
free(S->base); //释放后S->base虽然还指向该内存,但由于被释放,该内存已经不是此程序所控制,里面的值不确定
S->base=NULL; //由于里面的值不确定,用起来有风险,所以要把指针移走
S->top=NULL;
S->size=0;
}
void eight(stack *S,int a){
printf("对应的八进制数是:");
while(a){
push(S,a%8);
a/=8;
}
while(!sempty(S)){
printf("%d",pop(S));
}
printf("\n");
}
void main(){
int a;
stack S;
init(&S);
printf("\n请输入一个十进制数:");
scanf("%d",&a);
eight(&S,a);
destroy(&S);
}