数据结构栈和队列实验报告(共17页).doc
《数据结构栈和队列实验报告(共17页).doc》由会员分享,可在线阅读,更多相关《数据结构栈和队列实验报告(共17页).doc(17页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上南京信息工程大学 实验(实习)报告实验(实习)名称 栈和队列 日期 2017.11.8 得分 指导老师 崔萌萌 系 计算机系 专业 软件工程 年级 2016 班次 (1) 姓名 学号 一、实验目的1、学习栈的顺序存储和实现,会进行栈的基本操作2、掌握递归3、学习队列的顺序存储、链式存储,会进行队列的基本操作4、掌握循环队列的表示和基本操作二、实验内容1、用栈解决以下问题:(1)对于输入的任意一个非负十进制数,显示输出与其等值的八进制数,写出程序。(2)表达式求值,写出程序。2、用递归写出以下程序:(1)求n!。(2)汉诺塔程序,并截图显示3、4、5个盘子的移动步骤,写
2、出移动6个盘子的移动次数。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); prin
3、tf(转换为%d进制: ,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;
5、return p; SF* 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, floa
6、t b) /计算函数Operate 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
7、 = true; return 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 :
8、 /退栈并将运算结果入栈 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,EvaluateExpression(s); / %g r
9、eturn 0; 运行结果如下: 2.递归的使用 2.1 求n!: 代码如下: #include int Fact(int n) if(0 = n) return 1; else return n*Fact(n-1);int main() int n; scanf(%d,&n); printf(%d的阶乘为:,n); printf(%d,Fact(n); return 0;运行结果如下:2.2 哈诺塔:代码如下: #include int Hanoi(int n,char a,char b,char c) if(1 = n) printf(%c-%d-%c ,a,1,c); else Hano
10、i(n-1,a,c,b); printf(%c-%d-%c ,a,n,c); Hanoi(n-1,b,a,c); return 0;int main() int n; char a=A,b=B,c=C; printf(请输入汉诺塔的层数: ); scanf(%d,&n); Hanoi(n,a,b,c); printf(n); return 0;运行结果如下:n=3时n=4时n=5时n=6时由3,4,5可推知n层哈诺塔需要移动 次;n=6时,需要移动63次。3. 队列的出队和入队代码如下: #include #include #include #define OK 1#define ERROR
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 队列 实验 报告 17
限制150内