`
wwt_cxy001
  • 浏览: 9878 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

程序员必须知道的数据结构:队列与栈

阅读更多

在数据结构中,队列与栈的产生主要是为了满足某些特殊的编程运算,数据结构最大的一个特点就是为算法提供基础,使用不用的数据结构甚至能直接影响算法的好坏,多数情况下,数据结构与算法是一种相辅相成的关系。

栈:和我们上节说到的一样,栈也是一种线性的存储结构。但是它限制了只能在线性表的尾部进行数据插入和删除操作,根据一张图示来进行形象说明。
在这里插入图片描述

栈的数据存放原则遵循 先进后出 的数据存放原则,因为它的数据出口只有一个,那就是栈顶,也就是上面所说的栈尾。如果一个栈里面没有数据元素的存放又被称之为 空栈,这种数据结构比较常用的场景就是程序计算中关于后缀表达式的计算。

队列:同样队列也是线性存储结构,和栈的数据处理方式正好是相反的,它是在线性表的一端进行数据插入,另一端则进行删除操作,根据图示来进行说明。

图片

队列的数据存放原则遵循 先进先出 的存放原则,因为它拥有两个出口,一个出口专门负责数据进入、另一个出口专门负责数据出去,数据进入对应的就是数据插入、数据出去对应的就是数据删除。

在 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)的数据结构,这意味着最后插入的元素最先被移除。栈在许多算法和程序...

    数据结构链表,队列,栈和二叉树的各种操作

    在这个主题中,链表、队列、栈和二叉树是基础且重要的数据结构类型,它们各自具有独特的特性和应用场景。 首先,链表是一种动态数据结构,与数组不同,它不连续存储元素。每个元素(称为节点)包含数据和指向下一个...

    程序员代码面试指南:IT名企算法与数据结构题目最优解-代码

    本书涵盖了广义图、链表、栈、队列、树、图、排序与查找等经典算法,以及数组、链表、栈、队列、哈希表、二叉树等基础数据结构。通过学习这些内容,读者可以提升对复杂问题的分析和解决能力,从而在面试中脱颖而出。...

    算法与数据结构:第3章 栈和队列.ppt

    栈和队列是数据结构中的基础概念,它们在计算机科学和软件工程中有着广泛的应用。在本章中,我们将深入探讨这两种数据结构的定义、实现和应用。 首先,栈(Stack)是一种后进先出(Last In First Out,LIFO)的数据...

    C语言数据结构库(队列,栈,链表,树的增删改查)

    2. 栈:栈是后进先出(LIFO)的数据结构,与队列相反。栈的操作主要有压栈(将元素添加到栈顶)和弹栈(移除栈顶元素)。栈在递归、表达式求值、回溯算法等方面有着广泛应用。 3. 链表:链表是一种动态数据结构,...

    数据结构-线性表、栈、队列

    线性表、栈和队列是数据结构中最基础且广泛使用的三种结构,它们在各种应用程序中都有重要应用。下面将详细讨论这些概念以及JWArray和JWList库在实现这些数据结构时的细节。 首先,线性表是一种基本的数据结构,由n...

    数据结构实验指南:栈与队列算法设计与应用

    本文档是一份详细的数据结构实验教学材料,涵盖栈(两种形式分别为顺序栈和链栈)与队列(包括环形队列和链队)的基础操作算法的学习实践,重点在于理解和运用这些基本概念。主要内容围绕着对各种数据结构实现具体的...

    数据结构之栈和队列基本操作及实践

    在实际编程中,我们经常会遇到需要利用栈和队列解决问题的情况,因此掌握这些基本数据结构及其应用是每个程序员的基础技能之一。 在提供的压缩包文件“栈和队列”中,可能包含了关于这两种数据结构的实例代码、练习...

    数据结构的链表,队列,栈(c)

    本资源包“数据结构的链表,队列,栈(c)”聚焦于三种基本的数据结构:链表、队列和栈。这些都是初学者在学习编程时必须掌握的基础知识,它们对于理解算法和编写高效的代码至关重要。 首先,我们来看链表。链表是...

    程序员代码面试指南 IT名企算法与数据结构题目最优解.zip

    1. **基础数据结构**:包括数组、链表、栈、队列、树(二叉树、平衡树如AVL和红黑树)、图等。这些是所有算法的基础,理解和熟练运用它们是解决问题的关键。 2. **排序与搜索**:如快速排序、归并排序、堆排序、二...

    数据结构之线性栈和队列

    在实际应用中,程序员经常结合栈和队列的特性,创建更复杂的数据结构,如双端队列(Deque),它允许在两端进行插入和删除操作,或者优先级队列(Priority Queue),其中元素的出队顺序取决于它们的优先级。...

    数据结构:5A 第3章栈和队列B.ppt

    在这一章中,我们主要讨论两种基本的数据结构:栈(Stack)和队列(Queue)。 栈是一种后进先出(LIFO,Last In First Out)的数据结构,类似于日常生活中的堆叠物品,最后放上去的物品最先被取出。栈的主要操作...

    C中数据结构(链表,队列,栈的练习)

    链表是一种线性数据结构,与数组不同,它不连续存储元素。每个元素称为节点,包含两部分:数据域(存储信息)和指针域(指向下一个节点的地址)。链表的主要类型有单链表、双向链表和循环链表。在单链表中,我们通常...

    数据结构基础,专业程序员基础

    常见的数据结构包括数组、链表、栈、队列、树、图以及哈希表等。 1. **数组**:最基础的数据结构,它是一组相同类型的数据元素的集合,可以通过索引来访问每个元素。数组提供了随机访问的能力,但插入和删除操作...

    数据结构_程序员考试

    2. **栈和队列**:栈是一种后进先出(LIFO)的数据结构,常用于表达式求值、递归和回溯等场景。队列是一种先进先出(FIFO)的数据结构,适用于处理请求队列、打印任务等。 3. **树形数据结构**:如二叉树、平衡树...

    程序员数据结构笔记

    在程序员数据结构的学习中,以下几个关键知识点不容忽视: 1. **数据结构的基本概念**:数据结构指的是数据的组织方式,它定义了数据之间的关系以及操作这些数据的方法。在学习数据结构时,我们需要理解对象的定义...

    程序员面试100题数据结构和算法

    数据结构和算法是程序员面试中的核心考察点,它们直接影响到代码的效率和解决方案的质量。以下是一些基于给定标题和描述的关键知识点的详细说明: 1. **二元查找树(BST)转双向链表**:这道题要求将BST转换为一个...

    数据结构关于栈和队列(C++)

    数据结构关于栈和队列(C++) 在计算机科学中,栈和队列是两种基本的数据结构,它们广泛应用于各种编程语言和算法中。本资源摘要信息将详细介绍栈和队列的定义、类型、操作和应用,特别是在C++语言中的实现。 1. 栈...

    02队列与栈1

    通过西安电子科技大学计算机科学与技术专业的实验报告,我们有幸探究了在解决括号匹配和颜色置换问题中队列与栈的具体应用,进而深化了对这两种基本数据结构的理解。 队列与栈在本质上区别显著。队列是一种先进先出...

Global site tag (gtag.js) - Google Analytics