Java实现栈数据结构

数组实现

package stack;

/**
 * 这是一个用Java实现的栈的数据结构。
 * @author Stephen Huge
 *
 */
public class Stack {
	
	private Object[] objs;
	/**	栈的大小	*/
	private int size;			
	/**	构造方法*/
	public Stack() {	
		objs = new Object[16];
		size = 0;
	}
	/**	构造方法*/
	public Stack(Object element) {
		objs = new Object[16];
		size = 0;
		objs[size] = element;
		size++;
	}
	/**
	 * 返回栈的长度
	 */
	
	public int size() {
		return size;
	}
	/**
	 * 判断是否是空栈
	 */
	
	public boolean isEmpty() {		
		return size==0;
	}
	/**
	 * 清空栈内数据
	 */
	
	public void clear() {
		for(int i = 0; i < objs.length; i++){
			if(objs[i] != null) {
				objs[i] = null;	
			}
		}		
		size = 0;
	}
	
	public void push(Object element) {
		//判断是否需要扩容
		if(size >= objs.length) {
			reSize();
		}		
		objs[size++] = element;		
	}
	/**
	 * 数组扩容
	 */
	private void reSize() {
		Object[] temp = new Object[2 * objs.length];
		for(int i = 0; i < objs.length; i++){
			temp[i] = objs[i];
		}
		objs = temp;
	}
	/**
	 * 出栈
	 */
	
	public Object pop() {
		if(isEmpty()) {
			return null;			
		}else {
			Object temp = objs[size - 1];
			objs[size - 1] = null;
			size--;
			return temp;
		}		
	}
	public String toString() {
		if(isEmpty()) {
			return "[]";
		}else{
			StringBuilder sb = new StringBuilder();
			sb.append("ArrayStack:[");
			for(int i = 0; i < size; i++) {
				sb.append(objs[i].toString());
				if(i != size - 1){
					sb.append(", ");
				}				
			}
			sb.append("]");
			return sb.toString();
		}
	}
	
	public static void main(String[] args) {
		Stack myStack = new Stack("aaa");
		System.out.println(myStack.isEmpty());
		myStack.push("bbb");
		myStack.push("ccc");
		myStack.push("ddd");
		System.out.println(myStack.size());
		myStack.pop();
		System.out.println(myStack.size());
		System.out.println(myStack.toString());
	}
}

运行结果:

false
4
3
ArrayStack:[aaa, bbb, ccc]


链表实现

【注】:每入栈一个元素,实际操作会把这个元素变成链表的头结点,也就是会更新头结点而不是尾节点。

package stack;

import linearlist.LinkList;

/**
 * 这是一个用Java实现的链栈的数据结构。这里需要注意的是每入栈一个元素,实际操作会把这个元素
 * 变成链表的头结点,也就是会更新头结点而不是尾节点。
 * @author Stephen Huge
 *  
 */
public class LinkStack<T>{
	/**
	 * 私有内部类Node
	 */
	private class Node{
		public T data;
		public Node next;
		public Node() {	}
		public Node(T element, Node next) {
			this.data = element;
			this.next = next;
		}		
	}	
	/** 栈顶元素 */
	private Node top;
	/** 栈的长度 */
	private int size = 0;
	/**	栈的构造函数 */
	public LinkStack() {	}
	/** 有参构造函数 */
	public LinkStack(T element) {
		top = new Node();
		top.data = element;
		size++;
	}
	/** 返回栈的长度 */
	public int size() {		
		return size;
	}
	/** 判断栈是否是空栈 */
	public boolean isEmpty() {		
		return size == 0;
	}	
	/** 清空栈 */
	public void clear() {
		if(isEmpty()){
			return;
		}else {
			top = null;
			top.data = null;
			size = 0;
		}
	}
	
	/** 压栈 */
	public void push(T element) {		
		top = new Node(element, top);		
		size++;
	}
	/** 出栈 */
	public T pop() {
		if(isEmpty()){
			return null;
		}else{
			Node prevTop = top;
			top = top.next;
			prevTop.next = null;
			size--;
			return prevTop.data;
		}
	}
	 /** 按出栈顺序toString() */ 	 
		public String toString() {
			if(isEmpty()) {
				return "[]";
			}else{
				StringBuilder sb = new StringBuilder();
				Node temp = top;
				sb.append("Top[");
				for(int i = 0; i < size; i++) {				
					sb.append(temp.data.toString());
					temp = temp.next;
					if(i != size-1){
						sb.append(", ");
					}
				}			
				sb.append("]Buttom");
				return sb.toString();
			}
		}
	
	public static void main(String[] args) {
		LinkStack<String> myLinkStack = new LinkStack<String>("aaa");
		System.out.println(myLinkStack.isEmpty());
		myLinkStack.push("bbb");
		myLinkStack.push("ccc");
		myLinkStack.push("ddd");
		System.out.println(myLinkStack.size());
		myLinkStack.pop();
		System.out.println(myLinkStack.size());
		System.out.println(myLinkStack.toString());
	}	
}

运行结果:

false
4
3
Top[ccc, bbb, aaa]Buttom




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值