数据结构三.用链表实现栈

代码如下:

package dataStruct;
 class Node {
	
	Object element;
	Node next;
	
	public Node(Object element){
		this(element,null);
	}
	
	/**
	 * 创建一个新的节点
	 * 让他的next指向,参数中的节点
	 * @param element
	 * @param n
	 */
	public Node(Object element,Node n){
		this.element=element;
		next=n;
	}
	
	public Object getElement() {
		return element;
	}
	
}
public class LinkToStack {
	Node header;//栈顶元素
	int elementCount;//栈内元素个数
	int size;//栈的大小
	
	/**
	 * 构造函数,构造一个空的栈
	 */
	public LinkToStack(){
		header=null;
		elementCount=0;
		size=0;
	}
	
	/**
	 * 通过构造器自定义栈的大小
	 * @param size
	 */
	public LinkToStack(int size) {
		header=null;
		elementCount=0;
		this.size=size;
	}
	
	public void setHeader(Node header) {
		this.header=header;
	}
	
	public boolean isFull() {
		if (elementCount==size) {
			return true;
		}
		
		return false;
	}
	
	public boolean isEmpty() {
		if (elementCount==0) {
			return true;
		}
		
		return false;
	}
	
	/**
	 * 入栈
	 * @param value
	 */
	public void push(Object value) {
		if (this.isFull()) {
			throw new RuntimeException("Stack is Full");
		}
		//注意这里面试将原来的header作为参数传入,然后以新new出来的Node作为header
		header=new Node(value, header);
		elementCount++;
	}
	
	/**
	 * 出栈
	 * @return
	 */
	public Object pop() {
		if (this.isEmpty()) {
			throw new RuntimeException("Stack is empty");
		}
		Object object=header.getElement();
		
		header=header.next;
		
		elementCount--;
		
		return object;
	}
	
	/**
	 * 返回栈顶元素
	 */
	public Object peak(){
		
		if (this.isEmpty()) {
			throw new RuntimeException("Stack is empty");
		}
		
		return header.getElement();
	}
	
	public static void main(String[] args) {
		LinkToStack ls = new LinkToStack(20);
		ls.push("23");
		ls.push("33");
		System.out.println(ls.pop());
		
	}
}

猜你喜欢

转载自blog.csdn.net/gegeyanxin/article/details/81987140