/*******************************
这段程序就是利用了堆栈的后进先出
的特性,将一个整数的二进制码打印
出来
*******************************/
#include
#include
#define MAX 100//堆栈的最大容量
typedef struct
{
int data[MAX];//堆栈空间
int top;//栈顶指示器
}SqStack;
// 动态分配堆栈SqStack空间
// 入参:无
// 返回值:堆栈结构体指针
SqStack * InitStack()
{
SqStack * s;
s=(SqStack *)malloc (sizeof(SqStack));//动态分配堆栈空间
s->top=-1;//初始化栈顶指示器
return s;
}
// 将e入栈
// 入参:s堆栈结构体指针
// 返回值:堆栈对象的结构体指针
int Push(SqStack *s,int e)
{
if(s->top==MAX-1)//判断堆栈是否满
{
printf("栈满数据溢出!");
return 0;
}
s->top++;//移动栈顶指示器
s->data[s->top]=e;//数据入栈
//这里有Bug补充: return 1 ;
}
// 打印堆栈内的所有数据
// 入参:s堆栈结构体指针
// 返回值:无
void output(SqStack *s)
{
int i;
for(i=s->top;i>=0;i--)//打印从栈顶向栈尾的数据
printf("%d", s->data[i]);
printf("\n");//换行
}
void main()
{
SqStack *s;
int n,e;
printf("请输入一个正整数:");
scanf("%d",&n);//从键盘输入一个整数n
s=InitStack();//初始化堆栈
while(n>0)//将整数n的二进制码打印出来
{
e=n%2;//取整数n的最后一位
Push(s,e);//整数n的最后一位入栈
n=(n-e)/2;//整数n右移一位
}
output(s);//打印整数n的二进制码
}
#include
#include
#define MAX 100 // 定义栈最大保存数据
typedef struct
{
int data[MAX];
int top; // 最顶层元素
}SqStack; // 定义栈结构索引
// 初始化栈
SqStack * InitStack()
{
SqStack * s;
s=(SqStack *)malloc (sizeof(SqStack));
s->top=-1;
return s;
}
// 入栈
int Push(SqStack *s,int e)
{
if(s->top==MAX-1) {printf("栈满数据溢出!"); return 0;}
s->top++;
s->data[s->top]=e;
}
// 出栈
void output(SqStack *s)
{
int i;
for(i=s->top;i>=0;i--)
printf("%d", s->data[i]);
printf("\n");
}
void main()
{
SqStack *s;
int n,e;
printf("请输入一个正整数:");
// 输入要入栈的元素个数
scanf("%d",&n);
// 初始化栈
s=InitStack();
while(n>0)
{
e=n%2;
Push(s,e);
n=(n-e)/2;
}
output(s);
}