用栈实现十进制到二进制的转换

/* 栈,先进后出 */

#include<stdio.h>
#include<malloc.h>
#define N 1  //初始化内存大小,以元素为单位 
#define M 1  //内存扩增,以元素为单位 


struct stack {
	int *base;
	int *top; 
	int n;  //记录栈的内存大小,以元素为单位 
};


struct stack S;

void initStack();
void push(int e);
void getTop(int &e);
void delTop(int &e);
int length();


void main() {
	int a, m, num, i;
	initStack();
	for(i=1; i<=3; i++) {
		printf("请任意输入一个十进制数:\n");
			scanf("%d", &num);
		while(num != 0) {
			m = num%2;
			push(m);
			num /= 2;
		}
		printf("对应得二进制为:");
		while(S.n != 0) {
			delTop(a);
			printf("%d", a);
			S.n --;
		}
		printf("\n");
	}
}

/*初始化一个栈*/
void initStack() {
	//构造一个空栈S
	S.base = (int *)malloc(N*sizeof(int));
	if(!S.base) {
		printf("error");
 		return;
 	}
	S.top = S.base;
	S.n = N; //初始化栈内存大小 
} 

/*插入新的栈顶元素*/ 
void push(int e) {
	//插入元素e为新的栈顶元素
	if(S.top-S.base >= S.n) {//内存不足,自动追加
		S.base = (int *)realloc(S.base, (S.n + M)*sizeof(int)); 
		if(!S.base) {
			printf("error");
			return;
		}
		S.top = S.base + S.n; // 
		S.n += M;	
	} 
	*S.top++ = e;/*栈顶指针的内容为空(看书上图),将e赋给它,然后top加1*/ 
}


/*取出栈顶元素*/
void getTop(int &e) {
	//若栈不为空,用e返回大小
	if(S.top == S.base) {
		printf("error");
		return;
	} 
	e = *(S.top - 1);
}



/*删除栈顶元素*/
void delTop(int &e) {
	if(S.top == S.base) {
		printf("error");
		return;
	}
	e = *--S.top;/*top指针先减1以指向栈顶元素(top指针实际并不是指向栈顶元素)
	将栈顶元素返回后,top指针减1*/ 
} 


/*栈中的元素个数*/
int length() { 
	if(S.top == S.base)
		return 0;
	return (S.top-S.base)/M - 1;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值