1.内部用数组实现
/**
* 栈,数组实现
* @author 年糕
*
*/
public class MyStack<E> {
private Object[]data=null;
private int size;//栈大小
private int top=-1;//栈顶
public MyStack() {
size=10;
data=new Object[size];//默认容量为10
}
public MyStack(int size) {
this.size = size;
data=new Object[this.size];//有参构造函数,开辟数组
}
/**
* 进栈
*/
public void push(Object o) {
if(top==size-1) {
throw new RuntimeException("栈已满,无法将元素入栈!");
}else {
data[++top]=o;
size++;
}
}
/**
* 出栈
*/
public E pop() {
if(top==-1) {
throw new RuntimeException("栈已空,无法将元素出栈!");
}else {
size--;
return (E)data[top--];
}
}
/**
* 获取栈顶元素,不出栈
*/
public E peek() {
if(top==-1) {
throw new RuntimeException("栈空");
}else {
return (E) data[top];
}
}
/**
* 栈大小
*/
public int getSize() {
return this.top+1;
}
/**
* 判断是否为空
* @return
*/
public boolean isEmpty() {
if(this.getSize()==0) {
return true;
}else {
return false;
}
}
}
2.内部用结点实现,链栈
public class MyLinkStack<E> {
private class Node{
E e;
Node next;
public Node() {
}
public Node(E e, MyLinkStack<E>.Node next) {
this.e = e;
this.next = next;
}
}
public MyLinkStack() {
this.top=null;
this.size=0;
}
private Node top;//栈顶元素
private int size;//栈大小
/**
* 判断栈空
*/
public boolean isEmpty() {
return size==0;
}
/**
* 栈大小
*/
public int getSize() {
return this.size;
}
/**
* 入栈
*/
public void push(E e) {
top=new Node(e,top);
size++;
}
/**
* 出栈
*/
public E pop() {
if(size==0) {
System.out.println("空");
return null;
}else {
E e=top.e;
top=top.next;
size--;
return e;
}}
/**
* 获取栈顶元素,不出
*/
public E peek() {
if(size==0) {
System.out.println("空");
return null;
}else {
return top.e;
}
}
}