堆栈和队列
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();
}
}
分享到:
相关推荐
在Java中,LinkedList同样可以用于实现队列,主要通过addLast()和removeFirst()方法。 以下是使用LinkedList模拟队列的实现: 1. 创建LinkedList实例。 ```java LinkedList<Object> queue = new LinkedList(); ```...
LinkedList同样可以用来实现队列,通过add()方法添加元素到链表尾部,通过removeFirst()方法移除链表头部的元素。以下是一个使用LinkedList实现队列的Queue类示例: ```java import java.util.LinkedList; public ...
在Java编程语言中,LinkedList集合类是一个非常重要的数据结构,它可以用来实现栈和队列这两种特殊的数据结构。LinkedList是一个双链表,每个节点包含数据元素和两个引用,分别指向前后节点,这使得在列表中进行插入...
同时,我们还将讨论如何利用`LinkedList`实现堆栈和队列的功能,并了解`List`集合如何处理元素的重复性。 一、`List`接口的基础操作 1. 增加(Add):`List`接口提供了`add(E element)`方法用于添加元素到列表的...
在这个主题中,我们将深入探讨Java实现的三种基本数据结构:堆栈(Stack)、队列(Queue)和列表(List)。这些概念是计算机科学的核心部分,对理解和解决复杂问题至关重要。 1. **堆栈(Stack)**: - 堆栈是一种...
在Java中,队列的实现主要有三种:顺序队列、链式队列和循环队列。下面我们将详细探讨这三种队列的实现方式。 1. **顺序队列**: 顺序队列通常是基于数组实现的。在Java中,我们可以使用ArrayList或LinkedList来...
- **基本操作**:在Java中,可以使用`java.util.Queue`接口来实现队列。主要方法有`add()`(在队尾添加元素)、`remove()`(移除并返回队头元素)、`peek()`(查看但不移除队头元素)等。 - **实现方式**:常见的...
本篇文章将探讨如何利用`LinkedList`来实现队列和栈这两种数据结构,以及其背后的原理和源码分析。 ### 1. 队列(Queue) 队列是一种先进先出(FIFO, First In First Out)的数据结构。在Java中,可以使用`...
栈是先进先出的原则,该类实现了栈的移入移除
例如,实现队列使用堆栈的方式,实现堆栈使用队列的方式,以及验证括号的有效性。这些问题不仅是算法学习中的经典题目,同时也是技术面试中的高频题目,需要应聘者具备扎实的数据结构和算法基础。 进一步深入堆栈和...
Java队列模拟实现是一个典型的计算机科学中的数据结构应用,它主要涉及了Java编程语言和队列数据结构。在这个工程中,开发者已经创建了一个基于图形用户界面(GUI)的应用程序,用于演示和操作队列的各种功能。以下...
无论使用自定义的数组或链表结构,还是使用内置的Stack类,理解堆栈的工作原理和如何在Java中实现它们是每个Java开发者的基本功。通过学习和实践,我们可以更好地利用堆栈这一强大的数据结构来解决复杂的问题。
在计算机科学中,数据结构是组织、存储和处理数据的方式,...通过理解这些基本概念和代码示例,你可以轻松地在Java项目中实现和使用队列数据结构。记住,选择哪种实现取决于具体的需求,如性能、内存使用和功能需求。
在Java中,我们可以使用LinkedList、ArrayDeque或者PriorityQueue来实现队列。在示例中,如果我们将 `myGet()` 方法中的 `link.removeLast()` 改为 `link.removeFirst()`,则可以实现队列的“先进先出”特性,即从...
LinkedList类位于java.util包中,它还实现了Deque(双端队列)接口,提供了额外的功能。 LinkedList的源代码包含了许多重要的方法和内部类。首先,我们来看它的主要属性: 1. **header**: 这是一个内部静态节点类...
Java提供了多种内置数据结构,如LinkedList和ArrayDeque,来实现队列操作。然而,手动模拟队列可以帮助开发者更直观地理解其内部机制。 2 队列的Java实现 在Java中,队列的实现通常涉及以下核心操作: - 插入元素...
`LinkedList`类实现了`Deque`接口,这个接口包含了堆栈和队列的操作,因此我们可以通过它来实现堆栈功能。例如,我们可以使用`push()`方法添加元素到堆栈顶部,`pop()`方法移除并返回顶部元素,以及`peek()`方法查看...
在Java中,我们可以使用`java.util.Queue`接口及其实现类,如`LinkedList`或`ArrayDeque`来创建队列。 接下来,我们需要创建两个线程类:一个是`CustomerThread`,代表等待叫号的客户,另一个是`ServiceThread`,...
Java 中提供了多种实现队列的方法,包括顺序队列、链式队列和循环队列等。下面我们将详细介绍每种队列的实现方法和特点。 一、顺序队列 顺序队列是指使用数组来实现队列的数据结构。它的特点是元素在数组中的位置...
3. 使用LinkedList实现队列的基本操作。 4. BinaryTree类中使用队列辅助进行节点的层级遍历。 5. 中序和前序遍历二叉树的递归算法实现。 这些知识点构成了数据结构与算法中二叉树操作的基础,对于学习数据结构以及...