1 概述
栈是一种后进先出的数据结构,本文使用链表方式实现简单的栈结构,功能包括添加、删除、遍历。
2 代码实现
package com.niuniu.studyalgorithm;
import java.util.Iterator;
import java.util.Spliterator;
import java.util.function.Consumer;
/**
* @author 002991
* 自定义链表栈
*/
public class ChainStack<Item> implements Iterable<Item>{
/**
* 栈顶
*/
private Node first;
/**
* 元素数量
*/
private int size;
/**
* 栈是否为空
* @return
*/
public boolean isEmpty(){
return first == null;
}
/**
* 栈的数量
* @return
*/
public int size(){
return size;
}
/**
* 向栈中添加元素
* @param item
*/
public void push(Item item){
Node oldFirst = first;
first = new Node();
first.item = item;
first.next = oldFirst;
size++;
}
/**
* 从栈中取元素
* @return
*/
public Item pop(){
Item item = first.item;
first = first.next;
size--;
return item;
}
/**
* 自定义节点
*/
private class Node{
Item item;
Node next;
}
//下面是省略Iterator的实现
@Override
public Iterator<Item> iterator() {
return new ListIterator();
}
@Override
public void forEach(Consumer<? super Item> action) {
}
@Override
public Spliterator<Item> spliterator() {
return null;
}
private class ListIterator implements Iterator<Item>{
private Node current = first;
@Override
public boolean hasNext() {
return current != null;
}
@Override
public Item next() {
Item item = current.item;
current = current.next;
return item;
}
@Override
public void remove() {
}
@Override
public void forEachRemaining(Consumer<? super Item> action) {
}
}
}
3 总结
本文使用链表实现栈的数据结构,解决了扩容造成的性能问题。