c++借助栈逆置队列.docx
- 文档编号:2182318
- 上传时间:2022-10-27
- 格式:DOCX
- 页数:15
- 大小:17KB
c++借助栈逆置队列.docx
《c++借助栈逆置队列.docx》由会员分享,可在线阅读,更多相关《c++借助栈逆置队列.docx(15页珍藏版)》请在冰豆网上搜索。
c++借助栈逆置队列
《算法与数据结构》实验报告
实验题目:
栈与队列任课教师:
贺怀清
学号:
120341108姓名:
郭兵权完成日期:
2014.3.27
一、.需
求
和
规
格
说
明
熟悉栈和队列的特点及其基本操作的实现。
借助栈,将队列中的数据元素进行逆置。
栈以顺序结构实现,队列以链表结构实现。
栈的基本操作包括:
(1)栈的创建;
(2)入栈;(3)弹栈;
(4)栈的判满;(5)栈的判空。
队列的基本操作包括:
(1)队列的创建;
(2)入队列;(3)出队列;
(4)队列的判空。
二.设计
2.1算法描述
///结点类模板头文件
#ifndefLINK_H
#defineLINK_H
template
classLink
{
public:
Tdata;//数据域
Link
Link(Tinfo,Link
{
data=info;
next=nextvalue;
}
Link(Link
{
next=nextvalue;
}
Link()
{
data=0;
next=NULL;
}
};
#endif
//链式队列类模板头文件
#ifndefQUEUE_H
#defineQUEUE_H
#include"link.h"
template
classQueue
{
public:
intsize;//队列元素个数
Link
Link
Queue(intsize)//链式队列初始化
{
size=0;
front=rear=NULL;
}
voidclear()//清空队列
{
while(front!
=NULL)
{
rear=front;
front=front->next;
deleterear;
}
rear=NULL;
size=0;
}
~Queue()
{
clear();
}
boolenqueue(Titem)//item进入队列
{
if(rear==NULL)//若空队列
front=rear=newLink
else//若队列不空
{
rear->next=newLink
rear=rear->next;
}
size++;//队列长度增加1
returntrue;
}
booloutqueue(Titem)//队列头元素出队列
{
if(size==0)//若队列为空
{
cout<<"队列为空"< returnfalse; } item=front->data; front=front->next; if(front==NULL) rear=NULL; size--; returntrue; } voidshow() { Link ot=front; while(ot! =NULL) { cout< ot=ot->next; } cout< } }; #endif //栈类模板头文件 #ifndefSTACK_H #defineSTACK_H template classStack { public: intmsize;//栈最多可存放的元素个数 inttop;//栈顶元素 T*st;//存放栈元素的数组 Stack(intsize)//构造函数 { msize=size; top=-1;//无栈顶就为空 st=newT[msize]; } Stack() { top=-1; } ~Stack()//析构函数 { delete[]st; } voidclear()//清空栈内元素 { top=-1; } boolpush(Titem)//将item压入栈 { if(top==msize-1)////判满 { cout<<"栈满溢出"< returnfalse; } else { top++; st[top]=item;//元素压入对应的栈内位置 returntrue; } } boolpop(Titem)//让item出栈 { if(top==-1)//判空 { cout<<"空栈,无元素"< returnfalse; } else { st[top]=item;//栈顶赋值给其他变量 top=top-1; returntrue; } } voidshow() { if(top==-1) cout<<"空栈,无元素"< else { inti=top; while(i! =-1) cout< } cout< } }; #endif //主函数: #include usingnamespacestd; #include"link.h" #include"stack.h" #include"queue.h" intmain() { Queue intb[5]; cout<<"请输入5个数以构造一个链式队列: "< intj; for(j=0;j<5;j++) { cin>>b[j]; queue1.enqueue(b[j]);//进入队列 } cout<<"你所构造的链式队列为: "< queue1.show(); Link //inti=0; //inta[5]; Stack p=queue1.front; while(p! =NULL)//当链式队列不为空 { //p->data=a[i]; //i++; queue1.outqueue(p->data);//////链式队列中的元素出队列并压入栈 stack1.push(p->data); p=p->next; } cout<<"压栈中..."< cout<<"栈中元素从上到下依次为: "< system("pause"); stack1.show(); cout<<"元素弹出并存入链式队列..."< intq=stack1.top; while(q! =-1)//当栈不为空 { stack1.pop(stack1.st[q]);//////栈内元素弹出并存入链式队列 queue1.enqueue(stack1.st[q]); q--; } cout<<"链式队列变为: "< system("pause"); queue1.show(); system("pause"); return0; } 2.2实现注释 程序算法注释直接见源代码的注释。 三.用户手册 1.根据提示,输入5个数据以构造一个链式队列; 2.按回车,根据提示操作; 3.成功显示逆置后的链式队列。 四.调试报告 这个程序是这个学期的第二个程序,程序的内容不算是太难,整个过程都保持一个比较清晰的思路,但是问题出现在程序的最后,就是输出的栈的top一直是-1…找了老半天也没有找到是哪错了,后来才发现,调用栈的成员函数show()的时候把top的值给改变了…将来在写程序的时候一定需要注意变量之间的传递关系。 目前程序运行无错误。 五.运行结果 请输入5个数以构造一个链式队列: 12345//输入 你所构造的链式队列为: 12345 压栈中... 栈中元素从上到下依次为: 请按任意键继续... 54321 元素弹出并存入链式队列... 链式队列变为: 请按任意键继续... 54321 恭喜,链式队列已借助栈逆置! 请按任意键继续... //更详细的内容请参阅附件
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c+ 借助 栈逆置 队列
![提示](https://static.bdocx.com/images/bang_tan.gif)