在数据结构中,队列与栈的产生主要是为了满足某些特殊的编程运算,数据结构最大的一个特点就是为算法提供基础,使用不用的数据结构甚至能直接影响算法的好坏,多数情况下,数据结构与算法是一种相辅相成的关系。
栈:和我们上节说到的一样,栈也是一种线性的存储结构。但是它限制了只能在线性表的尾部进行数据插入和删除操作,根据一张图示来进行形象说明。
栈的数据存放原则遵循 先进后出 的数据存放原则,因为它的数据出口只有一个,那就是栈顶,也就是上面所说的栈尾。如果一个栈里面没有数据元素的存放又被称之为 空栈,这种数据结构比较常用的场景就是程序计算中关于后缀表达式的计算。
队列:同样队列也是线性存储结构,和栈的数据处理方式正好是相反的,它是在线性表的一端进行数据插入,另一端则进行删除操作,根据图示来进行说明。
队列的数据存放原则遵循 先进先出 的存放原则,因为它拥有两个出口,一个出口专门负责数据进入、另一个出口专门负责数据出去,数据进入对应的就是数据插入、数据出去对应的就是数据删除。
在 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;
}
注意:线性表与链表通常也是一起使用的,所以说数据结构外部使用线性表、内部再使用链表是非常的常见的数据结构的组装形式。
更过精彩前往微信公众号【老王说编程】>>>
相关推荐
数据结构中对象的定义,存储的表示及操作的实现. 2.线性:线性表、栈、队列、数组、字符串(广义表不考) 树:二叉树 集合:查找,排序 图(不考) 能力: 分析,解决问题的能力 过程: ● 确定问题的数据。...
数据结构里的算法,线性表,栈和队列,串和数组,树和二叉树,图,排序,查找的算法,以及一些例题,有助于你对数据结构的理解和学习
1.数据结构中对象的定义,存储的表示及操作的实现. 2.线性:线性表、栈、队列、数组、字符串 树:二叉树 集合:查找,排序 图 ...
数据结构的定义 数据结构是计算机存储、组织数据的方式,用于高效地访问和修改数据。...Java提供了丰富的数据结构库,包括数组、链表、栈、队列等,这些数据结构为程序员提供了处理各种问题的工具和方法。
3栈和队列
栈和队列是web开发中最常用的两种数据结构。绝大多数用户,甚至包括web开发人员,都不知道这个惊人的事实。如果你是一个程序员,那么请听我讲两个启发性的例子:使用堆栈来组织数据,来实现文本编辑器的“撤消”操作;...
关于这本小册.md 1、回顾大学四年,后悔没有这样做.md 2、计算机基础到底是哪些基础.md 3、编程语言是个什么玩意儿.md 4、程序员不能说自己不懂二进制.md ...24、数据结构中的栈和队列这回懂了.md ……
数据结构_程序员考试;十二章,线性表、栈和队列、串、数组、树和二叉树、数组、图、查找表、排序、文件等
本书是清华大学出版社和北京交通大学出版社出版的《数据结构》教材(张凤琴主编)的配套实验教材,也可作为其他数据结构的实验教材及软件水平考试、计算机等级考试的上机指导、程序员编写算法的参考书。 内容截图 ...
本资源是一份关于数据结构与算法中基础数据结构的备赛资料,主要包括数组、链表、栈、队列、树、图等常见数据结构的基本概念、操作和应用。通过本资料的学习,可以帮助读者深入理解数据结构的基础知识,掌握常见数据...
里面包含了数据结构与算法的课程设计代码,包括线性表,栈,队列,图,二叉树,十个排序算法等,可做参考,有需要的宝子们可以看看。阅读建议:此资源以数据结构与算法学习的原理和内核,不仅是代码编写实现也更注重...
C++ STL (Standard Template Library标准模板库) 是通用类模板和算法的集合,它提供给程序员一些标准的数据结构的实现,称为容器,如 queues(队列)、lists(链表)、和 stacks(栈)等。 STL容器是由一些运用最广的一些...
常见的数据结构有数组、链表、栈、队列、树、图等。 算法则是解决特定问题的步骤,是对数据运算和操作的详细描述。算法的设计和选择会直接影响到程序的效率,因此,在设计和选择算法时,需要考虑到时间复杂度、空间...
定义顺序栈,完成栈的基本操作:空栈、入栈、出栈、取栈顶元素; 实现十进制数与八进制数的转换,十进制数与十六进制数的转换和任意进制之间的转换; 定义链式队列,完成队列的基本操作:入队和出队;
程序员必备,数据结构与算法。java与面向对象程序设计、数据结构与算法基础、线性表、栈与队列,等等。
常见的数据结构有数组、链表、栈、队列、树、图等。 算法则是解决特定问题的步骤,是对数据运算和操作的详细描述。算法的设计和选择会直接影响到程序的效率,因此,在设计和选择算法时,需要考虑到时间复杂度、空间...
第二部分“数据结构”(第3~5章)讲解算法分析中必须掌握的数据结构知识,主要包括基本数据结构、抽象数据结构、递归和树。第三部分“排序”(第6~11章)按章节顺序分别讨论基本排序方法(如选择排序、插入排序、...
数据结构和算法能起到什么作用? 数据结构的概述 算法的概述 一些定义 面向对象编程 软件工程 对于C++程序员的Java Java数据结构的类库 小结 问题 第2章 数组 Array专题Applet Java中数组的基础知识 将...
第三-四章+栈+队列