版权声明:转载请注明出处: https://blog.csdn.net/qq_34774655/article/details/85269701
通过学习自定义链表,了解链表的数据结构。
本篇以链表的方式实现栈。(参看以数组的方式实现栈)
虽然自定义链表(1)中的链表的时间复杂度都为O(n),但若只对链表的表头进行增、删、查,都为O(1),利用这一点,可以用来实现栈。
首先写一个栈的接口,描述其具有的基本功能。Stack.java
然后,引用自定义链表(1)中的: LinkedList.java
然后写一个接口的实现类,这只是其中一种实现方式。LinkedListStack.java
最后写一个测试类,测试自定义栈的效果。Test.java
LinkedListStack.java:
扫描二维码关注公众号,回复:
4762577 查看本文章
package algorithm;
public class LinkedListStack <E> implements Stack<E>{
private LinkedList<E> list;//维护一个自定义的list链表。
/**
* 无参构造函数
*/
public LinkedListStack(){
list=new LinkedList<E>();
}
/**
* 获取栈的大小
*/
@Override
public int getSize() {
return list.getSize();
}
/**
* 判断栈是否为空
*/
@Override
public boolean isEmpty() {
return list.isEmpty();
}
/**
* 入栈
*/
@Override
public void push(E e) {
list.addFirst(e);
}
/**
* 出栈
*/
@Override
public E pop() {
return list.removeFirst();
}
/**
* 查看栈顶元素
*/
@Override
public E peek() {
return list.getFirst();
}
/**
* 重写Object的toString方法
*/
@Override
public String toString() {
StringBuilder sb=new StringBuilder();
sb.append("Stack: top ");
sb.append(list);
return sb.toString();
}
}
Test.java:
package algorithm;
public class Test {
public static void main(String[] args) {
Stack<Integer> stack=new LinkedListStack<Integer>();
for(int i=0;i<5;i++) {
stack.push(i);
System.out.println(stack);
}
stack.pop();
System.out.println(stack);
}
}
控制台输出: