栈和队列是线性表中比较特殊的两种数据结构,他们中间是具有线性关系的,就是前驱后继的关系。
一、栈
1、概述
栈是只允许在表尾进行插入和删除操作的线性表,在插入和删除的的一段称之为栈顶,另一端就是栈底,它是先进后出的,如下图就是他的一个典型结构:
栈同线性表一样,一般包括插入、删除等基本操作。他的实现通常有两种:基于数组的实现(即顺序存储)、基于链表的实现(即链式存储)
(1)栈的顺序存储结构
栈的顺序存储结构其实是线性表顺序存储结构的简化,可以把它称为顺序栈,其存储结构如下:
(2)栈的链式存储结构
栈的链式存储结构,简称链栈。一般将栈顶放在单链表的头部。通常对于链栈来说,不需要头结点。其存储结构如下图:
二、队列
队列是只允许在一端进行数据插入,另一端进行删除操作的线性表,它是先进先出策略的集合类型,在允许插入的一端称为队尾,允许删除的一端就是队头。同样的,队列具有两种存储方式:顺序存储和链式存储。
(1)队列的顺序存储结构
他与栈是不同的,栈就相当于往一个桶中不断装东西,而队列可以想象成10个排成一个队列按照顺序通过一个地下通道模型,这个地下通道就是对类的内存,这是个人就是里面的数据;队列元素的出列是在队头,即下表为0的位置。为保证队头不为空,每次出队后队列中的所有元素都得向前移动,此时时间复杂度为 O(n)。此时队列的实现和线性表的顺序存储结构完全相同。其结构如下:
(2)队列的链式存储结构
队列的链式存储结构,其实就是线性表的单链表,只不过它只能尾进头出而已,我们简称为「链队列」。存储结构如下图:
以上就是栈与队列的一个基本了解;
三、总结
栈与队列,它们都是特殊的线性表,只是对插入和删除操作做了限制。栈限定仅能在栈顶进行插入和删除操作,而队列限定只能在队尾插入,在队头删除。它们都可以使用顺序存储结构和链式存储结构两种方式来实现。