算法与数据结构实验报告
实验三
实验名称: 栈和队列—进制转换 姓名: 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 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; } printf(\"转换后的%d进制数为:\ while(StackEmpty(s)!=1) { Pop(&s,&e); if(e>=10) printf(\"%c\ else printf(\"%d\ } printf(\"\\n\"); } void main() { int n,m; printf(\"请输入一个十进制数: \"); scanf(\"%d\ printf(\"需要转成的进制m:\"); scanf(\"%d\ Conversion(n,m); } 因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- xiaozhentang.com 版权所有 湘ICP备2023022495号-4
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务