东软数据结构实验报告通过栈和队列来实现进制转换.docx
- 文档编号:28843960
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:17
- 大小:180.04KB
东软数据结构实验报告通过栈和队列来实现进制转换.docx
《东软数据结构实验报告通过栈和队列来实现进制转换.docx》由会员分享,可在线阅读,更多相关《东软数据结构实验报告通过栈和队列来实现进制转换.docx(17页珍藏版)》请在冰豆网上搜索。
东软数据结构实验报告通过栈和队列来实现进制转换
实验报告
(一)
姓名:
1111111111111学号:
XX
实验
名称
栈和队列的操作
指导教师
xxx
实验
地点
xxx
实验日期
xxx
实验
目的
理解栈和队列的概念,完成栈和队列的各种基本操作
同组
成员
无
实验过程
1、项目简介
进制转换
通过编写函数实现十进制浮点数到R进制的转换,在十进制浮点数的整数部分利用栈结构实现,小数部分用队列结构实现。
2、项目实施:
1.读取数据并获得小数点位置
2.将字符串转为整数形式
.
3.对整数部分进行入栈
4.获得小数部分并入队
5.整数和小数的联合输出
6.源代码:
#include
#include
#include
#definesize10//小数部分大小
#definemaxsize20//整数部分大小
//*********************************
//*********************************
//小数部分——队列
typedefstruct
{
chardata[10];//读取转制后的小数部分
intfront,rear;//队首尾指针
}Queue;//循环队列
//*********************************
//初始化队列
voidinit_Queue(Queue*q)
{
q->front=q->rear=0;
}
//*********************************
//入队
intpush_Queue(Queue*q,intx)
{
if((q->rear+1)%size==q->front)//判断队满
{
printf("队列满!
不允许入队\n");
return0;
}
else
{
q->rear=(q->rear+1)%size;
q->data[q->rear]=x;
return1;
}
}
//*********************************
//出队
intpop_Queue(Queue*q,int*x)
{
if(q->rear==q->front)
{
printf("队空!
");
return0;
}
else
{
q->front=(q->front+1)%size;
*x=q->data[q->front];//读取队头元素
return1;
}
}
//*********************************
//*********************************
//整数部分——栈
typedefstruct
{
chardataint[100];
inttop;
}Stack;
//*********************************
//-制空栈
voidinit_Stack(Stack*s)
{
s->top=0;
}
//*********************************
//进栈
intpush_Stack(Stack*s,intx)
{
if(s->top==maxsize)
{
printf("栈已满!
");
return0;
}
else
{
s->dataint[s->top]=x;//数据进栈
s->top++;
return1;
}
}
//*********************************
//出栈
intpop_Stack(Stack*s,int*x)
{
if(s->top==0)
{
printf("栈空,无数据可取!
");
return0;
}
else
{
s->top--;
*x=s->dataint[s->top];//取处数据
return1;
}
}
//*********************************主程序
intmain()
{
//*********************************
//读入数据
chara[20];
intaim;
printf("请输入一个十进制浮点数:
");//以字符串形式输入一个浮点数
gets(a);
printf("请输入目标进制:
");
scanf("%d",&aim);
if(aim==1){
printf("ERROR!
PLEASEINPUTANUMBERANDITISBIGGERTHAN1");
return0;
}
//*********************************
//读取小数点位置
inti;
intpos;//小数点位置
for(i=0;i { if(a[i]=='.') { pos=i; break; } } //********************************* //定义栈对整数部分转化后并入栈 Stackss; init_Stack(&ss);//初始化栈 //********************************* //将整数部分转换为int型 intbegin=1; intbnum; if(a[0]=='-'){ intbnum=a[1]-'0';//判断是否为负数 begin=2; } elsebnum=a[0]-'0'; for(i=begin;i { bnum=bnum*10+a[i]-'0'; } //printf("整数部分: %d\n",bnum); //********************************* //依次求得所转进制的每一位并入栈 while(bnum) { //if(bnum/aim! =0) push_Stack(&ss,bnum%aim); bnum=bnum/aim; } //********************************* //出栈读取整数部分结果 intflag,z; flag=pop_Stack(&ss,&z); if(flag==1) { printf("目的进制数为: "); for(i=ss.top;i>=0;i--)//先从顶端出栈 printf("%d",ss.dataint[i]); } elseprintf("无数据! "); //printf("\n"); //********************************* //定义队列并将小数部分转化后入队 Queueq,*cq=&q; init_Queue(cq); //********************************* //将小数点后面的部分转为浮点数 intc=1; intanum=a[pos+1]-'0'; for(i=pos+2;i { anum=anum*10+(a[i]-'0'); c++; } doublesmall=((double)anum)/pow(10,c); //printf("小数部分: %lf\n",small); //********************************* //依次求得小数部分的每一位并入队 intzz; intinnum; for(i=0;i<6;i++) { innum=(((int)(small*aim)))%10;//取出小数点前的部分 small=small*aim-innum;//得到减去小数点前段的部分继续与aim相乘 push_Queue(cq,innum); } //********************************* //出队列 printf("."); if(pop_Queue(cq,&zz)){ for(i=(cq->front)%size;i! =(cq->rear+1)%size;i=(i+1)%size) printf("%d",cq->data[i]); } //********************************* return0; } 实验总结 通过对数据的单个读取并入栈,后续的出栈顺序为从上到下,先进后出,读取数据后为相反的顺序,而队列的顺序出队为先进先出,对小数的存储可直接进行读取。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实验 报告 通过 队列 实现 转换