/* 栈,先进后出 */
#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;
}
用栈实现十进制到二进制的转换
最新推荐文章于 2021-12-12 19:39:50 发布