C语言用栈写八进制,C语言:十进制到八进制转换(用栈实现)

/*

十进制到其它进制的转换

*/

# include

# include

# define N 8 //要转换成的进制

# define INIT_SIZE 5 //栈的初始空间大小

# define INC_SIZE 2 //栈空间增量

//栈结构

typedef struct

{

int * base; //指向栈底,也是栈空间的地址

int * top; //始终指向有效元素的上一个位置

int initsize; //栈的初始空间大小

}Stack;

void convert(int num); //进制转换

void inital_stack(Stack &s); //初始化栈

void push(Stack &s, int m); //元素入栈

void pop(Stack &s, int * val); //元素出栈

int main(void)

{

int num;

printf("请输入一个十进制数 num = ");

scanf("%d", &num);

convert(num);

return 0;

}

//进制换换

void convert(int num)

{

int m; //记录余数

int val; //保存出栈元素

Stack s;

inital_stack(s);

while(0 != num) //当商为0时结束

{

m = num % N; //取模

push(s, m);

num = num / N;

}

printf("转换成%d进制为:", N);

while(s.top != s.base)

{

pop(s, &val);

printf("%d", val);

}

printf("\n");

}

//初始化栈

void inital_stack(Stack &s)

{

s.initsize = INIT_SIZE;

s.base = (int *)malloc(sizeof(int) * INIT_SIZE);

s.top = s.base;

}

//元素m入栈

void push(Stack &s, int m)

{

//判断栈是否满,满则增加栈的容量

if((s.top - s.base) >= s.initsize)

{

s.base = (int *)realloc(s.base, sizeof(int) * s.initsize + INC_SIZE);

s.initsize = s.initsize + INC_SIZE;

}

*(s.top) = m;

s.top ++;

}

//元素出栈

void pop(Stack &s, int * val)

{

s.top --;

*val =*(s.top);

}

你可能感兴趣的:(C语言用栈写八进制)