数据结构——栈与队列

1.栈(stack)

1.1栈

栈又成为堆栈,是一种受约束的线性表,限制就是只允许在表的一端插入和删除操作。进行插入,删除操作的一端称为栈顶,另一端称为栈底。当一个栈没有元素的时候,称为空栈。向栈插入元素称为进栈或者入栈,删除元素称为出栈或者退栈。因为操作都是在栈顶,所以是后进先出的(Last In First Out,简称LIFO)。

数据结构——栈与队列_第1张图片

看到这里觉得这个栈的结构有点眼熟,想了半天,想起来小时候流行的存储硬币,带弹簧的储钱罐。这两个就是一个东西。原来数据结构离我们这么近。最先要用的硬币就是刚刚才放进去的。栈就是如此,只能在栈顶进行操作。

数据结构——栈与队列_第2张图片

1.2栈有如下几种操作

  • 返回栈元素的个数
  • 判断该栈是否为空
  • 元素入栈
  • 栈顶元素出栈
  • 获取栈顶元素

1.3栈的存储

 开始说了栈是一种有限制的线性表,也就是说栈有两种存储方式,顺序存储和链式存储,这个就是昨天线性表的内容。

顺序存储结构的栈是顺序栈,用地址连续的存储单元依次存放栈中的数据元素。选择线性表的一端作为栈顶,按照数组操作的特性,选择数组下标大的一端,线性表存储的表尾作为栈顶。

优点 : 只需要记录栈顶的元素的位置,而且在插入元素的时候不用再移动元素。存储空间利用率高。

缺点 : 栈的顺序储存在一开始会分配固定大小内存空间来储存元素,在后面存储元素的时候内存空间不容易扩展。

链式存储的栈是链栈。以单链表的形式存储栈,单链表的头部作为栈顶。相邻数据元素可随意存放,但所占存储空间分两部分,一部分是数据,另一部分是指针。

优点:对于数据的增删比较方便,比较灵活

缺点:存储空间利用率低。

这里插一下存储密度的概念:存储密度,在计算机中是指结点数据本身所占的存储量和整个结点结构所占的存储量之比,计算公式:存储密度 = (结点数据本身所占的存储量)/(结点结构所占的存储总量)。这里的结构一般指的是数据结构,主要通过计算机中数据的存储结构来影响存储密度。

2.队列(queue)

2.1队列

队列和栈一样是受约束的线性表,这个约束是只能从一端进行插入而从另一端删除。这种约束决定了对是先进先出(First In First Out,简称FIFO)。插入数据的一端称为队尾,删除数据的一端称为队尾。从队尾插入数据称为进队或者入队,新元素入队后称为新的队尾。从队首中删除元素称为离队或者出队,出队后的后续元素称为队首

我看着这些汉字有些晕,其实很容易理解。这就像在食堂排队,排队队伍前面的打过饭就走了,也就是队首,也就是删除只能从队首删除,后面来的同学想打饭就只能在从队尾开始排队,增加只能从队尾开始,新来的同学称为新的队尾。

2.2队有如下几种操作

  • 返回队元素的个数
  • 判断该队是否为空
  • 元素入队
  • 栈顶元素出队
  • 获取队首元素

你可能感兴趣的:(栈,队列,数据结构)