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的二进制码
} 展开
#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的二进制码
} 展开
2个回答
展开全部
堆栈问题.我觉的这段代码,注释的都比较详细了.
我简单的说一下原理:
此例,你把它想像成有100个从上到下的空间.
top相当于数组的下标,top的值代表着最上面一个元素的下标
top初始化成-1代表栈是空的.
入栈:先要判断栈有没有满,top为99,则栈满.
没满的情况下,数据放进去,top往上移.
出栈:先看栈里面有没有数据,top为-1,则栈空.
没空的情况下,数据取出来,top往下移.
主函数中利用栈,从右向左放入整数的二进制码.
然后依次从上到下打印出来.
我简单的说一下原理:
此例,你把它想像成有100个从上到下的空间.
top相当于数组的下标,top的值代表着最上面一个元素的下标
top初始化成-1代表栈是空的.
入栈:先要判断栈有没有满,top为99,则栈满.
没满的情况下,数据放进去,top往上移.
出栈:先看栈里面有没有数据,top为-1,则栈空.
没空的情况下,数据取出来,top往下移.
主函数中利用栈,从右向左放入整数的二进制码.
然后依次从上到下打印出来.
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询