实验二栈的应用(数制转换)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验二栈的应用(数制转换)
一、实验目的
掌握栈的基本操作:初始化栈、判栈为空、出栈、入栈等运算。二、实验要求
1.认真阅读和掌握本实验的算法。
2.上机将本算法实现。
3.保存程序的运行结果,并结合程序进行分析。
三、实验内容
利用栈的基本操作实现将任意一个十进制整数转化为R进制整数
算法为:
1、定义栈的顺序存取结构
2、分别定义栈的基本操作(初始化栈、判栈为空、出栈、入栈等)
3、定义一个函数用来实现上面问题:
(1)十进制整数X和R作为形参
(2)初始化栈
(3)只要X不为0重复做下列动作
将X % R入栈, X=X/R
(4)只要栈不为空重复做下列动作
栈顶出栈 , 输出栈顶元素
四、实验报告要求:
1、十进制整数转化为R进制整数算法的代码;
2、程序运行结果及分析;
3、实验总结。
1.实验源码:
#include""
#include""
#include""
#define maxsize 100
typedef struct{
int data[maxsize];
int top;
}seqstack,*pseqstack;
pseqstack setstack()
{
pseqstack s;
s=(pseqstack)malloc(sizeof(seqstack));
if(s)
s->top=-1;
return s;
}
int empty(pseqstack s)
{
if(s->top==-1)
return 1;
else
return 0;
}
pseqstack pushin(pseqstack s,int m,int r) {
if(s->top==maxsize-1)
printf("此栈已满,无法入栈!\n");
else
{
while(m!=0)
{
s->top++;
s->data[s->top]=m%r;
m=(m-(m%r))/r;
}
}
return s;
}
int popout(pseqstack s)
{
if(empty(s))
return 0;
else
{
printf("转化后的数是:");
while(s->top!=-1)
{
printf("%d",s->data[s->top]);
s->top--;
}
putchar('\n');
return 1;
}
}
void main()
{
int m,r;
pseqstack p;
p=(pseqstack)malloc(sizeof(seqstack));
printf("请输入一个十进制的正整数:");
scanf("%d",&m);
printf("请输入你想转化的进制位:");
scanf("%d",&r);
p=setstack();
p=pushin(p,m,r);
popout(p);
}
2.程序截图:
3.实验总结: