欢迎来到天天文库
浏览记录
ID:38700563
大小:81.00 KB
页数:10页
时间:2019-06-17
《数据结构实验报告 堆栈和队列》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、实验报告实验目的:1.掌握堆栈和队列的基本概念;2.掌握堆栈和队列的基本操作。3.了解产生随机数的相关操作。实验内容:1.试编写一个算法,建立一个学生成绩栈,要求从键盘上输入N个数,按照下列要求分别进入不同栈。(1)若输入的整数x小于60,则进入第一个栈;(2)若输入的整数x大于等于60并小于100,则进入第二个栈;(3)若输入的整数x大于100,则进入第三个栈;(4)分别输出每个栈的内容。2.编写一个程序,使用两个链队q1和q2,用来分别存储有计算机随机产生的20个100以内的奇数和偶数,然后每行输出q1和q2中的一个值,即奇数和偶数配对输出,直到任一队列为空为止。3.假设
2、一个算术表达式中可以包含三种括号:“(”和“)”,方括号“[”和“]”及花括号“{”和“}”,且这三种括号可按照任意的次序嵌套使用。编写算法判断给定表达式中所含括号是否成对出现。实验原理:堆栈是一种只允许在表的一端进行插入和删除运算的线性表。允许插入和删除运算的一端叫栈顶,另一端叫栈底。堆栈进栈的元素都是放在原当前栈顶元素之前而成为新的栈顶元素,每次退栈元素都是原当前栈顶的元素,最后进入堆栈的数据元素总是最先退出堆栈。队列是一种只允许在表的一端进行插入,而在表的另一端进行删除的特殊线性表。允许进行插入的一端叫队尾,另一端叫队头。队的插入和删除运算分别是在各自的一端进行的,每个
3、元素必须按照进入的次序离队。链栈和链队的存储结构中,逻辑上相邻的两个元素对应的存储位置是通过指针反应的,不要求物理上的相邻。1题定义一个结点结构和栈类。栈类中定义构造函数、析构函数、进栈函数、出栈函数、清栈函数,利用各个函数实现对堆栈的操作。2题定义一个结点结构和队类。队类中定义构造函数、析构函数、进队函数、出队函数、清队函数,利用各个函数实现对链队的操作。3题定义一个结点结构和栈类。栈类中定义构造函数、析构函数、进栈函数、出栈函数、清栈函数、测试栈空函数,利用各个函数实现对堆栈的操作。设计思想:为了实现代码的重复利用,3个程序源代码使用了模板。1题中定义三个链栈。根据输入的
4、数值按照相关要求调用进栈函数进栈。然后对三个栈进行出栈操作,若栈为空则输出空,非空则输出相应元素。2题中定义两个队列。随机产生20个100以内的数。根据产生的数值按照相关要求调用进队函数进队。然后分别对两个队列交替调用出队函数出队,直到有一个队列为空为止。3题中定义一个链栈。根据输入的值进行相应的操作。如果输入的是左括号则放入栈中。如果输入的是右括号,则先进行出栈处理,如果括号配对,则不再处理;如果括号不配对,则分别对相应的左括号和右括号进行进栈处理。如果输入其他数值和符号不进行任何操作。输入#终止输入。最后调用测试栈空函数,如果栈空则括号配对,否则不配对。实现部分:源代码:
5、1题:#include#includetemplatestructstacknode{t1data;stacknode*next;};templateclasslinkstack{stacknode*top;unsignedheight;public:linkstack();~linkstack(){clear();}voidclear();voidpush(t1&x);boolpop(t1&x);boolisempty(){return(heighe==0)?true:false;}};
6、templatelinkstack::linkstack(){height=0;top=NULL;}//清栈函数templatevoidlinkstack::clear(){t1x;while(pop(x));}//进栈函数templatevoidlinkstack::push(t1&x){stacknode*p;if(top){p=newstacknode;assert(p);p->data=x;p->next=top;top=p;}else{top=newstacknode7、>;assert(top);top->data=x;top->next=NULL;}height++;}//出栈函数templateboollinkstack::pop(t1&x){stacknode*p;if(height){x=top->data;p=top;top=top->next;deletep;height--;returntrue;}elsereturnfalse;}intmain(){inti,j=0,x;linkstacka,b,c;cout
7、>;assert(top);top->data=x;top->next=NULL;}height++;}//出栈函数templateboollinkstack::pop(t1&x){stacknode*p;if(height){x=top->data;p=top;top=top->next;deletep;height--;returntrue;}elsereturnfalse;}intmain(){inti,j=0,x;linkstacka,b,c;cout
此文档下载收益归作者所有