Java链表栈LinkedStack

链表实现的栈,在想象栈的时候,最好把他竖着想象成一个立着的容器。  

 * 然后往里面一个一个的加节点:  

 * 1.先加入top节点  

 * 2.然后再在top节点上加入node1节点,node1节点指向top节点  

 * 3.再在node1节点上加入node2节点,node2节点指向node1节点  

 * ..........  

   

 

Java实现链栈之前,我们首先应该创建一个链表节点类:LinkNode,代码如下:

/**
 * 链表节点
 * 
 * @author 鼎鼎
 * 
 * @param 
 */
public class LinkNode {
	/**
	 * 表示存储在节点中的数据项
	 */
	private E data;

	private LinkNode next;

	public LinkNode(E data) {
		this.data = data;
		this.next = null;
	}

	public LinkNode(E data, LinkNode next) {
		this.data = data;
		this.next = next;

	}

	public E getData() {
		return data;
	}

	public void setData(E data) {
		this.data = data;
	}

	public LinkNode getNext() {
		return next;
	}

	public void setNext(LinkNode next) {
		this.next = next;
	}

}

 

 

然后 是具体的链栈的实现,代码如下:

/**
 * 链表实现的栈,在想象栈的时候,最好把他竖着想象成一个立着的容器。
 * 然后往里面一个一个的加节点:
 * 1.先加入top节点
 * 2.然后再在top节点上加入node1节点,node1节点指向top节点
 * 3.再在node1节点上加入node2节点,node2节点指向node1节点
 * ..........
 * 
 * @author 鼎鼎
 *
 * @param 
 */
public class LinkedStack implements Stack {
	// 表示链表的头结点
	private LinkNode top;

	// 表示链表中当前的元素个数
	private int size;

	public LinkedStack() {
		this.top = null;
		size = 0;

	}

	public boolean isEmpty() {
		return top == null;
	}

	public E pop() {
		if (isEmpty()) {

			throw new RuntimeException("链表为空!!");
		}
		// 将栈顶元素的值保存起来
		E tempData = top.getData();
		// 然后出栈,次栈顶元素成为新的栈顶元素
		top = top.getNext();
		// 栈中元素个数减少一
		size--;
		return tempData;
	}

	public void push(E target) {
		if(target==null){
			throw new RuntimeException("不能往栈中加入null元素");
			
		}
		LinkNode newNode = new LinkNode(target);
		if (isEmpty()) {
			top = newNode;
		} else {
			//新加入的节点放入栈中,并指向原来的top节点
			newNode.setNext(top);
			// 新加入的元素成为了新的栈顶
			top = newNode;
		}
		size++;
	}

	public int size() {
	   return size;
	}

	public E top() {
		if (isEmpty()) {

			throw new RuntimeException("链表为空!!");
		}
		return top.getData();
	}

}

 

你可能感兴趣的:(数据结构复习)