数组、队列和栈的区别
数组:
数组是存储在连续内存位置的项的集合。其思想是将同一类型的多个项存储在一起。这使得计算每个元素的位置变得更容易,只需向一个基值(即数组的第一个元素的内存位置)添加一个偏移量。
数组的图解表示如下:
队列:
Queue是一种线性结构,它遵循执行操作的特定顺序。顺序为先进先出(FIFO)。队列的一个很好的例子是资源的任何消费者队列,其中最先到达的消费者将首先得到服务。栈和队列之间的区别在于删除。在堆栈中,我们删除最近添加的项;在队列中,我们删除最近添加的最少的项。
Queue的图解表示如下:
栈:
Stack是一种线性数据结构,其中元素只能从列表(称为顶部)的一侧插入和删除。堆栈遵循后进先出(LIFO)原则,即最后插入的元素是最先出来的元素。向堆栈中插入一个元素称为push操作,从堆栈中删除一个元素称为pop操作。在堆栈中,我们总是用一个叫做 top
的指针来跟踪列表中最后一个元素。
栈的图解表示如下:
下面是数组、堆栈和队列之间差异的表格表示:
队列 | 数组 | 栈 |
---|---|---|
队列是基于FIFO原理的,也就是说,最先插入的元素是最先从列表中出来的元素。 | 在数组中,元素属于索引,也就是说,如果你想进入第四个元素,必须在方括号内写变量名及其索引或位置,如 arr[4] |
栈是基于后进先出原则,即,最后插入的元素是列表中第一个出来的元素。 |
在队列中的插入和删除只能分别从后面和前面进行。 | 在数组中的插入和删除可以在数组中的任何索引处进行。 | 栈中的插入和删除只发生在称为top的列表的一端。 |
队列具有动态和固定的大小。 | 数组有固定的大小。 | 堆栈具有动态和固定的大小。 |
队列可以包含不同数据类型的元素。 | 数组包含相同数据类型的元素。 | 堆栈可以包含不同数据类型的元素。 |
不同类型的队列有环形队列、优先队列、双端队列。 | 不同类型的数组有1维、2维数组等。 | Stack只有一种类型。 |