算法Java手写实现栈
Posted 泡^泡
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法Java手写实现栈相关的知识,希望对你有一定的参考价值。
栈是什么
Stack是Java中常用的数据结构之一,Stack具有"后进先出(LIFO)"的性质。 只能在一端进行插入或者删除,即压栈与出栈。可以使用数组实现。
栈的特点:
入栈的时候,只在数组尾部插入
出栈的时候,只在数组尾部删除
栈的实现
package com;
import java.util.Arrays;
public class MyStack<E>
//底层是数组
private Object[] elements;
//栈的个数
private int size = 0;
public MyStack()
this(10);
public MyStack(int capacity)
if(capacity <= 0)
throw new RuntimeException("初始化容量错误");
elements =new Object[capacity];
/**
* 将一个元素压入栈中
* @param e
*/
public void push(E e)
//如果栈已满,进行扩容
if(size >= elements.length)
grow();
elements[size++] = e;
/**
* 扩容
*/
private void grow()
//将之前的数组保存
int oldCapacity = elements.length;
Object[] old = elements;
//新的数组大小为原来数组大小的2倍
int newCapacity = oldCapacity * 2;
//再新建一个大小为原来数组2倍的新数组
elements = new Object[newCapacity];
//把以前的老的数组中的元素都移动新数组中
for (int i = 0; i < oldCapacity; i++)
elements[i] = old[i];
//释放以前的内存空间
old = null;
/**
* 出栈,就是将数组最后一个元素弹出
* @return
*/
public Object pop()
if(isEmpty())
return null;
E e = peek();
elements[--size] = null;
return e;
/**
* 返回最后一个元素
* @return
*/
public E peek()
int len = size();
if(len == 0)
throw new RuntimeException("stack is empty");
return (E)elements[len - 1];
public int size()
return size;
public boolean isEmpty()
return size == 0;
public void print()
System.out.print(Arrays.toString(elements)+"\\n");
public static void main(String[] args)
MyStack<String> myStack = new MyStack();
myStack.push("a");
myStack.push("b");
myStack.push("c");
myStack.push("d");
myStack.push("e");
myStack.print();
System.out.println(myStack.pop());
myStack.print();
System.out.println(myStack.peek());
System.out.println(myStack.pop());
myStack.print();
System.out.println(myStack.pop());
myStack.print();
myStack.push("f");
System.out.println(myStack.peek());
myStack.print();
System.out.println("栈小大:"+myStack.size());
System.out.println("栈是否为空:"+myStack.isEmpty());
以上是关于算法Java手写实现栈的主要内容,如果未能解决你的问题,请参考以下文章