package com.Stack;
/**
* 用数组实现一个简单的栈
* 方法:
* 压入元素 push()
* 弹出栈顶元素 pop()
* 栈的大小 size()
* 栈是否为空 isEmpty()
*/
public class ArrayToStack<Item> {
int N =0;
Item arr[] ;
public ArrayToStack(int length){
this.arr = (Item[]) new Object[length];
}
/**
* 向栈中添加元素
* @param item
*/
public void push(Item item){
if(N < arr.length) arr[N++] = item; //注意:假如第一次向里面添加数据。此时N = 0,arr[0] = item,过后N++ 变成1
if(N == arr.length) resize(2*arr.length);
}
/**
* 弹出栈顶元素
* @return
*/
public Item pop(){
Item item ;
if (!isEmpty()) {
item = arr[--N]; //注意:假如第一次向里面添加数据之后并删除此数据。此时N = 1,--N后N变成0 item=arr[0]返回item,并把arr[0]置为空
arr[N] = null; //这个元素删除了,置为空方便回收
} else {
throw new RuntimeException("empty stack");
}
if(N==arr.length/4) resize(arr.length/2);
return item;
}
/**
* 栈是否为空
* @return
*/
public boolean isEmpty(){
return N == 0;
}
/**
* 栈的长度
* @return
*/
public int size(){
return N;
}
/**
* 将栈扩容
* @param i
*/
private void resize(int i) {
Item [] temp = (Item[]) new Object[i];
for (int j = 0; j < i/2; j++) {
temp[j] = arr[j];
}
arr = temp;
}
/**
* 打印栈中的元素
*/
public void print(){
for (int i = 0; i <N ; i++) {
System.out.print(arr[i]);
}
System.out.println();
}
}
利用数组实现一个简单的栈
最新推荐文章于 2025-07-19 08:00:47 发布