堆栈和队列
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集合类实现栈和队列.docjava中LinkedList集合类实现栈和队列.docjava中LinkedList集合类实现栈和队列.docjava中LinkedList集合类实现栈和队列.docjava中LinkedList集合类实现栈和队列.doc
使用LinkedList模拟堆栈操作,包括进栈、出栈,入队、出队
NULL 博文链接:https://quicker.iteye.com/blog/550485
list集合案例增、删、改、查,ArrayList与LinkedList的区别,LinkedList堆栈/队列的开发,list集合容量会自动扩容,list去除重复
栈是先进先出的原则,该类实现了栈的移入移除
Java 中Linkedlist类的源代码Java 中Linkedlist类的源代码Java 中Linkedlist类的源代码Java 中Linkedlist类的源代码
实现一个链表LinkedList,要求使用链表机构实现,并提供相应的add(Object o),remove(Object o)这两个方法.
NULL 博文链接:https://duqiangcise.iteye.com/blog/711415
LinkedList实现栈。对LinkedList添加同步,可以多线程操作。
非常简单的Java LinkedList 应用实例
LinkedList 是一个继承于AbstractSequentialList的双向链表。它也可以被当作堆栈、队列或双端队列进行操作。 LinkedList 实现 List 接口,能...LinkedList 实现 Deque 接口,即能将LinkedList当作双端队列使用。
主要介绍了解析Java中的队列和用LinkedList集合模拟队列的方法,相关算法的实现也是ACM中的常见题目,需要的朋友可以参考下
使用LinkedList类编写程序,用某种集合接口的实现类作存储,实现具有自定义排序功能的包含姓名、年龄、身高、职称等内容的人事信息输入和打印。
主要介绍了LinkedList学习示例,模拟一个堆栈与队列数据结构,大家参考使用吧
java LinkedList的添加删除操作 java LinkedList的添加删除操作
自定义实现的ArrayList数据结构,有大量注释以及编写思路,帮助新手用Java语言来实现数据结构
介绍了java中的常见容器linkedlist的基本操作,包括增添删改,以及迭代器的使用
【Java面试题】ArrayList和LinkedList区别
相信大家都明白 LinkedList 是基于双向链表而实现的,本篇文章主要讲解一下双向链表的实现,并且我们参考 LinkedList 自己实现一个单链表尝试一下。 什么是链表? 简单的来讲一下什么是链表:首先链表是一种线性的...
LinkedList 是一个继承于AbstractSequentialList的双向链表。它也可以被当作堆栈、队列或双端队列进行操作。接下来通过示例代码给大家详细介绍java中linkedlist的使用,需要的朋友参考下吧