Two different implementations of stacks in Java Data Structures:

1. Link form

package cn.com.Inf;

public interface StackADT<T> {
	public void push(T element);//Add the header
	public T pop();//Head delete
	public T peek();//View the header element
	public boolean isEmpty();//
	public int size();//
	public String toString();//
}

package cn.com.MyStack;

import java.util.EmptyStackException;

import cn.com.Inf.StackADT;
import cn.com.Node.StackNode;

public class MyStack<T> implements StackADT<T> {
	private StackNode<T> top;
	private int count;
	@Override
	public void push(T element) {
		// TODO Auto-generated method stub
		StackNode<T> temp = new StackNode<T>(element);
			temp.setNext(top) ;
			top = temp;
			count++;
	}

	@Override
	public T pop() {
		// TODO Auto-generated method stub
		T result = null;
		if(isEmpty()){
			throw new EmptyStackException();
		}
		result = top.getElement();
		top = top.getNext();
		count--;
		return result;
	}

	@Override
	public T peek() {
		// TODO Auto-generated method stub
		T result = null;
		if(isEmpty()){
			throw new EmptyStackException();
		}
		result = top.getElement();
		return result;
	}

	@Override
	public boolean isEmpty() {
		// TODO Auto-generated method stub
		return (count == 0);
	}

	@Override
	public int size() {
		// TODO Auto-generated method stub
		return count;
	}
	public String toString(){
		T [] result = (T  [])new Object[count];
		for(int i = 0 ; i < count ; i++){
			result[i] =  top.getElement();
			System.out.println(result[i]);
			top = top.getNext();
		}
		return "";
	}
}

package cn.com.Node;

public class StackNode<T> {
	private StackNode<T> next;
	private T element;
	
	public  StackNode(){
		next = null;
		element = null;
	}
	
	public  StackNode(T element){
		next = null;
		this.element = element;
	}

	public StackNode<T> getNext() {
		return next;
	}

	public void setNext(StackNode<T> next) {
		this.next = next;
	}

	public T getElement() {
		return element;
	}

	public void setElement(T element) {
		this.element = element;
	}

	
	
	
}
2. Array implementation

package cn.com.Inf;

public interface StackADT<T> {
	public void push(T element);
	public  T pop();
	public T peek();
	public boolean isEmpty();
	public int size();
	public String toString();
}

package cn.com.MyStackTwo;

import java.util.EmptyStackException;

import cn.com.Inf.StackADT;

public class MyStackTwo<T> implements StackADT<T>{
	private T[] contents;
	private T next;
	private int top;
	private int init_capcity =2;
	public MyStackTwo(){
		top = 0;
		contents = (T[])new Object[init_capcity];
	}
	public void push(T element) {
		// TODO Auto-generated method stub
		if(this.size() == contents.length){
			expands();
		}
		contents[top] = element;
		top++;
	}

	private void expands() {
		// TODO Auto-generated method stub
		T[] temp = (T[])( new Object[contents.length*2]);
		for(int i = 0 ; i < contents.length ; i++){
			temp[i] = contents[i];
		}
		contents = temp;
	}
	@Override
	public T pop() {
		// TODO Auto-generated method stub
		T result = null;
		if(isEmpty()){
			throw new EmptyStackException();
		}
		top--;
		result = contents[top];
		contents[top] = null;
		return result;
	}

	@Override
	public T peek() {
		T result = null;
		if(isEmpty()){
			throw new EmptyStackException();
		}
		top--;
		result = contents[top];
		return result;
	}

	@Override
	public boolean isEmpty() {
		// TODO Auto-generated method stub
		return (top == 0);
	}

	@Override
	public int size() {
		// TODO Auto-generated method stub
		return top;
	}

}



Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325929253&siteId=291194637