下载
加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 数据结构--栈与队列的应用

数据结构--栈与队列的应用.doc

数据结构--栈与队列的应用

林子浩
2017-10-06 0人阅读 举报 0 0 暂无简介

简介:本文档为《数据结构--栈与队列的应用doc》,可适用于IT/计算机领域

数据结构栈与队列的应用计算机科学与技术学院实验报告(~学年度第一学期)课程名称数据结构实验名称栈与队列的应用姓学号名专计算机科学班级业与技术地教师点实验报告实验报告实验目的及要求)、设计目标(问题描述)第一题:栈的应用考核内容:•利用栈的结构解决实际问题。•题目:设单链表中存放着n个字符试编写算法判断该字符串是否有中心对称关系如aba,xyzzyx都是中序对称的字符串。•算法分析分析时间复杂度和空间复杂度第二题:队列的算法考核内容:•实现队列的基本运算。•题目:假设以带头结点的循环链表表示队列并且只设一个指针指向队尾(注意不设头指针)试编写相应的置空队、入队、出队的算法。设队列中存放着n个字符试编写算法判断该字符串是否有中心对称关系如aba,xyzzyx都是中序对称的字符串。•各函数的说明如下:•置空set(queue)将队列queue置成空队列•入队enqueue(queuex)将元素x插入队列queue的尾部•出队dequeue(queue)删除队列queue的队头元素函数返回被删除元素的值•算法分析分析时间复杂度和空间复杂度)、功能设计要求栈考核要求:•利用栈的结构和基本运算编程实现题目要求的算法•数据结构及算法基于教材书上PP的顺序栈Stack的定义和教材书上PP的链栈LinkedStack的定义并在此基础上补充相应函数以实现问题要求的功能•栈的基本运算说明如下:•置空set(stack)将栈stack置成空栈•判栈空isempty(stack)若栈stack为空函数返回否则返回•入栈push(stackx)在栈stack的顶部插入元素x实验报告•出栈pop(stack)删除栈stack的顶部元素并返回被删除元素的值•要求分别采用顺序栈和链式栈两种不同的方式实现。•说明数据输入的要求、输出的形式•提供测试数据及输出结果•源程序带有基本注释队列考核要求:•编程实现题目要求的算法•数据结构及算法基于教材书上PP的顺序队列Queue的定义和教材书上PP的链队列LinkedQueue的定义并在此基础上补充相应函数以实现问题要求的功能•要求分别采用顺序队和链队两种不同的方式实现。•说明数据输入的要求、输出的形式•提供测试数据及输出结果•源程序带有基本注释二:实验步骤思考流程图和主程序在VC平台上进行编写,调试,直至运行成功且运行结果正确思考实验中遇到的问题,总结分析,完成实验报告实验内容)、设计概述(a)开发平台:VC(b)参考书籍:《数据结构C语言描述》(c)开发周期:天(构思天雏形天、修改天、再修改天、完善天))、处理流程(a)画出功能结构图栈的应用:实验报告栈stack置空判栈空入栈出栈删除栈setisemptypushpopstack的(stack)(stack)(stack)(stack顶部元将栈x)素stack置成空栈队列的算法:队列queue置空入队出队删除队列判栈空setenqueuedequeueisemptyqueue的(queue)x(queue)(stack)(queue队头元素)x)(b)画出主要数据结构的类图实验报告classstackprivate:数据成inttop栈顶指针员T*elements存放栈元素数组intMaxSize栈空间的最大尺寸public:成员函Stack(intMaxSize=defaultsize)创建栈数~Stack(void){deleteelements}释放栈空间进栈。没满则item插入栈顶否则不入栈返回intPush(constTitem)出栈。非空则返回栈顶元素的值。否则不出栈返回空TPop(void)TGetTop(void)voidSet(void){top=}boolIsEmpty(void)const{returntop==}判断栈是否为空boolIsFull(void)const{returntop==MaxSize}判断栈是否为满voidcompare()判断字符串是否对称classNodeprivate:数据成Node<T>*nextnext为指向下一结点的指针员public:成员函Tdata定义数据域数构造函数和析构函数Node(constTitem,Node<T>*ptr=)~Node()获取下一结点指针的方法Node<T>*NextNode()插入和删除结点的方法voidInsertAfter(Node<T>*p)Node<T>*DeleteAfter()实验报告classLinkedListprivate:数据成Node<T>*front,*rear,*prevPtr,*currPtr员intsize,positionNode<T>*GetNode(constTitem,Node<T>*ptr)voidFreeNode(Node<T>*p)public:成员函LinkedList()构造函数域析构函数数~LinkedList()intSize()返回链表中结点个数intisempty()判断链表是否为空intNextNode()获取下一个结点intSetPosition(int)重定位voidInsertAt(constTitem)当前位置插入classQueuevoidInsertAfter(constTitem)当前结点后插入数据成private:intrear,front队尾、队头指针voidDeleteAt()当前位置删除员T*elements存放队列元素的数组voidDeleteAfter()当前结点后删除intMaxSizeTGetData()得到数据域的值intcount用来记录入队成员个数voidClear()清空链表成员函public:创建队列空间生成一个空队Queue(int)数classLinkedstack释放队列空间private:数据成~Queue(){deleteelements}LinkedList<T>*stack存放栈元素的链表对象员入队。若队列未满则item插入队尾返回否则不做public:成员函classLinkedQueue入队操作返回构造函数和析构函数数private:数据成intEnQueue(constTitem)出队。若队列非空在返回对头元Linkedstack()linkedlist<T>*queue存放队列元素的链表对象员素的值否则返回~Linkedstack()public:成员函TDeQueue()操作栈的方法linkedqueue()创建链表队列空间生成一个空队数voidset(){front=rear=}队列置空voidPush(constTitem)~linkedqueue()释放队列空间intIsEmpty(){returnfront==rear}判断队列是否为空TPop()voidenqueue(constTitem)intIsFull(){returnfront==(rear)MaxSize}判断队列是否intisempty()入队。若队列未满则item插入队尾返回否则不为满做入队操作返回Tdequeue()出队Tfront()实验报告(c)主要函数的程序流程图栈的应用:开始开始栈中元素出栈从i=到i=j开始依次比较si与sji是否均相等是否该字符序列中心不对该字符序列中心对称返回称返回开始队列中元素出队实验报告从i=到i=j开始依次比较si与sji是否均相等是否该字符序列中心对称返回该字符序列不是中心对称返回链队列与队列相似(d)写出数据测试表(输入数据预期结果)(四个程序数据测试表相同如下。)序输入数预期结果号据是中心对称序weew列asd不是中心对称序列erty不是中心对称序列实验结果栈:链栈:实验报告队列:实验总结分析)、时间和空间分析时间复杂度:T(n)=n空间复杂度:S(n)=n)、程序的优点完成了题目的要求比较字符串是否中心对称且运用了栈队列及其链表式结构程序结构清晰明了。)、遇到的问题及如何解决开始的时候我将比较函数compare()写在函数main()后面且之前未声明,导致报错将函数compare()的定义移到函数main()之前后错误解决)、存在的缺陷、改进设想缺陷:四个程序的函数结构基本相同设想:其结构可以多一些变化)、自我评价、经验体会等实验报告通过这次实验我详细了解了栈和队列,体会了它们的特点与用法比如:栈与队列有很多方面存在相似之处而最显著的不同点是:栈是后进先出,而队列是先进先出其原因是栈只有一个栈顶指针,而队列有队头,队尾两个指针通过对链表栈和链队列的使用,我对链表也有了更进一步的认识附录(源程序清单要求含有至少的源码附有注释)栈:Stackh#include<iostreamh>template<classT>#definedefaultsizeclassStack{栈的类定义private:inttop栈顶指针T*elements存放栈元素的数组intMaxSize栈空间的最大尺寸public:Stack(intMaxSize=defaultsize)创建栈空间,生成一个空栈~Stack(void){deleteelements}释放栈空间intPush(constTitem)进栈TPop(void)出栈TGetTop(void)读栈顶voidMakeEmpty(void)const{top=}置栈为空栈boolIsEmpty(void)const{returnbool(top==)}判断栈是否为空boolIsFull(void)const{returnbool(top==MaxSize)}判断是否已满voidcompare(void)}Stackcpp#include<iostreamh>#include"Stackh"template<classT>Stack<T>::Stack(ints)实验报告{MaxSize=selements=newTMaxSizetop=}template<classT>进栈intStack<T>::Push(constTitem){if(!IsFull()){elementstop=itemreturn}elsereturn}template<classT>入栈TStack<T>::Pop(void){if(!IsEmpty())returnelementstopelsereturn}template<classT>读栈顶元素TStack<T>::GetTop(void){if(!IsEmpty())returnelementstopelsereturn}maincpp#include<iostreamh>#include"Stackcpp"template<classT>intcompare(Stack<T>q)定义判断是否对称的函数{charsinti,f=,j=while(qGetTop()!=)判断栈是否为空{sj=qPop()元素出栈并将其值传入数组Sj}for(i=i<ji)实验报告{if(si!=sji)判断字符序列是否有不对称的元素存在f=}if(f==)returnelsereturn}voidmain(){Stack<char>p()intn,icharmcout<<"请输入你要输入的字符的个数:"<<endlcin>>n输入字符个数cout<<"请输入字符:"<<endlfor(i=i<ni){cin>>m输入字符pPush(m)入栈}if(compare(p))cout<<"是中心对称序列"<<endlelsecout<<"不是中心对称序列"<<endl}链栈:Nodehtemplate<classT>classNode{private:Node<T>*nextpublic:TdataNode(constTitem,Node<T>*ptr){ptr=}~Node(void)Node<T>*NextNode(void)实验报告voidInsertAfter(Node<T>*p)Node<T>*DeleteAfter(void)}Nodecpp#include"Nodeh"#include<iostreamh>结点类构造函数template<classT>Node<T>::Node(constTitem,Node<T>*ptr):data(item),next(ptr){}析构函数template<classT>Node<T>::~Node(void){}获取下一结点的指针template<classT>Node<T>*Node<T>::NextNode(void){returnnext}在当前结点后插入一个结点template<classT>voidNode<T>::InsertAfter(Node<T>*p){将当前结点的后继结点链接到结点p之后p>next=next将结点p作为当前结点的后继结点next=p}删除当前结点的后继结点template<classT>Node<T>*Node<T>::DeleteAfter(void){Node<T>*ptr=nextif(ptr==)returnnext=ptr>nextreturnptr返回指向被删除结点的指针}LinkedListh#include"Nodecpp"template<classT>classLinkedList实验报告{private:Node<T>*front,*rear用于访问数据、插入和删除结点的指针Node<T>*prevPtr,*currPtrintsize表中当前结点位置计数intposition申请及释放结点空间的函数Node<T>*GetNode(constTitem,Node<T>*ptr=)voidFreeNode(Node<T>*p)public:LinkedList(void)~LinkedList(void)重载的赋值运算符LinkedList<T>operator=(constLinkedList<T>orgList)intSize(void)const取表的大小判断表是否为空boolIsEmpty(void)const重定位当前结点intNextNode(void)intSetPosition(intpos)intGetPosition(void)const插入结点的函数voidInsertAt(constTitem)voidInsertAfter(constTitem)删除结点的函数voidDeleteAt(void)voidDeleteAfter(void)修改和访问数据的函数TGetData(void)constvoidSetData(constTitem)清空链表的函数voidClear(void)}LinkedListcpp#include<iostreamh>#include"LinkedListh"#include<stdlibh>实验报告template<classT>Node<T>*LinkedList<T>::GetNode(constTitem,Node<T>*ptr){Node<T>*newNode=newNode<T>(item,ptr)if(!newNode()){cerr<<"GetNode:Memoryallocationfailed!"<<endlreturn}returnnewNode}template<classT>voidLinkedList<T>::FreeNode(Node<T>*ptr){if(!ptr){cerr<<"FreeNode:invalidnodepointer"<<endlreturn}deleteptr}template<classT>LinkedList<T>::LinkedList(void):front(),rear(),prevPtr(),currPtr(),size(),postion(){}template<classT>LinkedList<T>::~LinkedList(void){Clear()}链表类中重载赋值运算符的函数template<classT>LinkedList<T>LinkedList<T>::operator=(constLinkedList<T>orgList){Node<T>*p=orgListfront清空本链表Clear()将表orgList中的元素复制到本表while(p){实验报告InsertAfter(p>data)p=p>NextNode()}设置当前结点SetPosition(orgListposition)return*this}template<classT>intLinkedList<T>::Size(void)const{returnsize}template<classT>boolLinkedList<T>::IsEmpty(void)const{returnsizefalsetrue}链表类中将后继结点设置为当前结点的函数template<classT>intLinkedList<T>::NextNode(void){若当前结点存在则将其后继结点设置为当前结点if(position>=position<size){positionprevPtr=currPtrcurrPtr=currPtr>NextNode()}else{否则将当前位置设为表尾后position=size}returnposition返回新位置}链表类中重置当前结点位置的函数template<classT>intLinkedList<T>::SetPosition(intpos){if(!size)return实验报告若位置越界则修正位置值if(pos<||pos>size){cerr<<"positionerror"<<endlreturn}寻找对应结点prevPtr=currPtr=frontposition=for(intk=k<posk){positionprevPtr=currPtrcurrPtr=currPtr>NextNode()}返回当前结点位置returnposition}template<classT>intLinkedList<T>::GetPosition(void)const{returnpostion}链表类中在当前结点处插入新结点的函数template<classT>voidLinkedList<T>::InsertAt(constTitem){Node<T>*newNodeif(!size){在空表中插入newNode=GetNode(item,front)front=rear=newNodeposition=}elseif(!prevPtr){在表头结点处插入实验报告newNode=GetNode(item,front)front=newNode}else{在链表的中间位置插入newNode=GetNode(item,currPtr)prevPtr>InsertAfter(newNode)}增加链表的大小size新插入的结点为当前结点currPtr=newNode}链表类中在当前结点后插入新结点的函数template<classT>voidLinkedList<T>::InsertAfter(constTitem){Node<T>*newNodeif(!size){在空表中插入newNode=GetNode(item)front=rear=newNodeposition=}elseif(currPtr==rear||!currPtr){在表尾结点后插入newNode=GetNode(item)rear>InsertAfter(newNode)prevPtr=rearrear=newNodeposition=size}else{在链表的中间位置插入newNode=GetNode(item,currPtr>NextNode())currPtr>InsertAfter(newNode)prevPtr=currPtr实验报告position}sizecurrPtr=newNode}链表类中删除当前结点的函数template<classT>voidLinkedList<T>::DeleteAt(void){Node<T>*oldNode若表为空或已到表尾之后则给出错误提示并返回if(!currPtr){cerr<<"DeleteAt:currentpositionisinvalid!"<<endlreturn}if(!prevPtr){删除的是表头结点oldNode=frontfront=currPtr>NextNode()}else{删除的是表中结点oldNode=prevPtr>DeleteAfter()}if(oldNode==rear){删除的是表尾结点则修改表尾指针和当前结点位置值rear=prevPtrposition}后继结点作为新的当前结点currPtr=oldNode>NextNode()FreeNode(oldNode)释放原当前结点size链表大小减}链表类中删除当前结点后继的函数template<classT>voidLinkedList<T>::DeleteAfter(void)实验报告{Node<T>*oldNode若无当前结点或已到表尾,则给出错误提示并返回if(!currPtr||currPtr==rear){cerr<<"DeleteAfter:currentpositionisinvalid!"<<endlreturn}保存被删除结点的指针并从链表中删除该结点oldNode=currPtr>DeleteAfter()if(oldNode==rear){删除的是表尾结点rear=currPtr}释放被删除结点FreeNode(oldNode)链表大小减size}链表类中获取当前结点数据的函数template<classT>TLinkedList<T>::GetData(void)const{若表为空或已经到达表尾之后则出错if(!size||!currPtr){cerr<<"Data:currentnodenotexist!"<<endlexit()}returncurrPtr>data}链表类中修改当前结点数据的函数template<classT>voidLinkedList<T>::SetData(constTitem){若表为空或已经到达表尾之后则出错if(!size||!currPtr){cerr<<"Data:currentnodenotexist!"<<endlexit()}currPtr>data=item修改当前结点的值}实验报告链表类中清空链表的函数template<classT>voidLinkedList<T>::Clear(void){Node<T>*currNode=front,*nextNodewhile(currNode){保存后继结点指针nextNode=currNode>NextNode()FreeNode(currNode)currNode=nextNode}修改链表的值front=rear=prevPtr=currPtr=size=position=}LinkedStackh#ifdefLINKEDLISTH#defineLINKEDLISTH#include"LinkedListh"#include"Stackh"template<classT>classLinkedStack{private:存放栈元素的链表对象LinkedList<T>*Stackpublic:构造函数LinkedStack(void)操作栈的方法voidPush(constTitem)TPop(void)TTop(void)voidClear(void)查询栈状态的方法intSize(void)constboolIsEmpty(void)constboolIssymmetry(void)实验报告}#endifLinkedStackcpp#include<iostreamh>#include"LinkedStackh"template<classT>LinkedStack<T>::LinkedStack(void){}template<classT>voidLinkedStack<T>::Push(constTitem){Stack>InsertAt(item)}栈表类的出栈函数template<classT>TLinkedStack<T>::Pop(void){TtmpDataif(!Stack>Size()){栈空给出出错信息并退出cerr<<"Pop:underflowed!"<<endlexit()}保存栈顶数据tmpData=Stack>GetData()删除栈顶元素Stack>DeleteAt()返回栈顶数据returntmpData}template<classT>TLinkedStack<T>::Top(void){if(!Stack>Size()){栈空给出出错信息并退出cerr<<"Pop:underflowed!"<<endlexit()}实验报告returnStack>GetData()}template<classT>voidLinkedStack<T>::Clear(void){Stack>Clear()}template<classT>intLinkedStack<T>::Size(void){returnStack>Size()}maincpp#include<iostreamh>#include"linkedqueuecpp"template<classT>intcompare(LinkedStack<T>q){charsinti,f=,j=while(!qIsEmpty()){sj=qPop()j}for(i=i<ji){if(si!=sji)f=}if(f==)returnelsereturn}voidmain(){LinkedStack<int>pintn,icharmcout<<"请输入你要输入的字符的个数:"<<endlcin>>ncout<<"请输入字符:"<<endlfor(i=i<ni){cin>>m实验报告pPush(m)}if(compare(p))cout<<"是中心对称序列"<<endlelsecout<<"不是中心对称序列"<<endl}sT>队列:template<classT>classQueue{循环队列的类定义private:intrear,front队尾、队头指针T*elements存放队列元素的数组intMaxSizeintcountpublic:创建队列空间生成一个空队Queue(int)释放队列空间~Queue(){deleteelements}入队。若队列未满则item插入队尾返回否则不做入队操作返回intEnQueue(constTitem)出队。若队列非空在返回对头元素的值否则返回TDeQueue()voidset(){front=rear=}队列置空intIsEmpty(){returnfront==rear}判断队列是否为空intIsFull(){returnfront==(rear)MaxSize}判断队列是否为满intcompare()}#include"Queueh"template<classT>Queue<T>::Queue(ints)构造函数{创建队列空间生成一个空队MaxSize=s实验报告elements=newTMaxSizefront=rear=}template<classT>intQueue<T>::EnQueue(constTitem){入队。若队列未满则item插入队尾返回否则不做入队操作返回if(!IsFull()){elementsrear=item入队rear=(rear)MaxSize队尾指针增countreturn}elsereturn}template<classT>TQueue<T>::DeQueue(){出队。若队列非空则返回对头元素的值否则返回if(!IsEmpty()){Titem=elementsfrontfront=(front)MaxSize队头指针增returnitem队列非空返回对头元素的值}elsereturn}template<classT>intQueue<T>::compare(){intf=for(inti=i<=MaxSizei){if(elementsi!=elementsMaxSizei){f=break}}if(f)return实验报告elsereturn}maincpp#include"Queuecpp"#include<iostreamh>template<classT>intcompare(Queue<T>q){charsinti,f=,j=while(!qIsEmpty()){sj=qDeQueue()j}for(i=i<ji){if(si!=sji)f=}if(f==)returnelsereturn}voidmain(){intn,icharmcout<<"请输入你要输入的字符的个数:"<<endlcin>>nQueue<int>p(n)cout<<"请输入字符:"<<endlfor(i=i<ni){cin>>mpEnQueue(m)}if(compare(p))cout<<"是中心对称序列"<<endlelsecout<<"不是中心对称序列"<<endl}链队列:nodeh实验报告template<classT>classnode{private:node<T>*nextpublic:Tdatanode(constTitem,node<T>*ptr=)~node()node<T>*nextnode()constvoidinsertafter(node<T>*p)node<T>*deleteafter()}nodecpp#include<iostreamh>#include"Nodeh"template<classT>node<T>::node(constTitem,node<T>*ptr):data(item),next(ptr){}template<classT>node<T>::~node(){}template<classT>node<T>*node<T>::nextnode()const{returnnext}template<classT>voidnode<T>::insertafter(node<T>*p){p>next=nextnext=p}template<classT>node<T>*node<T>::deleteafter(){node<T>*ptr=nextif(ptr==)returnnext=ptr>nextreturnptr}linkedlisth实验报告#include<iostreamh>#include"nodecpp"template<classT>classlinkedlist{private:node<T>*front,*rearnode<T>*prevptr,*currptrintsizeintpositionnode<T>*getnode(constTitem,node<T>*ptr=)voidfreenode(node<T>*p)public:linkedlist()~linkedlist()linkedlist<T>operator=(constlinkedlist<T>orglist)intSize()constboolisempty()constintnextnode()intsetposition(intpos)intgetposition()constvoidinsertat(constTitem)voidinsertafter(constTitem)voiddeleteat()voiddeleteafter()Tgetdata()constvoidsetdata(constTitem)voidclear()}linkelistcpp#include<iostreamh>#include<stdlibh>#include"linkedlisth"template<classT>linkedlist<T>::linkedlist():front(),rear(),prevptr(),currptr(),size(),position(){}template<classT>linkedlist<T>::~linkedlist(){实验报告clear()}template<classT>node<T>*linkedlist<T>::getnode(constTitem,node<T>*ptr){node<T>*newnode=newnode<T>(item,ptr)if(!newnode){cout<<"getnode:Memoryallocationfailed!"<<endlreturn}returnnewnode}template<classT>voidlinkedlist<T>::freenode(node<T>*ptr){if(!ptr){cout<<"freenode:invalidnodepointer!"<<endlreturn}deleteptr}template<classT>linkedlist<T>linkedlist<T>::operator=(constlinkedlist<T>orglist){node<T>*p=orglistfrontclear()while(p){insertafter(p>data)p=p>nextnode()}setposition(orglistposition)return*this}template<classT>intlinkedlist<T>::Size()const实验报告{returnsize}template<classT>boollinkedlist<T>::isempty()const{returnsizefalse:true}template<classT>intlinkedlist<T>::nextnode(){if(position>=position<size){positionprevptr=currptrcurrptr=currptr>nextnode()}else{position=size}returnposition}template<classT>intlinkedlist<T>::setposition(intpos){if(!size)returnif(pos<||pos>size){cout<<"positionerror"<<endlreturn}prevptr=currptr=frontposition=for(intk=k<posk){positionprevptr=currptrcurrptr=currptr>nextnode()实验报告}returnposition}template<classT>intlinkedlist<T>::getposition()const{returnposition}template<classT>voidlinkedlist<T>::insertat(constTitem){node<T>*newnodeif(!size){newnode=getnode(item,front)front=rear=newnodeposition=}elseif(!prevptr){newnode=getnode(item,front)front=newnode}else{newnode=getnode(item,currptr)prevptr>insertafter(newnode)}sizecurrptr=newnode}template<classT>voidlinkedlist<T>::insertafter(constTitem){node<T>*newnodeif(!size){newnode=getnode(item)front=rear=newnodeposition=实验报告}elseif(currptr==rear||currptr){newnode=getnode(item)rear>insertafter(newnode)prevptr=rearrear=newnodeposition=size}else{newnode=getnode(item,currptr>nextnode())currptr>insertafter(newnode)prevptr=currptrposition}sizecurrptr=newnode}template<classT>voidlinkedlist<T>::deleteat(){node<T>*oldnodeif(!currptr){cout<<"deleteat:currentpositionisinvalid!"<<endlreturn}if(!prevptr){oldnode=frontfront=currptr>nextnode()}else{oldnode=prevptr>deleteafter()}if(oldnode==rear){rear=prevptr实验报告position}currptr=oldnode>nextnode()freenode(oldnode)size}template<classT>voidlinkedlist<T>::deleteafter(){node<T>*oldnodeif(!currptr||currptr==rear){cout<<"deleteafter:currentpositionisinvalid!"<<endlreturn}oldnode=currptr>deleteafter()if(oldnode==rear){rear=currptr}freenode(oldnode)size}template<classT>Tlinkedlist<T>::getdata()const{if(!size||!currptr){cout<<"data:currentnodenotexist!"<<endlexit()}returncurrptr>data}template<classT>voidlinkedlist<T>::setdata(constTitem){if(!size||!currptr){cout<<"data:currentnodenotexist!"<<endlexit()实验报告}currptr>data=item}template<classT>voidlinkedlist<T>::clear(){node<T>*currnode=front,*nextnodewhile(currnode){nextnode=currnode>nextnode()freenode(currnode)currnode=nextnodefront=rear=prevptr=currptr=size=position=}}linkedqueueh#include"linkedlistcpp"template<classT>classlinkedqueue{private:linkedlist<T>*queuepublic:linkedqueue()~linkedqueue()voidenqueue(constTitem)Tdequeue()Tfront()voidset()intSize()constboolisempty()const}linkedqueuecpp#include"linkedqueueh"#include<iostreamh>#include<stdlibh>template<classT>实验报告linkedqueue<T>::linkedqueue(){queue=newlinkedlist<T>}template<classT>linkedqueue<T>::~linkedqueue(){deletequeue}template<classT>voidlinkedqueue<T>::enqueue(constTitem){queue>setposition(queue>Size())queue>insertafter(item)}template<classT>Tlinkedqueue<T>::dequeue(){Ttmpdataif(!queue>Size()){cout<<"dequeue:underflowed!"<<endlexit()}queue>setposition()tmpdata=queue>getdata()queue>deleteat()returntmpdata}template<classT>Tlinkedqueue<T>::front(){if(!queue>Size()){cout<<"front:underflowed!"<<endlexit()}returnqueue>getdata()}实验报告template<classT>voidlinkedqueue<T>::set(){returnqueue>clear()}template<classT>intlinkedqueue<T>::Size()const{returnqueue>Size()}template<classT>boollinkedqueue<T>::isempty()const{returnqueue>isempty()}maincpp#include<iostreamh>#include"linkedqueuecpp"template<classT>intcompare(linkedqueue<T>q){charsinti,f=,j=while(!qisempty()){sj=qdequeue()j}for(i=i<ji){if(si!=sji)f=}if(f==)returnelsereturn}voidmain(){linkedqueue<int>pintn,icharmcout<<"请输入你要输入的字符的个数:"<<endlcin>>ncout<<"请输入字符:"<<endlfor(i=i<ni){cin>>m实验报告penqueue(m)}if(compare(p))cout<<"是中心对称序列"<<endlelsecout<<"不是中心对称序列"<<endl}

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/50

数据结构--栈与队列的应用

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利