哈哈,时隔两周,数据结构第三章---栈和队列的学习小结新鲜出炉了。
  这两周,我们学习了栈和队列的定义和特点,栈和队列的表示以及两种数据结构的操作实现。所以,什么是栈,什么是队列呢?从数据结构的角度来看,栈和队列都属于我们之前学习的线性表,但都是操作受限的线性表,因此也被称为限定性的数据结构。可能有些人会疑惑什么是操作受限呢,拿栈和队列来说的话,栈是限定仅在表尾进行插入或删除操作的线性表,是按照后进先出原则的线性表;而队列却是一种先进先出的线性表,与栈相反。同线性表一样。栈的类型有两种---顺序栈和链栈,代表着顺序存储和链式存储两种存储类型,而队列的两种类型却是循环队列和链队(开始我还以为叫顺序队)。
  这两周的作业,一个是括号匹配问题,一个是银行办理业务问题。因为我刚开始做括号匹配问题时,脑子一片空白,因为有好几种情况要考虑,因而老师特意在课堂上讲解了这道题目,这时我才明白括号匹配的四种可能性:①左右括号配对次序不正确②右括号多于左括号③左括号多于右括号④左右括号匹配正确,然后根据这几种情况得出算法:顺序扫描算数表达式(表现为一个字符串),当遇到三种类型的左括号时候让该括号进栈;当扫描到某一种类型的右括号时,比较当前栈顶元素是否与之匹配,若匹配,退栈继续判断;若当前栈顶元素与当前扫描的括号不匹配,则左右括号配对次序不正确;若字符串当前为某种类型的右括号而堆栈已经空,则右括号多于左括号;字符串循环扫描结束时,若链栈非空(即链栈尚有某种类型的左括号),则说明左括号多于右括号;否则,括号配对正确。知道了算法,我便开始做题,先是基本操作ADT,然后是对算法进行书写,这个时候又有问题出现,自己不会写算法啊,然后我就按照书上的算法写,可惜书上的算法很不简洁,这时老师讲了一种她说是最简洁的算法,但是我不怎么理解,使用的时候出现许多bug,后来我只好乖乖地用书上的算法,这让我明白了算法使用的基础有时候是建立在自己的理解程度上的,看样子我的代码之路还有很长的路要走。
  在这章的学习当中,我参考了网站http://www.cppblog.com/GUO/archive/2010/09/12/126483.html的一些相关资料。

posted on 2019-03-30 18:31  花町物语lsg  阅读(127)  评论(2编辑  收藏  举报