提到栈和队列,可能我们都很模糊,因为这是和计算机中的存储结构息息相关的,到这很多人都不愿学习了。其实只是我们的方法弄错了而已, 这些东西都很简单,重要的是我们不要将其单独出来,要和生活中的例子结合起来,这样就特别的好理解了。
第一、栈
首先先说说栈,直白点说,其实栈就是一个箱子,可以存放东西的容器,只不过这个容器有点特殊,只能罗列,就像是在里面放两本书,第一本放到里面后,再放第二本的时候只能压着第一本放,放在第一本书的上面,而我们取第一本书的时候只能是将第一本上面的书拿出去后才可以得到。结合生活中的例子就得到了栈的一个很重要的性质:先进后出原则。
还有一点比较麻烦的就是指针,用指针来表示栈的进出过程。在这也很好理解的,就像图书馆中的图书似的,我想要取到一本书,首先先要知道它放在哪才能拿到,而在哪这个地址就是它的指针,在栈中我就一个top指针,始终指向最顶端的元素。进栈后则top自动加一,指向新加入的那个元素,而出栈则刚好相反。
第二、队列
提到队列其实也很简单的,结合生活中的实例,排队买票就是一个很好的队列,先排对的则先买到票然后出去上车,后排队的则后买到票在出去上车。这也表明了队列的一个很重要的特性,先进先出原则。
值得注意的是,队列中也存在指针的问题,有一个头指针和尾指针,当尾指针指到队列的最后一个元素的时候,而头指针指向的元素已经出去了,会造成队列的号小的没有没有值,处于空闲状态。但当在有数据的排队的时候由于没有地方则会造成溢出,这种称为假溢出,因为还有地方可以存数据,就像上面的d图。因此做了一个改进,将它做成一个循环头和尾相连接则就很好的解决了这个问题。再来一个数据,我叫尾指针调到开头就可以继续存储了。
总结:通过上面的叙述,可以很容易的想到一点,数据结构其实很简单的,只要联系生活实际就可以很容易理解了。同样是数据,数据就是为解决生活中的问题而服务,源于生活,服务于生活,这才是宗旨。