资源描述:
《数据结构栈和队列实验报告》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、南京信息工程大学实验(实习)报告实验(实习)名称栈和队列日期2017.11.8得分指导老师崔萌萌系计算机系专业软件工程年级2016班次(1)姓名学号一、实验目的1、学习栈的顺序存储和实现,会进行栈的基本操作2、掌握递归3、学习队列的顺序存储、链式存储,会进行队列的基本操作4、掌握循环队列的表示和基本操作二、实验内容1、用栈解决以下问题:(1)对于输入的任意一个非负十进制数,显示输出与其等值的八进制数,写出程序。(2)表达式求值,写出程序。2、用递归写出以下程序:(1)求n!。(2)汉诺塔程序,并截图显示3、4、5个盘子的移动步骤,写出移动6个盘子的移动次数。第17页共17页3、
2、编程实现:(1)创建队列,将asdfghjkl依次入队。(2)将队列asdfghjkl依次出队。4、编程实现创建一个最多6个元素的循环队列、将ABCDEF依次入队,判断循环队列是否队满。三、实验步骤1.栈的使用1.1用栈实现进制的转换:代码如下:#include#includeusingnamespacestd;intmain(){stacks;//栈s;intn,radix;printf("请输入要转换的十进制非负整数:");scanf("%d",&n);printf("请输入目标进制:");scanf("%d",&radix);第1
3、7页共17页printf("转换为%d进制:",radix);while(n){s.push(n%radix);n/=radix;}while(!s.empty()){//非空printf("%d",s.top());s.pop();}printf("");return0;}运行结果如下:2.2求表达式的值代码如下:#include#include#include#include#definetrue1#definefalse0#defineOPSETSIZE8typedefintStatus;第17
4、页共17页unsignedcharPrior[8][8]={//运算符优先级表//'+''-''*''/''('')''#''^'/*'+'*/'>','>','<','<','<','>','>','<',/*'-'*/'>','>','<','<','<','>','>','<',/*'*'*/'>','>','>','>','<','>','>','<',/*'/'*/'>','>','>','>','<','>','>','<',/*'('*/'<','<','<','<','<','=','','<',/*')'*/'>','>','>','>','','>','>'
5、,'>',/*'#'*/'<','<','<','<','<','','=','<',/*'^'*/'>','>','>','>','<','>','>','>'};typedefstructStackChar{//StackChar类型的结点SCcharc;structStackChar*next;}SC;typedefstructStackFloat{//StackFloat类型的结点SFfloatf;structStackFloat*next;}SF;SC*Push(SC*s,charc)//SC类型的指针Push,返回p{SC*p=(SC*)malloc(sizeof(
6、SC));p->c=c;p->next=s;returnp;}SF*Push(SF*s,floatf)//SF类型的指针Push,返回p{第17页共17页SF*p=(SF*)malloc(sizeof(SF));p->f=f;p->next=s;returnp;}SC*Pop(SC*s)//SC类型的指针Pop{SC*q=s;s=s->next;free(q);returns;}SF*Pop(SF*s)//SF类型的指针Pop{SF*q=s;s=s->next;free(q);returns;}floatOperate(floata,unsignedchartheta,floa
7、tb)//计算函数Operate{switch(theta){case'+':returna+b;case'-':returna-b;case'*':returna*b;case'/':returna/b;case'^':returnpow(a,b);default:return0;第17页共17页}}charOPSET[OPSETSIZE]={'+','-','*','/','(',')','#','^'};StatusIn(charTest,char*TestOp){intFind=fa