栈与队列

一、栈的定义

  栈的定义:栈是限定仅在表尾进行插入和删除的操作的线性表。

  允许插入和删除的一段称为栈顶,另一端称为栈底,不含任何数据元素的栈称为空栈。栈又称为后进先出的线性表,简称LIFO结构。

  栈元素具有线性关系,即前驱后继关系,只不过他是一种特殊的线性表。他的特殊之处就在于限制了这个线性表的插入和删除位置,它始终只在栈顶进行。这也就使得:栈底是固定的,最先进栈的只能在栈底。

  栈的插入操作,叫做进栈,也称压栈、入栈。

  栈的删除操作,叫做出栈,也有的叫做弹栈。

二、栈的抽象数据类型

  因为栈也是一个线性表,所以,线性表的顺序存储和链式存储对于栈也同样适用。

三、栈的顺序存储结构及实现

  1、栈的顺序存储结构

  

  2、进栈操作

  

  3、出栈操作

  

  4、栈的链式存储结构

    链栈的操作绝大多数都和单链表类似,只是在插入和删除上特殊一些。

  5、栈的作用

    栈的引入简化了程序设计的问题,划分了不同关注层次,使得思考范围缩小,更加聚焦于我们要解决的问题核心。反之,像数组等,因为要分散精力去考虑数组的下标增减等问题,反而掩盖了问题的本质。

  6、递归

    栈有一个很重要的作用是在程序设计语言中实现了递归。比如:斐波那契数列

    递归:把一个直接调用自己或通过调用语句间接调用自己的函数,称作递归函数。每个递归定义必须至少有一个条件,满足时递归不再进行,即不再引用自身而是返回值退出。

    递归与迭代区别:迭代使用的是循环结构,递归使用的是选择结构。递归能使程序的结构更清晰、更简洁、更容易让人理解,从而减少读懂代码的时间。但是大量的递归调用会建立函数的副本,会消耗大量的时间和内存。迭代则不需要反复调用函数和占用额外的内存。

四、队列的定义

  队列是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。队列是一种先进先出的线性表,简称FIFO。允许插入的一端称为队尾,允许删除的一端称为对头。

五、队列的链式存储结构及实现

  

 六、总结

  栈和队列大部分操作和单链表类似,不再做详细介绍。

  

原文地址:https://www.cnblogs.com/lichuankai/p/8655988.html