c语言版数据结构程序谁能把那个我解释一下这段代码的原理

#include<stdio.h>#include<stdlib.h>#defineMAX100//堆栈的最大容量typedefstruct{intdata[MAX];/... #include <stdio.h>
#include <stdlib.h>
#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的二进制码
}
展开
 我来答
dxf6939259
2012-08-07 · 超过27用户采纳过TA的回答
知道答主
回答量:101
采纳率:0%
帮助的人:40.4万
展开全部
堆栈问题.我觉的这段代码,注释的都比较详细了.

我简单的说一下原理:
此例,你把它想像成有100个从上到下的空间.

top相当于数组的下标,top的值代表着最上面一个元素的下标

top初始化成-1代表栈是空的.

入栈:先要判断栈有没有满,top为99,则栈满.
没满的情况下,数据放进去,top往上移.
出栈:先看栈里面有没有数据,top为-1,则栈空.
没空的情况下,数据取出来,top往下移.

主函数中利用栈,从右向左放入整数的二进制码.
然后依次从上到下打印出来.
wanglian9527
2012-08-07 · TA获得超过150个赞
知道答主
回答量:178
采纳率:0%
帮助的人:65.2万
展开全部
就是十进制转换成二进制,用十进制的数除以2 每除一下将余数就记在旁边 ,最后按余数从下向上排列就可得到二进制数,
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式