栈的应用-转八进制

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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);

}

相关文档
最新文档