1.本周学习总结(0--1分)
谈谈你对栈和队列结构的认识及学习体会。
体会:本章学习了栈和队列,堆栈和队列都是特殊的线性表,其数据元素以及数据元素之间的逻辑关系完全相同,
区别在于:线性表的插入和删除操作不受限制,堆栈只能在栈顶插入和删除,队列只能在队尾插入,在队头删除.
栈的特点还是非常有意思的,对于解决迷宫问题时有很好的 作用,栈的结构能保证迷宫问题中指针神时候进
去什么时候出来,通过保存从入口到当前位置的路径上走过的方块,可以保证所有位置可以原路返回。总之,
对于栈和队列的知识的初步了解后发现了“新大陆”,对于解决一般问题又多了一样好的“工具”。收获满满
.PTA实验作业(6分)
本周要求挑4道题目写设计思路、调试过程。题目选做要求:
栈、队列函数题目分别选择1题
栈、队列编程题分别选择1题
原则上题目选择越难,代码量越大分值越高。
2.1.题目1:另类堆栈
2.1.1设计思路
begin:
bool push()
{if(是否到结尾)
{
是,返回false;
}
else
{
未到尾部,遍历date[s->top];
s->top++;
}
Elementpty pop()
{
if:数值出现0 ,return false;
}
else
{
s->top--;
返回data值;
}
end;```
函数体不要写设计思路。编程题用文字描述设计思路。(可不写伪代码)
##2.1.2代码截图
![](https://img2018.cnblogs.com/blog/1477754/201904/1477754-20190420153007465-979573756.png)
##2.1.3本题PTA提交列表说明。
![](https://img2018.cnblogs.com/blog/1477754/201904/1477754-20190420153032826-1618407989.png)
get:这道题比较简单,通过补充两个函数体bool push ()和ElementType pop()来实现入栈,出栈和简单判断
##PTA提交列表中的每个错误详细说明为什么及如何解决。如图:
![](https://img2018.cnblogs.com/blog/1477754/201904/1477754-20190420153502620-367982180.png)
个人觉得这个函数中 s->top--这里容易出错
##2.2 题目2:舞伴问题
##2.2.1代码截图
![](https://img2018.cnblogs.com/blog/1477754/201904/1477754-20190420153846902-1404385619.png)
![](https://img2018.cnblogs.com/blog/1477754/201904/1477754-20190420153908664-877175259.png)
##2.2.2本题PTA提交列表说明。
![](https://img2018.cnblogs.com/blog/1477754/201904/1477754-20190420154122772-910095080.png)
![](https://img2018.cnblogs.com/blog/1477754/201904/1477754-20190420154221526-442051820.png)
![](https://img2018.cnblogs.com/blog/1477754/201904/1477754-20190420154236942-1380033319.png)
```这道题上级考试和平时做题都一并说了吧。
说明:上机考试只要求写出判断空队列和队列长度和舞伴问题的函数体,但是如截图做了几次但是还是编译错误(big head...),后续修改中对比了一下之前做的
是因为舞伴问题函数中的{}没有写对,还有部分数据结构函数术语拼写错误QAQ
get:
first:对于队列的某些特点有了更深入的了解,如本题中就将队列运算只允许在表的一端进行插入的特点体现出来了,开始我设置的tear队尾是允许插入的一端,
对头front是允许删除的 一端,总之就是先进先出,插入受限。
last:队列是一种特殊的线性表,和线性表有共同和不同的特点。
2.3 题目3:银行业务问题
代码思路:
#include......
#.....
using namespace std; ----------首先写出固定代码
main(){ 定义i,n; 定义数组a[],sum=-1;
申请一个队列q;
for(){
遍历输入数组a[]的元素;if(a[i]%2==1) 保留i的值;
}
for(){
循环判断数组元素各条件下的输出情况(其中有该当原数组元素)
}
2.3.1代码截图
2.3.2提交列表(含上机考试截图)
说明:
1.上级考试中对于队列中有些函数调用的不熟悉,所以导致编译错误,如头"front" 经常写成"frout"
2.关于部分部分正确的情况我也是很迷,不知道错在哪,最后胡搞搞出了正确答案,提示上说过了2个测试点,第0
个测试点和第5 6个测试点没过,其中问题出在函数体调用对于题目问题的所要求不一。只得两分(部分正确)
题目2.4:符号配对问题
思路:
对于这道符合配对的问题上机考试和pta做题时思路比较混乱,所以导致上级考试时主动放弃的这题,badly,不巧刚好抽到它,因为这题真是又臭又长,很乱
begin:
{
#include<iostream>
.....
......
......
main()
{
定义i,flag
字符数组str[]
for(){
getline以指定的地址为存放第一个读取的字符的位置,依次向后存放读取的字符
判断" . "的情况,是,break;
then:
for(不为" . " 时)
{
for(用j遍历){
flag 用上
}
then: 二维数组a[]的遍历给str[];
part:--------》进行符号配对,伪代码不好表示
if(s.empty()==true&&str3==" ") cout<<"YES";
if(s.empty()==true&&str3!=" ")
{
cout<<"NO"<<endl;
for(int o=0;o<=3;o++)
{
if(str3==str1[o]) cout<<str3<<"-?";
if(str3==str2[o]) cout<<"?-"<<str3;
}
}
if(s.empty()==false&&str3==" ")
{
cout<<"NO"<<endl;
for(int o=0;o<=3;o++)
{
if(s.top()==str1[o]) cout<<s.top()<<"-?";
if(s.top()==str2[o]) cout<<"?-"<<s.top();
}
}
}
2.4.1代码截图:
2.4.2提交列表及说明
3、栈和队列上机考试(-3--3分)
对于2-1 我真是无语了 粗心错了,这个题目关于栈的很简单 可以通过草图了解决
对于C选项不可能1出2 还在栈里面,因为进栈是只能先进1和再进2
对于2-2 答案是b 当时答案摇摆不定但最终还是选错了,最后选择B为正确答案,说明当头指针指向尾指针时队列为空