当前位置:首页 > 顺序栈实现数值转换
算法与数据结构实验报告
实验二
实验名称: 顺序栈实现数值转换 姓名: 学号:
专业: 计算机科学与技术 班级: 指导教师: 日期: 2013年11月2日
一、 实验目的
本实验利用顺序栈的基本操作实现十进制和其他任意进制数的任意转换输出,并通过该实验理解和掌握线性表的特点。 二、 实验内容与实验步骤 内容:1、构建顺序栈或是链式栈。
2、利用构建好的栈存储进制转换结果,并进行输出。
3、实现十进制和任意进制转换(二进制、八进制、十六进制)
步骤:栈(进制转换) 1 构建顺序栈
2 输入一个要转换成8进制的数n;
3 输入的数n通过转换后输出转换成八进制的值; 4 定义一个参数m表示要转换的进制数;
5 输入的数n通过转换后输出转换成m进制的值; 6 运行结果
三、 实验环境
操作系统winXP、开发平台:Microsoft Visual C++6.0
四、 实验过程与分析
调试过程中,虽然没有出现错误,但是在运行的时候却出现了问题,导
致每个运算都没有结果,为一连串的数字,在不断地检查程序后,发现在主函数中,没有设定好实参,改变这个实参后程序就可以运行成功了。
五、 实验结论
(1348)= (2504)
10
8
(11)10 = (B)16
(8)10 = (1000)2
六、 附录
带注释的源程序
#define STACK_INIT_SIZE 100 //存储空间初始分配量 #define STACKINCREMENT 10 //存储空间分配增量 #define ERROR 0 #define OVERFLOW -2 #include
SElemType *base;// 在栈构造之前和销毁之后,base 的值为NULL SElemType *top ;// 栈顶指针
int StackSize; //当前已分配的存储空间,以元素为单位 }SqStack;
2.初始化栈
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; }
3. 输入栈
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; }
4.输出栈
int Pop(SqStack *s,SElemType *e) {
if (s->top==s->base) return ERROR; s->top=s->top-1; *e = *s->top; }
5.判空栈
int StackEmpty(SqStack s) {
if (s.top ==s.base) {
return 1; }
else {
return 0; } }
6.实现十进制和任意进制转换
void Conversion(int N,int m) {
SElemType e; SqStack s;
InitStack(&s); while(N){
Push(&s,N%m); N= N/m; }
printf(\转换后的m进制数为:\ while(StackEmpty(s)!=1) {
Pop(&s,&e); if(e>=10) {
printf(\ }
else printf(\ printf(\ } }
7.通过main函数调用以上的函数 void main() {
int n,m;
printf(\请输入一个十进制数和m的值:\ scanf(\ Conversion(n,m); }
共分享92篇相关文档