数据结构-第3章学习小结

第三章小结

一、对本章内容的小结如图

二、完成作业或实践时的心得体会

1. 懂得stack、queue的各种操作后再用STL感觉方便很多

2. 感觉自己有时候会想太多,比如作业题括号匹配我觉得 没有需要匹配括号的情况 运行结构应该是no,但是其实yes跟no都可以过测试点

3. 作业跟实践1都打的比较顺,实践2(出栈序列的合法性)就有点慌了

问题在于:一开始认为用数组来存放输入数据的话需要用两层循环,然后判断又应该需要两层循环,觉得时间复杂度可能有点大,然后就想用字符串(在错的道路越走越远的感觉)最后两个测试点过不了。问了小组同学他们也用了多个循环,我才重新回到原来的想法去打。有个小收获:利用STL的stack容器时,要写 !s.empty()  && s.top() == a[p] 不能写成s.top() == a[p] && !s.empty(),应该是因为s为空时不能访问s.top

三、讨论/课前提问/小组合作收获

1. 使用递归求解问题,分两步:1)写出递归公式  ; 2)根据递归公式进行求解(写代码)

2. 根据递归公式进行求解,有两种方法:

  1)迭代——自底向上的求解方法(由最小规模问题逐步向上求解,直至求出原问题的解)

  2) 递归——自顶向下的求解方法(从原问题出发,分解出规模减小了的子问题,直至终止条件, 然后由终止条件的结果进行回推,求出原问题的值)

  两种方法比较:递归编程简单,只需要关注本层逻辑。但是,递归有可能出现重复子问题 的情况——使用备忘录记录已经求解过的子问题来优化

3. 一种巧妙删除 L 的第一个有数据的结点(并没有真正删除首元结点,只是把首元结点变成了头结点,删除了原来的头结点)

优点:无需考虑只剩最后一个元素结点的情形,因为不会真正删除这个结点,所以 tail 指针不会变成野指针

void Delete(List &L) 
{  
     if (L.head->next == NULL) 
    { 
         cout << "Empty list" << endl; 
         return; 
     }

     LNode *p = L.head; 
     L.head = L.head->next; 
     cout << "Delete " << p->next->data << " OK" << endl; 
     delete p; 
}

4. 打代码前要仔细看并利用好题目的条件,可能会隐含优化代码的突破点

四、向大家分享的资料

1. C++ STL入门总结:https://blog.csdn.net/happyguys12345/article/details/72828625

2. STL容器当作参数传递:https://blog.csdn.net/yishaxiaoyao/article/details/44344097

五、上一阶段的目标完成情况,接下来的目标

1. 对上一阶段目标完成阶段自我感觉良好,学习预习、上课、打代码都是认真对待。(唯一担心学了新的,旧的知识可能会陌生一点,所以需要不定时回顾复习或者打打相关代码)

2. 接下来也没有什么大目标,依旧还是好好学习,好好打代码,学着把知识应用起来。还有就是能熟练使用STL。

原文地址:https://www.cnblogs.com/Madge/p/12770469.html