自定义链表(2):用链表的方式实现栈

版权声明:转载请注明出处: 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);
	}

}

控制台输出:

猜你喜欢

转载自blog.csdn.net/qq_34774655/article/details/85269701
今日推荐