主文章(数据结构的索引目录—进不去就说明我还没写完) |
---|
https://blog.csdn.net/grd_java/article/details/122252696 |
1. 数组实现(Stack Array Implementation)
代码:com/yzpnb/data_structures/stack/array_implementation/Stack.java |
---|
import java.util.Arrays;
public class Stack<E> {
private int top = 0;
private Object[] array;
public Stack(){
this.array = new Object[10];
System.out.println("栈初始成功!!!初始大小10");
}
public Stack(int size){
this.array = new Object[size];
System.out.println("栈初始成功!!!初始大小"+size);
}
private boolean isFull(){
return top==array.length;
}
private boolean isEmpty(){
return top == 0;
}
private void arrayExtend(){
array = Arrays.copyOf(array, array.length * 2);
}
public void push(E o){
if(isFull()){
arrayExtend();
System.out.println("栈满扩容");
}
array[top] = o;
top++;
System.out.println((E)o+"入栈成功");
}
public E peek(){
if(isEmpty()){
return null;
}
return (E)array[top-1];
}
public E pop(){
if(top == 0){
throw new RuntimeException("栈已空!!!");
}
System.out.print("出栈");
return (E)array[--top];
}
public static void main(String[] args) {
Stack<Integer> integerStack = new Stack<>(2);
integerStack.push(1);
integerStack.push(2);
integerStack.push(3);
System.out.println(integerStack.pop());
System.out.println(integerStack.pop());
System.out.println(integerStack.pop());
System.out.println(integerStack.pop());
}
}
2. 链表实现(Linked List Implementation)
代码:com/yzpnb/data_structures/stack/linked_list_implementation/Stack.java |
---|
public class Stack<E> {
private static class Node<E> {
E item;
Stack.Node<E> prev;
Node(Node<E> prev, E element) {
this.item = element;
this.prev = prev;
}
}
private Node<E> top = null;
private final Integer MAXSIZE = 65536;
private Integer size = 6;
private Integer length = 0;
public Stack(){
System.out.println("栈初始成功,当前栈没有元素,大小为6");
}
public Stack(int size){
this.size = size;
System.out.println("栈初始成功,当前栈没有元素,大小为"+size);
}
public Stack(E e){
Node<E> eNode = new Node<>(null, e);
this.length++;
this.top = eNode;
System.out.println("栈初始成功!!!当前栈顶元素为:"+top.item+",栈大小为6");
}
public Stack(E e,int size){
this.size = size;
Node<E> eNode = new Node<>(null, e);
this.top = eNode;
this.length++;
System.out.println("栈初始成功!!!当前栈顶元素为:"+top.item+",栈大小为"+size);
}
private boolean isFull(){
return length == size;
}
private boolean isEmpty(){
return length == 0;
}
private void extendStack(){
if(size == MAXSIZE){
throw new RuntimeException("栈大小已达上限!!!");
}
if(size*2>=MAXSIZE){
size = MAXSIZE;
}else if(size*2<MAXSIZE) {
size *= 2;
}
}
public void push(E e){
if(isFull()){
extendStack();
System.out.println("栈满扩容");
}
if(top == null){
Node<E> eNode = new Node<>(null, e);
this.top = eNode;
this.length++;
}else{
Node<E> eNode = new Node<>(top, e);
this.top = eNode;
this.length++;
}
System.out.println((E)e+"入栈成功");
}
public E peek(){
if(isEmpty()){
return null;
}
return top.item;
}
public E pop(){
if(isEmpty()){
throw new RuntimeException("栈已空!!!");
}
System.out.print("出栈");
E item = top.item;
top = top.prev;
this.length--;
return item;
}
public static void main(String[] args) {
Stack<Integer> integerStack = new Stack<>(2);
integerStack.push(1);
integerStack.push(2);
integerStack.push(3);
System.out.println(integerStack.pop());
System.out.println(integerStack.pop());
System.out.println(integerStack.pop());
System.out.println(integerStack.pop());
}
}