- 1、本文档共4页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构之进制转换
算法与数据结构实验报告
实验三
实验名称: 栈和队列—进制转换
姓名: X X X
学号: 211106365
专业: 软件工程
班级: X班
指导教师: X X X
日期: 2013年 月 日
实验目的
学会应用栈或队列解决进制转换问题,熟练掌握在顺序栈(队列)或链栈(队列)上实现的各种基本操作。
实验内容与实验步骤
内容:利用栈实现十进制和其他任意进制数的任意转换输出问题
进制转换原理:N = (N div d) *d + N mod d(其中:div 为整除运算,mod 为求余运算)
步骤: 1 定义栈数据类型,采用链式存储结构实现
2 链栈基本操作函数原型声明
3 初始化栈
4 输入栈
5 输出栈
6 判空栈
7 自定义实现进制转换函数
8 数据调试
9 程序结束
实验环境
操作系统winXP、开发平台:Microsoft Visual C++6.0
实验过程与分析
程序设计过程中忘了考虑到开始报数的数不能超过最大编号;而导致程序的健壮性不足,经修改后,解决了这一问题;
实验结论
(1348)10 = (2504)8
(11)10 = (B)16
(8)10 = (1000)2
附录
#define STACK_INIT_SIZE 100 //存储空间初始分配量
#define STACKINCREMENT 10 //存储空间分配增量
#define ERROR 0
#define OVERFLOW -2
#include stdio.h
#includemalloc.h
#includeprocess.h
typedef int SElemType;
typedef struct
{
SElemType *base;// 在栈构造之前和销毁之后,base 的值为NULL
SElemType *top;// 栈顶指针
int StackSize; //当前已分配的存储空间,以元素为单位
}SqStack;
void InitStack(SqStack *s) //初始化栈
{
s-base =(SElemType*)malloc (STACK_INIT_SIZE * sizeof(SElemType));
if(!s-base) exit(OVERFLOW);
s-top=s-base;
s-StackSize= STACK_INIT_SIZE;
}
void Push(SqStack *s,SElemType e) // 输入栈
{
if (s-top-s-base=s-StackSize)
{
s-base=(SElemType *) realloc (s-base,(s-StackSize+STACKINCREMENT)*sizeof(SElemType)); //栈满,追加存储空间
if(!s-base) exit(OVERFLOW); //若内存中没有s-StackSize+STACKINCREMENT个连续空间则分配失败
s-top=s-base+s-StackSize;
s-StackSize+=STACKINCREMENT;
}
*s-top++ =e;
}
int Pop(SqStack *s,SElemType *e) //输出栈
{
if (s-top==s-base)
return ERROR;
s-top=s-top-1;
*e = *s-top;
}
int StackEmpty(SqStack s) //判空栈
{
if (s.top ==s.base)
return 1;
else
return 0;
}
void Conversion(int N,int m)
{
SElemType e;
SqStack s;
InitStack(s);
while(N)
{
Push(s,N%m);
N= N/m;
文档评论(0)