Skip to content

Latest commit

 

History

History
45 lines (24 loc) · 2.99 KB

Lecture-2.3-堆栈ADT.md

File metadata and controls

45 lines (24 loc) · 2.99 KB

堆栈ADT

基础知识

堆栈:

具有一定操作约束的线性表,只在一端(栈顶)做插入、删除。

插入数据:入栈 删除数据:出栈

后入先出 LIFO

栈的链式存储结构实际上就是一个单链表,叫做链栈。插入和删除操作只能在链栈的栈顶进行。

  • 现在思考一个问题,为什么要有堆栈这种先入后出的数据结构呢?
    • 在一个任务处理的队伍中,如果处理任务按照先来先处理的原则,那么处理完毕一个任务就需要将后面的所有任务都向前挪一个位置,如果这样做,那么大量的时间就会浪费在挪位置上。
    • 第二种情况是队伍中的任务不动,处理人从第一个位置开始处理任务,然后走向第二个任务,直到处理到最后一个任务为止,这样做的好处是不需要将任务向前挪动。假设任务处理完就消失了,那么他们所占的空位置也就浪费了,在计算机中,资源是有限的,要不断回收管理,这样做就造成资源的浪费。
    • 为了解决上面的问题,科学家们设计了一种先进后出的数据结构,叫做堆栈。比如张三、李四、王五先后进到一个房间,出门的时候,王五先出去,李四再走,张三最后出去。这种安排看似不合理,却解决了上面的两个问题。因为一个东西在放进堆栈后再处理完之前并不需要移动,其次处理完的任务自动出栈,新进来的任务直接占有腾出来的位置,不存在空间被浪费的问题。

现在我算是知道为什么觉得递归反人类了,因为跟人类固有的由简到难,从小到大的递推思维不同。

计算机递归思维是自顶向下,由复杂问题逐渐分解为简单问题,人们由于习惯了递推的思维方式,在接触递归时就觉得不习惯。

递推是从最简单的状态逐渐到复杂的情况,递归是将复杂的情况逐渐分解成复杂度更低的情况直到基本情况然后返回。

在回溯的过程中将较小规模问题的解合成要解决的复杂问题的解。

这两种思维方式确实有所不同。

现在能清楚的看到的是,递归程序的程序确实更加简洁。

由于思维方式的不同,并不易懂。但是模型是真的简洁明了

还知道递归回归的过程和堆栈回溯的过程紧密相关浑然一体,上节课讲了为什么要有堆栈这种数据结构,这种先入后出的数据结构不符合人的思维,但是在计算机中却可以做到对资源的高效利用。

一个任务放入堆栈之后处理完之前不需要移动,其次处理完的任务自动出栈,新来的任务直接占有腾出来的位置,不存在空间的浪费。

既不需要多余的数据搬运工作,也不会由于处理过的任务腾出的位置没有被利用而浪费空间。

堆栈和递归紧密的关系,让我更深层次的理解了计算机的思维方式。

递推会比递归难这个问题,再思考思考也许就有答案了。