数据结构栈和队列实验报告[17页]

上传人:哈**** 文档编号:138595427 上传时间:2020-07-16 格式:DOC 页数:17 大小:988.50KB
返回 下载 相关 举报
数据结构栈和队列实验报告[17页]_第1页
第1页 / 共17页
数据结构栈和队列实验报告[17页]_第2页
第2页 / 共17页
数据结构栈和队列实验报告[17页]_第3页
第3页 / 共17页
数据结构栈和队列实验报告[17页]_第4页
第4页 / 共17页
数据结构栈和队列实验报告[17页]_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《数据结构栈和队列实验报告[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

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号