数据结构+数制转换实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构实验报告题目:数制转换
班级:***
姓名:***
学号:*********
指导教师:**
完成日期:2009 年 4 月18 日
一、需求分析
1、程序所实现的功能;
程序通过对栈的应用,实现了将一个十进制整数向R进制数的转换。
2、程序的输入,包含输入的数据格式和说明;
程序运行时,输入任意十进制整数。对于转换进制R的值则应为:10、2、
8、16。
3、程序的输出,程序输出的形式;
输出为转换成的R进制整数。
二、设计内容
1、说明本程序中所有用到的数据及其数据结构的定义及其基本操作的定义;
1)定义栈的顺序存储结构
typedef struct
{
int *base;
int *top;
int stacksize;
}SqStack;//栈的顺序存储表示
2)栈的初始化int InitStack(SqStack &S)
3)判断一个栈是否为空int StackEmpty(SqStack &S)
4)入栈操作int Push(SqStack &S,int e)
5)出栈操作int Pop(SqStack &S,int &e)
6)数制转换函数void conversion(SqStack &S,int R,int N,int &e)
7)判断是否输入正确int Ninputlegality() int Rinputlegality()
8)主函数void main()
2、给出注释详细的源程序,及其设计思想的描述;
#include
#include
#include
#define STACK_INIT_SIZE 1000
#define STACKINCREMENT 10
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW 0
typedef struct
{
int *base;
int *top;
int stacksize;
}SqStack;//栈的顺序存储表示
int N;//定义全局变量N,表示将要转换为R进制的十进制数
int R;//定义全局变量R,表示进制数R
int InitStack(SqStack &S)
{
S.base=(int*)malloc(STACK_INIT_SIZE * sizeof(int));
if(!S.base)exit(0);
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return OK;
}//栈的初始化
int StackEmpty(SqStack &S)
{
if(S.top==S.base) return TRUE;
else return FALSE;
}//判断栈是否为空
int Push(SqStack &S,int e)
{
if(S.top-S.base>=S.stacksize)
{
S.base=(int*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(int));
if(!S.base) exit(OVERFLOW);
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top++=e;
return OK;
}//进栈操作
int Pop(SqStack &S,int &e)
{
if(S.top==S.base)return ERROR;
e=*--S.top ;
return OK;
}//出栈操作
void conversion(SqStack &S,int R,int N,int &e)
{
while(N)
{
Push(S,N%R);
N=N/R;
}
while(!StackEmpty(S))
{
Pop(S,e);
if(e<10)
{
printf("%d",e);
}
else
{ e=e+55;
printf("%c\n",e);
}
}
printf("\n");
}//数制转换函数
int Ninputlegality()
{
char str1[100];//数组str存放输入的字符,以便判断输入是否有误int i;
gets(str1);
for(i=0;str1[i]!='\0';i++)
{
if((str1[i]>57)||(str1[i]<48))
{
return(0);
break;
}
else
{
N=atoi(str1);//输入无误时,字符数组转换为十进制数N
return(1);
}
}
}//判断十进制数N输入是否合法
int Rinputlegality()
{
char str2[100];
int i;
gets(str2);
for(i=0;str2[i]!='\0';i++)
{
if((str2[i]>57)||(str2[i]<48))
{
return(0);
break;
}
else
{
R=atoi(str2);//输入无误时,字符数组转换为进制数R
return(1);
}
}
}//判断进制数r输入是否合法
void main()
{
int e,p,q;
SqStack S;
InitStack(S);