《数据结构栈和队列实验报告[17页]》由会员分享,可在线阅读,更多相关《数据结构栈和队列实验报告[17页](17页珍藏版)》请在金锄头文库上搜索。
1、南京信息工程大学 实验(实习)报告实验(实习)名称 栈和队列 日期 2017.11.8 得分 指导老师 崔萌萌 系 计算机系 专业 软件工程 年级 2016 班次 (1) 姓名 学号 一、实验目的1、学习栈的顺序存储和实现,会进行栈的基本操作2、掌握递归3、学习队列的顺序存储、链式存储,会进行队列的基本操作4、掌握循环队列的表示和基本操作二、实验内容1、用栈解决以下问题:(1)对于输入的任意一个非负十进制数,显示输出与其等值的八进制数,写出程序。(2)表达式求值,写出程序。2、用递归写出以下程序:(1)求n!。(2)汉诺塔程序,并截图显示3、4、5个盘子的移动步骤,写出移动6个盘子的移动次数。
2、3、编程实现:(1)创建队列,将asdfghjkl依次入队。(2)将队列asdfghjkl依次出队。4、编程实现创建一个最多6个元素的循环队列、将ABCDEF依次入队,判断循环队列是否队满。三、实验步骤 1.栈的使用 1.1 用栈实现进制的转换: 代码如下: #include #include using namespace std;int main() stack s; /栈s; int n,radix; printf(请输入要转换的十进制非负整数: ); scanf(%d,&n); printf(请输入目标进制: ); scanf(%d,&radix); printf(转换为%d进制: ,
3、radix); while(n) s.push(n%radix); n /= radix; while(!s.empty() /非空 printf(%d,s.top(); s.pop(); printf(n); return 0;运行结果如下: 2.2 求表达式的值 代码如下: #include #include #include #include #define true 1 #define false 0 #define OPSETSIZE 8 typedef int Status; unsigned char Prior88 = /运算符优先级表 / + - * / ( ) # /*+*
4、/ , /*(*/ ,=, , , /*#*/ , ,=, ; typedef struct StackChar /StackChar类型的结点SC char c; struct StackChar *next; SC;typedef struct StackFloat /StackFloat类型的结点SF float f; struct StackFloat *next; SF; SC* Push(SC* s,char c) /SC类型的指针Push,返回p SC* p = (SC* )malloc(sizeof(SC); p-c = c; p-next = s; return p; SF*
5、 Push(SF* s,float f) /SF类型的指针Push,返回p SF* p = (SF* )malloc(sizeof(SF); p-f = f; p-next = s; return p; SC* Pop(SC* s) /SC类型的指针Pop SC* q = s; s = s-next; free(q); return s; SF* Pop(SF* s) /SF类型的指针Pop SF* q = s; s = s-next; free(q); return s; float Operate(float a,unsigned char theta, float b) /计算函数Ope
6、rate switch(theta) case +: return a+b; case -: return a-b; case *: return a*b; case /: return a/b; case : return pow(a,b); default : return 0; char OPSETOPSETSIZE = +,-,*,/,(,),#,; Status In(char Test,char *TestOp) int Find = false; for (int i=0; i OPSETSIZE; i+) if(Test = TestOpi) Find = true; retu
7、rn Find; Status ReturnOpOrd(char op,char *TestOp) for(int i=0; ic != #) if (!In(*c, OPSET) Dr0 = *c; strcat(TempData,Dr); /字符串连接函数 c+; if (In(*c, OPSET) Data = atof(TempData); /字符串转换函数(double) OPND = Push(OPND, Data); strcpy(TempData,0); else /不是运算符则进栈 switch (precede(OPTR-c, *c) case : /退栈并将运算结果入栈 theta = OPTR-c; OPTR = Pop(OPTR); b = OPND-f; OPND = Pop(OPND); a = OPND-f; OPND = Pop(OPND); OPND = Push(OPND, Operate(a, theta, b); break; return OPND-f; int main() char s128; printf(请输入表达式: n); scanf(%s,s); printf(该表达式的值为: n); printf(%s = ,s); printf(%gn,EvaluateExpre