栈的基本操作和十进制转换为二进制

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;

相关文档
最新文档