堆栈--十进制转换成二进制、八进制、十六进制

使用堆栈的后进先出的原理,实现十进制转换成二进制、八进制、十六进制:

根据十进制转换其余进制的原理,对十进制取余。然后根据LIFO:4、0、5、2放进堆栈,出来的时候就是转换好的八进制的2504。

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>

#define STACK_SIZE     1024

typedef struct {
	int *base;
	int *top;
	int stack_size;
}STACK;

int stack_init(STACK *s)
{
	s->base = (int *)malloc(STACK_SIZE * sizeof(int));
	if (s->base == NULL)
	{
		return -1;
	}
	s->top = s->base;
	s->stack_size = STACK_SIZE;

	return 0;
}

void stack_destroy(STACK *s)
{
	free(s->base);
	s->base = s->top = NULL;
	s->stack_size = 0;
}

int stack_length(STACK *s)
{
	int length = 0;

	length = s->top - s->base;

	return length;
}

int stack_empty(STACK *s)
{
	if (s->top == s->base)
	{
		return 1;
	}
	else
	{
		return 0;
	}
}

int stack_push(STACK *s, int e)
{
	if (stack_length(s) >= s->stack_size)
	{
		return -1;
	}

	*(s->top) = e;
	s->top++;

	return 0;
}

int stack_pop(STACK *s, int *e)
{
	if (stack_length(s) == 0)
	{
		return -1;
	}
	
	s->top--;
	*e = *(s->top);

	return 0;
}

int main(int argc, char *argv[])
{
	STACK *s;
	int n = 0, type = 0;;
	int elem;
	
	if (argc < 3)
	{
		printf("usage: ./conversion <2 8 16 > < num>\n");
		return -1;
	}
	type = atoi(argv[1]);
	n = atoi(argv[2]);
	s = (STACK *)malloc(sizeof(STACK));
	if (s == NULL)
	{
		return -1;
	}
	stack_init(s);

	while(n > 0)
	{
		stack_push(s, n % type);
		n  = n / type;
	}
	
	while(stack_empty(s) == 0)
	{
		stack_pop(s, &elem);
		printf("%d", elem);
	}
	putchar('\n');

	return 0;
}

执行结果:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值