栈的基本操作和十进制转换为二进制
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/*功能:对栈进行初始化、进栈、出栈、取栈顶元素以及用栈来实现十进制数转换成二进制数*/
#include
#include
#include
#define Max 20
typedef char Elemtp;
typedef struct //栈的定义
{
Elemtp Data[Max];
int top;
}Stack;
Stack s,*p;
void Init(Stack *s)//初始化
{
s->top=0;
}
int Push(Stack *s,Elemtp x)//元素x进栈
{
if(s->top==Max-1)
{
printf("\n栈溢出!进栈操作失败!");
return 0;
}
else s->top++;
s->Data[s->top]=x;
return 1;
}
Elemtp Pop(Stack *s)//出栈
{
Elemtp x;
if(s->top==0)
{
printf("\n栈空。出栈操作失败!");
return '\0';
}
x=s->Data[s->top];
s->top--;
return x;
}
Elemtp GetTop(Stack s)//取栈顶元素
Elemtp x;
if(s.top==0)
return '\0';
x=s.Data[s.top];
return x;
}
char change(float r,int t)//十进制转换为t进制
{
int p,b,i,c,x1,x2,t1;
int a[Max];
Stack s;
float q,t2;
p=(int)r;//取十进制数r的整数部分
Init(&s);
do
{
x1=p%t;//余数
t1=(p-x1)/t;
c=Push(&s,x1);//余数进栈
}
while(t1!=0&&c>0);
while(Pop(&s))//余数出栈进入数组
{
a[i]=Pop(&s);
i++;
}
b=i;
a[b]='.';//添上小数点
q=r-p;//十进制数的小数部分
do
{
x2=(int)(q*t);
t2=q*t-x2;//取小数的整数部分
a[b+1]=x2;//将整数存入先前数组小数点后
b++;
}
while(t2);
a[b]='\0';
return a[0];
}
void main()
{
Stack s;
Elemtp x,y,z,q;
char a[Max];
float r;
int t,i;
do
{
printf("\n按任意键进行清屏!");
getch();//寻求暂停
system("cls");//清屏
puts("\n");
puts("******************************************************");
puts("** 功能选择**");
puts("** 0--退出1--初始化**");
puts("** 2--进栈3--出栈**");
puts("** 4--取栈顶元素5--十进制与二进制的转换**");
puts("******************************************************");
printf("\n请输入你的选择:");
scanf("%d",&t);
switch(t)
{
case 0:puts("*********************");
puts("** 谢谢使用!再见!**");
puts("*********************");
exit(1);
case 1:Init(&s);
printf("\n初始化成功!");break;
case 2:printf("\n请输入进栈元素:");
scanf("%f",&q);
x=Push(&s,q);
if(x>0)
printf("\n进栈成功!");
else printf("\n进栈失败!");break;
case 3:y=Pop(&s);
if(y=='\0')
printf("\n空栈!出栈操作失败!");
else printf("\n栈顶元素是:%f",y);break;
case 4:z=GetTop(s);
if(z=='\0')
printf("\n栈空!操作失败!");
else printf("\n栈顶元素是:%f",z);break;