在数据结构中,队列与栈的产生主要是为了满足某些特殊的编程运算,数据结构最大的一个特点就是为算法提供基础,使用不用的数据结构甚至能直接影响算法的好坏,多数情况下,数据结构与算法是一种相辅相成的关系。
栈:和我们上节说到的一样,栈也是一种线性的存储结构。但是它限制了只能在线性表的尾部进行数据插入和删除操作,根据一张图示来进行形象说明。
栈的数据存放原则遵循 先进后出 的数据存放原则,因为它的数据出口只有一个,那就是栈顶,也就是上面所说的栈尾。如果一个栈里面没有数据元素的存放又被称之为 空栈,这种数据结构比较常用的场景就是程序计算中关于后缀表达式的计算。
队列:同样队列也是线性存储结构,和栈的数据处理方式正好是相反的,它是在线性表的一端进行数据插入,另一端则进行删除操作,根据图示来进行说明。
队列的数据存放原则遵循 先进先出 的存放原则,因为它拥有两个出口,一个出口专门负责数据进入、另一个出口专门负责数据出去,数据进入对应的就是数据插入、数据出去对应的就是数据删除。
在 Java 语言中,同样有关于队列与栈的实例对象的实现。队列对应的接口对象是 Queue、栈对应的则是 Stack,下面来看一下其中的部分源码分析。
// stack 栈对应的 push() 与 pop()
// 向栈添加数据元素
public E push(E item){
addElement(item);
return item;
}
// 删除栈底数据元素
publicsynchronized E pop(){
E obj;
int len = size();
obj = peek();
removeElementAt(len - 1);
return obj;
}
Stack()有自己的实例化对象,Queue()只定义了接口,它是在其他表的对象中实现的,我们选择使用 LinkedList 对 Queue()的实例化源码来说明。
// LinkedList 实现了 Deque 接口
public classLinkedList<E>extendsAbstractSequentialList<E>implementsList<E>, Deque<E>, Cloneable, java.io.Serializable
{
// Deque 接口又继承自 Queue 队列接口
public interfaceDeque<E>extendsQueue<E>{
}
// 那么相当于 LinkedList 实例实现了 Queue 队列
根据源码分析,我们寻找到 LinkedList 实例实现了队列接口,那么我们来看一下它的入队方法是怎样的。
// Queue 队列的入队方法 offer()
publicbooleanoffer(E e){
// 内部调用 add() 方法
return add(e);
}
// 实际上这里复用了 LinkedList 的添加元素方法,因为这个操作他们都是同样向链表添加数据
publicbooleanadd(E e){
linkLast(e);
return true;
}
注意:线性表与链表通常也是一起使用的,所以说数据结构外部使用线性表、内部再使用链表是非常的常见的数据结构的组装形式。
更过精彩前往微信公众号【老王说编程】>>>
相关推荐
在这个主题中,我们将深入探讨一种特殊的数据结构——栈(Stack),以及它与线性表的关系。栈是一种后进先出(Last In, First Out,简称LIFO)的数据结构,这意味着最后插入的元素最先被移除。栈在许多算法和程序...
在这个主题中,链表、队列、栈和二叉树是基础且重要的数据结构类型,它们各自具有独特的特性和应用场景。 首先,链表是一种动态数据结构,与数组不同,它不连续存储元素。每个元素(称为节点)包含数据和指向下一个...
本书涵盖了广义图、链表、栈、队列、树、图、排序与查找等经典算法,以及数组、链表、栈、队列、哈希表、二叉树等基础数据结构。通过学习这些内容,读者可以提升对复杂问题的分析和解决能力,从而在面试中脱颖而出。...
栈和队列是数据结构中的基础概念,它们在计算机科学和软件工程中有着广泛的应用。在本章中,我们将深入探讨这两种数据结构的定义、实现和应用。 首先,栈(Stack)是一种后进先出(Last In First Out,LIFO)的数据...
2. 栈:栈是后进先出(LIFO)的数据结构,与队列相反。栈的操作主要有压栈(将元素添加到栈顶)和弹栈(移除栈顶元素)。栈在递归、表达式求值、回溯算法等方面有着广泛应用。 3. 链表:链表是一种动态数据结构,...
线性表、栈和队列是数据结构中最基础且广泛使用的三种结构,它们在各种应用程序中都有重要应用。下面将详细讨论这些概念以及JWArray和JWList库在实现这些数据结构时的细节。 首先,线性表是一种基本的数据结构,由n...
本文档是一份详细的数据结构实验教学材料,涵盖栈(两种形式分别为顺序栈和链栈)与队列(包括环形队列和链队)的基础操作算法的学习实践,重点在于理解和运用这些基本概念。主要内容围绕着对各种数据结构实现具体的...
在实际编程中,我们经常会遇到需要利用栈和队列解决问题的情况,因此掌握这些基本数据结构及其应用是每个程序员的基础技能之一。 在提供的压缩包文件“栈和队列”中,可能包含了关于这两种数据结构的实例代码、练习...
本资源包“数据结构的链表,队列,栈(c)”聚焦于三种基本的数据结构:链表、队列和栈。这些都是初学者在学习编程时必须掌握的基础知识,它们对于理解算法和编写高效的代码至关重要。 首先,我们来看链表。链表是...
1. **基础数据结构**:包括数组、链表、栈、队列、树(二叉树、平衡树如AVL和红黑树)、图等。这些是所有算法的基础,理解和熟练运用它们是解决问题的关键。 2. **排序与搜索**:如快速排序、归并排序、堆排序、二...
在实际应用中,程序员经常结合栈和队列的特性,创建更复杂的数据结构,如双端队列(Deque),它允许在两端进行插入和删除操作,或者优先级队列(Priority Queue),其中元素的出队顺序取决于它们的优先级。...
在这一章中,我们主要讨论两种基本的数据结构:栈(Stack)和队列(Queue)。 栈是一种后进先出(LIFO,Last In First Out)的数据结构,类似于日常生活中的堆叠物品,最后放上去的物品最先被取出。栈的主要操作...
链表是一种线性数据结构,与数组不同,它不连续存储元素。每个元素称为节点,包含两部分:数据域(存储信息)和指针域(指向下一个节点的地址)。链表的主要类型有单链表、双向链表和循环链表。在单链表中,我们通常...
常见的数据结构包括数组、链表、栈、队列、树、图以及哈希表等。 1. **数组**:最基础的数据结构,它是一组相同类型的数据元素的集合,可以通过索引来访问每个元素。数组提供了随机访问的能力,但插入和删除操作...
2. **栈和队列**:栈是一种后进先出(LIFO)的数据结构,常用于表达式求值、递归和回溯等场景。队列是一种先进先出(FIFO)的数据结构,适用于处理请求队列、打印任务等。 3. **树形数据结构**:如二叉树、平衡树...
在程序员数据结构的学习中,以下几个关键知识点不容忽视: 1. **数据结构的基本概念**:数据结构指的是数据的组织方式,它定义了数据之间的关系以及操作这些数据的方法。在学习数据结构时,我们需要理解对象的定义...
数据结构和算法是程序员面试中的核心考察点,它们直接影响到代码的效率和解决方案的质量。以下是一些基于给定标题和描述的关键知识点的详细说明: 1. **二元查找树(BST)转双向链表**:这道题要求将BST转换为一个...
线性结构如数组和字符串是顺序存储的数据结构,而栈和队列则具有特定的插入和删除规则。二叉树是一种特殊的树形结构,每个节点最多有两个子节点。集合通常涉及查找和排序操作。 能力方面,程序员需要具备分析问题和...
数据结构关于栈和队列(C++) 在计算机科学中,栈和队列是两种基本的数据结构,它们广泛应用于各种编程语言和算法中。本资源摘要信息将详细介绍栈和队列的定义、类型、操作和应用,特别是在C++语言中的实现。 1. 栈...