栈和队列
单链表实现队列
/**
* 单链表实现队列
* @param <T> 内部的数据类型
*/
static class MyQueue<T> {
static class Node<T> {
T value;
Node<T> next;
public Node(T data) {
this.value = data;
}
}
private Node<T> head;
private Node<T> tail;
private int size;
public int size() {
return this.size;
}
public void put(T value) {
Node<T> node = new Node<>(value);
if (head == null) {
head = node;
} else {
tail.next = node;
}
tail = node;
this.size++;
}
public T peek() {
return this.head != null ? this.head.value : null;
}
public T poll() {
T result = null;
if (this.head != null) {
result = this.head.value;
this.head = this.head.next;
this.size--;
}
// 移除最后一个元素时,需要将尾部置空,否则可能存在垃圾对象的问题
if (this.head == null) {
tail = null;
}
return result;
}
}
@Test
public void testMyQueue() {
MyQueue<String> queue = new MyQueue<>();
queue.put("a");
queue.put("b");
queue.put("c");
Assert.assertEquals(queue.size, 3);
Assert.assertEquals(queue.peek(), "a");
Assert.assertEquals(queue.poll(), "a");
Assert.assertEquals(queue.poll(), "b");
Assert.assertEquals(queue.poll(), "c");
Assert.assertEquals(queue.size, 0);
Assert.assertNull(queue.head);
Assert.assertNull(queue.tail);
}单链表实现栈
双链表实现双端队列
数组实现栈
数组实现队列
可以返回最小元素的栈
使用队列结构实现栈结构
使用栈结构实现队列结构
最后更新于