东软数据结构实验报告通过栈和队列来实现进制转换.docx

上传人:b****8 文档编号:28843960 上传时间:2023-07-20 格式:DOCX 页数:17 大小:180.04KB
下载 相关 举报
东软数据结构实验报告通过栈和队列来实现进制转换.docx_第1页
第1页 / 共17页
东软数据结构实验报告通过栈和队列来实现进制转换.docx_第2页
第2页 / 共17页
东软数据结构实验报告通过栈和队列来实现进制转换.docx_第3页
第3页 / 共17页
东软数据结构实验报告通过栈和队列来实现进制转换.docx_第4页
第4页 / 共17页
东软数据结构实验报告通过栈和队列来实现进制转换.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

东软数据结构实验报告通过栈和队列来实现进制转换.docx

《东软数据结构实验报告通过栈和队列来实现进制转换.docx》由会员分享,可在线阅读,更多相关《东软数据结构实验报告通过栈和队列来实现进制转换.docx(17页珍藏版)》请在冰豆网上搜索。

东软数据结构实验报告通过栈和队列来实现进制转换.docx

东软数据结构实验报告通过栈和队列来实现进制转换

实验报告

(一)

姓名:

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;

}

 

实验总结

通过对数据的单个读取并入栈,后续的出栈顺序为从上到下,先进后出,读取数据后为相反的顺序,而队列的顺序出队为先进先出,对小数的存储可直接进行读取。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 天文地理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1