`
samuschen
  • 浏览: 407792 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

java中用LinkedList实现堆栈和队列

 
阅读更多

堆栈和队列

1、 堆栈

使用 LinkedList 实现堆栈:

 

/**

* 使用 LinkedList 双向链表实现堆栈

* 2008.12.21

*/

 

import java.util.LinkedList;

 

public class Stack<T> {

    private LinkedList<T> list = new LinkedList<T>();

 

    public Stack() {

    }

    public void clear() {

        list.clear();

    }

    public boolean isEmpty() {

        return list.isEmpty();

    }

    public T topElement() {

        if (isEmpty()) {

            throw new java.util.EmptyStackException();

        }

        return list.getLast();

    }

    public T pop() {

         if (isEmpty()) {

            throw new java.util.EmptyStackException();

        }

        return list.removeLast();

    }

    public void push(T element) {

        list.addLast(element);

    }

    public String toString() {

        return list.toString();

    }

}

java.util 包中通用型堆栈类的实现是 Vector 类的扩展,其中添加了一个构造函数以及 5 个方法。可以通过下面的声明和初始化来创建一个堆栈:

java.util.Stack stack = new java.util.stack();

注意 push() 的返回类型不是 void ,而是 Object :压入的对象就是该方法的返回值。要读取栈顶元素而不将它从栈中删除,可以使用 peek() 方法。 Push() peek() 返回的都是原始栈顶元素,而非它的复制,因此,可以使用这些方法修改栈顶元素。定义一个包含共有双精度域 d 的类 C ,那么就可以对栈顶的对象进行如下修改:

((C)stack.push(new C())).d = 12.3;

((C)stack.peek()).d = 12.3;

堆栈的 Java 实现带有潜在的危险,因为它并不是一个真正的堆栈,而只是具备和堆栈相关的方法的结构。查看 java 的源代码,可以看到它不过是继承了 Vector class Stack<E> extends Vector<E> ,所以它也继承了 Vector 的所有方法。实际使用中可能会有如下语句:

stack.setElementAt(new Integer(5), 1);

stack.removeElementAt(3);

这违反了堆栈的完整性。堆栈是只能在其一端访问元素的结构,而在这个 Stack 类中并非如此。

 

2、 队列

与堆栈不同,队列是两端都被使用的结构:一端用于添加新元素而另一端用于删除元素。

使用 LinkedList 实现队列:

/**

* 使用 LinkedList 双向链表实现队列

* 2008.12.21

*/

 

import java.util.LinkedList;

 

public class Queue<T> {

    private LinkedList<T> list = new LinkedList<T>();

 

    public Queue() {

    }

    public void clear() {

        list.clear();

    }

    public boolean isEmpty() {

        return list.isEmpty();

    }

    public T firstElement() {

        if (isEmpty()) {

            throw new java.util.EmptyStackException();

        }

        return list.getFirst();

    }

    public T dequeue() {

        if (isEmpty()) {

            throw new java.util.EmptyStackException();

        }

        return list.removeFirst();

    }

    public void enqueue(T element) {

        list.addLast(element);

    }

    public String toString() {

        return list.toString();

    }

}

 

分享到:
评论

相关推荐

    使用LinkedList模拟堆栈

    在Java中,LinkedList同样可以用于实现队列,主要通过addLast()和removeFirst()方法。 以下是使用LinkedList模拟队列的实现: 1. 创建LinkedList实例。 ```java LinkedList&lt;Object&gt; queue = new LinkedList(); ```...

    JAVA利用LinkedList构造栈与队列

    LinkedList同样可以用来实现队列,通过add()方法添加元素到链表尾部,通过removeFirst()方法移除链表头部的元素。以下是一个使用LinkedList实现队列的Queue类示例: ```java import java.util.LinkedList; public ...

    java中LinkedList集合类实现栈和队列.doc

    在Java编程语言中,LinkedList集合类是一个非常重要的数据结构,它可以用来实现栈和队列这两种特殊的数据结构。LinkedList是一个双链表,每个节点包含数据元素和两个引用,分别指向前后节点,这使得在列表中进行插入...

    list集合案例增、删、改、查,ArrayList与LinkedList的区别,LinkedList堆栈/队列的开发

    同时,我们还将讨论如何利用`LinkedList`实现堆栈和队列的功能,并了解`List`集合如何处理元素的重复性。 一、`List`接口的基础操作 1. 增加(Add):`List`接口提供了`add(E element)`方法用于添加元素到列表的...

    常用数据结构(堆栈,队列,列表)JAVA代码

    在这个主题中,我们将深入探讨Java实现的三种基本数据结构:堆栈(Stack)、队列(Queue)和列表(List)。这些概念是计算机科学的核心部分,对理解和解决复杂问题至关重要。 1. **堆栈(Stack)**: - 堆栈是一种...

    java队列实现(顺序队列、链式队列、循环队列)

    在Java中,队列的实现主要有三种:顺序队列、链式队列和循环队列。下面我们将详细探讨这三种队列的实现方式。 1. **顺序队列**: 顺序队列通常是基于数组实现的。在Java中,我们可以使用ArrayList或LinkedList来...

    基于 Java 实现的队列和堆栈

    - **基本操作**:在Java中,可以使用`java.util.Queue`接口来实现队列。主要方法有`add()`(在队尾添加元素)、`remove()`(移除并返回队头元素)、`peek()`(查看但不移除队头元素)等。 - **实现方式**:常见的...

    用LinkedList实现队列和栈

    本篇文章将探讨如何利用`LinkedList`来实现队列和栈这两种数据结构,以及其背后的原理和源码分析。 ### 1. 队列(Queue) 队列是一种先进先出(FIFO, First In First Out)的数据结构。在Java中,可以使用`...

    Java用LinkedList实现的Stack

    栈是先进先出的原则,该类实现了栈的移入移除

    06-堆栈、队列.pdf

    例如,实现队列使用堆栈的方式,实现堆栈使用队列的方式,以及验证括号的有效性。这些问题不仅是算法学习中的经典题目,同时也是技术面试中的高频题目,需要应聘者具备扎实的数据结构和算法基础。 进一步深入堆栈和...

    java队列模拟实现

    Java队列模拟实现是一个典型的计算机科学中的数据结构应用,它主要涉及了Java编程语言和队列数据结构。在这个工程中,开发者已经创建了一个基于图形用户界面(GUI)的应用程序,用于演示和操作队列的各种功能。以下...

    用 Java 实现堆栈

    无论使用自定义的数组或链表结构,还是使用内置的Stack类,理解堆栈的工作原理和如何在Java中实现它们是每个Java开发者的基本功。通过学习和实践,我们可以更好地利用堆栈这一强大的数据结构来解决复杂的问题。

    Java 的 LinkedList 设计.zip

    LinkedList 设计java数据结构与算法系列文章目录(持续更新)java数据结构与算法之顺序表与链表设计与实现分析java数据结构与算法之双链表设计与实现java数据结构与算法之改进顺序表与双链表类似ArrayList和LinkedList...

    用Java实现数据结构中的队列

    在计算机科学中,数据结构是组织、存储和处理数据的方式,...通过理解这些基本概念和代码示例,你可以轻松地在Java项目中实现和使用队列数据结构。记住,选择哪种实现取决于具体的需求,如性能、内存使用和功能需求。

    LinkedList学习示例模拟堆栈与队列数据结构

    在Java中,我们可以使用LinkedList、ArrayDeque或者PriorityQueue来实现队列。在示例中,如果我们将 `myGet()` 方法中的 `link.removeLast()` 改为 `link.removeFirst()`,则可以实现队列的“先进先出”特性,即从...

    Java 中Linkedlist类的源代码

    LinkedList类位于java.util包中,它还实现了Deque(双端队列)接口,提供了额外的功能。 LinkedList的源代码包含了许多重要的方法和内部类。首先,我们来看它的主要属性: 1. **header**: 这是一个内部静态节点类...

    JAVA 模拟队列的实现

    Java提供了多种内置数据结构,如LinkedList和ArrayDeque,来实现队列操作。然而,手动模拟队列可以帮助开发者更直观地理解其内部机制。 2 队列的Java实现 在Java中,队列的实现通常涉及以下核心操作: - 插入元素...

    java多线程模拟队列实现排队叫号

    在Java中,我们可以使用`java.util.Queue`接口及其实现类,如`LinkedList`或`ArrayDeque`来创建队列。 接下来,我们需要创建两个线程类:一个是`CustomerThread`,代表等待叫号的客户,另一个是`ServiceThread`,...

    Java_Stack_Queue:Java中使用链表的堆栈和队列实现

    `LinkedList`类实现了`Deque`接口,这个接口包含了堆栈和队列的操作,因此我们可以通过它来实现堆栈功能。例如,我们可以使用`push()`方法添加元素到堆栈顶部,`pop()`方法移除并返回顶部元素,以及`peek()`方法查看...

    java队列实现方法(顺序队列,链式队列,循环队列)

    Java 中提供了多种实现队列的方法,包括顺序队列、链式队列和循环队列等。下面我们将详细介绍每种队列的实现方法和特点。 一、顺序队列 顺序队列是指使用数组来实现队列的数据结构。它的特点是元素在数组中的位置...

Global site tag (gtag.js) - Google Analytics