首页 数据结构栈和队列实验报告

数据结构栈和队列实验报告

举报
开通vip

数据结构栈和队列实验报告-----WORD格式--可编写--专业资料-----南京信息工程大学实验(实习)报告实验(实习)名称栈和队列日期得分指导老师崔萌萌系计算机系专业软件工程年级2016班次(1)姓名学号一、实验目的1、学习栈的序次储存和实现,会进行栈的基本操作2、掌握递归3、学习队列的序次储存、链式储存,会进行队列的基本操作4、掌握循环队列的表示和基本操作二、实验内容1、用栈解决以下问题:1)对于输入的任意一个非负十进制数,显示输出与其等值的八进制数,写出程序。2)表达式求值,写出程序。2、用递...

数据结构栈和队列实验报告
-----WORD格式--可编写--专业资料-----南京信息工程大学实验(实习) 报告 软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载 实验(实习)名称栈和队列日期得分指导老师崔萌萌系计算机系专业软件工程年级2016班次(1)姓名学号一、实验目的1、学习栈的序次储存和实现,会进行栈的基本操作2、掌握递归3、学习队列的序次储存、链式储存,会进行队列的基本操作4、掌握循环队列的 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 示和基本操作二、实验内容1、用栈解决以下问 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 :1)对于输入的任意一个非负十进制数,显示输出与其等值的八进制数,写出程序。2)表达式求值,写出程序。2、用递归写出以下程序:1)求n!。2)汉诺塔程序,并截图显示3、4、5个盘子的挪动步骤,写出挪动6个盘子的挪动次数。--完好版学习资料分享---------WORD格式--可编写--专业资料-----3、编程实现:(1)创办队列,将asdfghjkl挨次入队。(2)将队列asdfghjkl挨次出队。4、编程实现创办一个最多6个元素的循环队列、将ABCDEF挨次入队,判断循环队列能否队满。三、实验步骤栈的使用1.1用栈实现进制的变换:代码以下:#include#includeusingnamespacestd;intmain(){stacks;//栈s;intn,radix;printf("请输入要变换的十进制非负整数:");scanf("%d",&n);printf("请输入目标进制:");scanf("%d",&radix);printf("变换为%d进制:",radix);while(n){s.push(n%radix);n/=radix;--完好版学习资料分享---------WORD格式--可编写--专业资料-----}while(!s.empty()){//非空printf("%d",s.top());s.pop();}printf("\n");return0;}运转结果以下:2.2求表达式的值代码以下:#include#include#include#include#definetrue1#definefalse0#defineOPSETSIZE8typedefintStatus;unsignedcharPrior[8][8]={//运算符优先级表'+''-''*''/''('')''#''^'/*'+'*/'>','>','<','<','<','>','>','<',/*'-'*/'>','>','<','<','<','>','>','<',/*'*'*/'>','>','>','>','<','>','>','<',/*'/'*/'>','>','>','>','<','>','>','<',/*'('*/'<','<','<','<','<','=','','<',/*')'*/'>','>','>','>','','>','>','>',/*'#'*/'<','<','<','<','<','','=','<',/*'^'*/'>','>','>','>','<','>','>','>'};--完好版学习资料分享---------WORD格式--可编写--专业资料-----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(SC));p->c=c;p->next=s;returnp;}SF*Push(SF*s,floatf)//SF种类的指针Push,返回p{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{--完好版学习资料分享---------WORD格式--可编写--专业资料-----SF*q=s;s=s->next;free(q);returns;}floatOperate(floata,unsignedchartheta,floatb)//计算函数Operate{switch(theta){case'+':returna+b;case'-':returna-b;case'*':returna*b;case'/':returna/b;case'^':returnpow(a,b);default:return0;}}charOPSET[OPSETSIZE]={'+','-','*','/','(',')','#','^'};StatusIn(charTest,char*TestOp){intFind=false;for(inti=0;ic!='#'){if(!In(*c,OPSET)){Dr[0]=*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'<'://栈顶元素优先级低OPTR=Push(OPTR,*c);c++;break;case'='://去括号并接收下一字符OPTR=Pop(OPTR);c++;break;case'>'://退栈并将运算结果入栈theta=OPTR->c;OPTR=Pop(OPTR);--完好版学习资料分享---------WORD格式--可编写--专业资料-----b=OPND->f;OPND=Pop(OPND);a=OPND->f;OPND=Pop(OPND);OPND=Push(OPND,Operate(a,theta,b));break;}}}returnOPND->f;}intmain(){chars[128];printf("请输入表达式:\n");scanf("%s",s);printf("该表达式的值为:\n");printf("%s=",s);printf("%g\n",EvaluateExpression(s));//%greturn0;}运转结果以下:2.递归的使用2.1求n!:代码以下:#includeintFact(intn){if(0==n)return1;elsereturnn*Fact(n-1);}--完好版学习资料分享---------WORD格式--可编写--专业资料-----intmain(){intn;scanf("%d",&n);printf("%d的阶乘为:",n);printf("%d",Fact(n));return0;}运转结果以下:2.2哈诺塔:代码以下:#includeintHanoi(intn,chara,charb,charc){if(1==n)printf("%c-%d->%c",a,1,c);else{Hanoi(n-1,a,c,b);printf("%c-%d->%c",a,n,c);Hanoi(n-1,b,a,c);}return0;}intmain(){intn;chara='A',b='B',c='C';printf("请输入汉诺塔的层数:");scanf("%d",&n);Hanoi(n,a,b,c);--完好版学习资料分享---------WORD格式--可编写--专业资料-----printf("\n");return0;}运转结果以下:n=3时n=4时n=5时n=6时由3,4,5可推知n层哈诺塔需要挪动2n1次;n=6时,需要挪动63次。队列的出队和入队代码以下:#include#include#include#defineOK1#defineERROR0#defineOVERFLOW-1typedefcharElemType;//defaultElemType=chartypedefintStatus;//ReturnValue/*队列节点的声明*/typedefstructnode{ElemTypedata;structnode*next;}QNode,*QuePtr;/*链式队列*/typedefstruct{QuePtrfront;//QuePtrrear;//队头指针队尾指针,指向队尾元素的下一位--完好版学习资料分享---------WORD格式--可编写--专业资料-----}LinkQueue;StatusInitQueue(LinkQueue*q)//{初始化队列q->front=q->rear=(QuePtr)malloc(sizeof(QNode));q->front->next=NULL;returnOK;}StatusEnQueue(LinkQueue*q,ElemTypee)//将元素e入队列{QuePtrtemp=(QuePtr)malloc(sizeof(QNode));//if(!temp)returnOVERFLOW;创办新结点temp->data=e;//temp->next=NULL;//初始化新结点的数据为e队列只好从队尾插入因此下一个结点初始化为NULLq->rear->next=temp;q->rear=temp;//将指向队尾的指针指向新结点returnOK;}StatusCreateQueue(LinkQueue*q/*,chara[]*/)//{创办队列InitQueue(q);intk;printf("请输入队列元素个数:");scanf("%d",&k);printf("请输入队列元素for(inti=0;ifront->next;//初始化temp为要出队的结点的指针if(q->front->next==q->rear)q->rear=q->front;*e=temp->data;//将出队的数据元素存入*eq->front->next=temp->next;//下一个结点成为队头free(temp);//删除要出队的结点returnOK;}boolIsEmpty(LinkQueue*q)//{判断队列能否为空if(q->front==q->rear)returntrue;returnfalse;}intGetQueueLength(LinkQueue*q)//{返回队列的长度QuePtrtemp=q->front;inti=0;while(temp!=q->rear){++i;temp=temp->next;}returni;}StatusPrint(LinkQueue*q)//{打印队列的元素if(q->front==q->rear)returnERROR;QuePtrtemp=q->front->next;while(temp!=q->rear){printf("%c",temp->data);temp=temp->next;}printf("%c",temp->data);printf("\n");returnOK;}intmain(){//chara[]={'a','s','d','f','g','h','j','k','1'};LinkQueueq;CreateQueue(&q);chartop;--完好版学习资料分享---------WORD格式--可编写--专业资料-----intlen=GetQueueLength(&q);chark;printf("将队列中的全部元素出队:\n");for(inti=0;i#include#include#defineMAXQSIZE7#defineOK1#defineERROR0typedefcharQElemType;typedefintStatus;//ReturnValue实现循环队列typedefstruct{QElemType*base;intrear;//intfront;//}Queue;队尾指针队头指针StatusInitQueue(Queue*Q){Q->base=(QElemType*)malloc(MAXQSIZE*sizeof(QElemType));if(Q->base==NULL)returnERROR;Q->front=Q->rear=0;returnOK;}--完好版学习资料分享---------WORD格式--可编写--专业资料-----StatusEnQueue(Queue*PtrQ,QElemTypeitem){if((PtrQ->rear+1)%MAXQSIZE==PtrQ->front){printf("队列满.\n");returnERROR;}PtrQ->rear=(PtrQ->rear+1)%MAXQSIZE;PtrQ->base[PtrQ->rear]=item;}删除队头元素并把队头元素返回QElemTypeDeQueue(Queue*PtrQ){if(PtrQ->front==PtrQ->rear){printf("队列空.\n");return-1;}PtrQ->front=(PtrQ->front+1)%MAXQSIZE;returnPtrQ->base[PtrQ->front];}打印队列元素Statusprint(Queue*PtrQ){inti=PtrQ->front;if(PtrQ->front==PtrQ->rear){printf("队列空.");returnERROR;}printf("队列存在的元素以下:");while(i!=PtrQ->rear){printf("%c",PtrQ->base[i+1]);i++;i=i%MAXQSIZE;}printf("\n");returnOK;}intmain(){chara[]="ABCDEF";QueueQ;--完好版学习资料分享---------WORD格式--可编写--专业资料-----InitQueue(&Q);printf("入队列:\n");for(inti=0;i
本文档为【数据结构栈和队列实验报告】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
小桥流水
从事母婴护理工作多年,经验丰富。
格式:doc
大小:443KB
软件:Word
页数:18
分类:
上传时间:2023-01-17
浏览量:2