博客作业03--栈和队列

一、学习总结

1.1 关键词

  • 栈、队列、线性表、逻辑结构、存储结构、链表、单链表、双链表、循环链表、顺序表、有序表。

1.2 关键词思维导图

二、PTA实验作业

1、7-4(栈PTA)

1)设计思路(伪代码或流程图)

#略过栈 Stack( char 类型)的建立、进栈、出栈
#主要功能代码解释:

while ( Fline[i] 存在的时候,将 Fline 的元素和 Tline 的元素挨个比较 )// Fline :1号轨道的车厢从左到右的顺序,Tline :车厢停到2号轨道的进道顺序
    if  ( Fline[i] 的值等于 Tline[j] 的值 )
            表示从 1 轨道到 2 轨道,在二维数组 way 的相应行数记下 1 与 2 ;   // way :二维数组,记录路径
    else if  ( 栈不为空且栈顶元素等于 Tline[j] )
            表示从 3 轨道到 2 轨道,把该元素出栈,way 数组记录 3 、 2 ;
    else 
            到这里说明要进到 3 轨道,将 Fline[i] 入栈,way 数组记录 1 、3 ;
end while

while  ( 栈不为空 )
            取栈顶元素挨个与 Tline 比较,如果不相等就输出"Are you kidding me?"并结束循环,不输出任何数据( flag 置为 0 ),如果相等就用 way 数组记录路径;
end while

if  ( flag 为真)
         按格式循环输出 way 数组的内容
end if

2)代码截图



3)PTA提交列表说明

  • 问题1:编译错误
  • 原因:我使用C++方式,编译器没看到是C的
  • 问题2:
  • 原因:在写的时候漏掉了出栈步骤,导致元素一直在栈顶,出现了错误,这一点我是在运行测试样例//ABCDEFGHIJKLMNOPQRSTUVWXYZ//IJKLMNHGFEDCBAOPQRSTUVWXYZ,对比自己代码与别人正确代码的结果之后才发现的。

2、7-3(栈PTA)

1)设计思路(伪代码或流程图)

#主要功能函数 trans ,输入的参数为 exp 数组和 post 数组

for  i=0  to  exp[i+1]='\0'        //遍历 exp 数组。
        若 exp[i] 是数字或 '.' ,将从 exp[i] 开始到符号之前的数值放到 post 数组里,加上一个空格;    // exp 存放中缀表达式,post 存放后缀表达式
        若 exp[i] 是 '(' ,将其进栈,是 ')' ,栈顶元素循环出栈,若出栈元素不是 '(' ,则进入 post 数组里,若是就结束循环;
        若 exp[i] 是 '+' 或 '-' ,若是 exp 数组第一位元素或者是其前一位元素为 '(' 且是负号,就进到 post 数组里,然后进入下一次循环;若不是就将栈的元素循环出栈到 post 数组,加上空格,直到栈顶元素为 '(' ,然后再将 exp[i] 进栈;
        若 exp[i] 是 '/' 或 '*' ,如果栈顶元素是 '/' 或 '*' ,循环给 post 数组,加上空格,直到栈顶元素不是 '/' 或 '*' 为止,然后 exp[i] 进栈。
end for

while 栈不为空
        栈顶元素出栈,进到 post 数组里,加上空格。
end while

把 post 数组的末尾空格改为结束符 '\0' ;

2)代码截图






3)PTA提交列表说明

  • 问题1: 运算数超过1位整数且有非整数出现(段错误)

  • 原因:就是非整数的问题(1.5之类),我的原始代码在运算类似“1.2/7”的时候就崩溃了,因为当读到 '.' 的时候会造成死循环,进而将 post 数组写满。

  • 问题2:只有1个数字(格式错误)

  • 原因: post 数组的下标 j 的运用问题,在 j 加一之后才添上终止符,没有覆盖末尾的空格。

  • 问题3:运算数前有正负号(答案错误)

  • 原因:这个是我没想到,一般来说只要输出负号就行,我则让正负号都正常输出了。

3、7-4(队列PTA)

1)设计思路(伪代码或流程图)

#在正常的队列结构体里多加了一个 int 类型的 cnt 变量表示队列的元素个数。
#略过队列的出队和入队、建立操作,在建立队列同时输入数据。

#void Binary_Search(int e,int a[],int cnt) ,比正常的二分查找法多了一个 a[right]=e 的步骤

#主要功能函数 Scheduling ,输入参数为队列 q 

while ( 队列不为空 )
        出队一个元素
        若是第一个元素即 cnt = 0 ,出队的元素就进到数组 a 里, cnt 递增。//cnt为计数器
        不然,若 a 数组的前一位元素小于出队的元素,将此元素存进 a 数组,不小于就二分查找找到比它大的最小数,并替换。// a 数组为车的轨道
end while

输出 cnt ;

2)代码截图




3)PTA提交列表说明

  • 问题1:编译错误
  • 原因:编译器没改就提交的原因。
  • 问题2: 最小N(答案错误)、sample 等价,卡找简单递减序列的算法(答案错误)
  • 原因:原始的代码没有在出队完成之后修改 n 的值( 那时用的是 cnt1+cnt2==n 的判断 ),修改完之后这两个测试点都过了。但第二个测试点据我认为应该是我原始的代码只有一层循环,所以时间复杂度过了。
  • 问题3:最大N,以10000为单位逆序(答案错误)、最大N,正序(答案错误)
  • 原因:由于是最大N,没有办法去测试,所以去网上搜索了一下,据说是要用二分查找法才能通过,然后就把我自己的代码重新修改了一下,确保题目给出的测试样例答案正确,提交之后就过了。

三、截图本周题目集的PTA最后排名

3.1 栈PTA排名

3.2 队列PTA排名

3.3 我的总分:255

四、阅读代码

4.1 优秀代码

  • 基于栈和队列实现二叉树的遍历





  • 功能:不使用递归的方法,用我们学过的栈和队列完成二叉树的遍历。
  • 优点:启发思路,用我们学过的知识去解决一个问题,激发我们的灵感(当然,也可以用一些前人做好的工具去完成)。

4.2 地址

五、代码Git提交记录截图


posted @ 2018-04-14 20:06  那就这个名字  阅读(343)  评论(2编辑  收藏  举报