您的位置:首页 > 编程语言 > Java开发

基于动态数组的方法实现栈:Java语言实现

2018-05-13 14:52 417 查看

1 前言

       上一篇写了《基于简单数组的方法实现栈:Java语言实现》,但是一旦栈的最大空间给出,满栈后再执行入栈操作将会产生溢出异常,这里采用采用动态数组的方法实现栈,用数组倍增的技术解决满栈的问题,但是需要注意的是,倍增太多可能会导致内存溢出。

2 基于动态数组的方法实现栈

package Stack_Study;

/**
* Created by Administrator on 2018/5/13.
*/
public class DynArrayStack {
private int top;//栈顶元素的位置
private int capacity;//栈的容量
private int[] array;//实现栈功能的数组

public DynArrayStack(int capacity) {
this.capacity = capacity;
array = new int[capacity];
top = -1;
}

public int getTop() {
return top;
}

public int getCapacity() {
return capacity;
}

//判断栈中是否有元素
public boolean isEmpty() {
return top == -1;
}

//判断栈中是否存满元素
public boolean isStackFull() {
return (top == capacity - 1);
}

//入栈:将数据压入栈
public void push(int data) {
if(isStackFull()) {
doubleStack();
}
array[++top] = data;// top = top +1; array[top] = data;
}

//栈的大小扩容:数组倍增
public void doubleStack() {
int newArray[] = new int[2 * capacity];
System.arraycopy(array,0,newArray,0,capacity);
capacity = capacity * 2;
array = newArray;
}

//出栈:删除并返回最后一个插入栈的元素
public int pop() {
if(isEmpty()) {
System.out.println("栈为空");
return 0;
}else {
return array[top--];//array[top] = data;top = top -1 ;
}
}

//获取栈顶的元素,但不出栈
public int top() {
return array[getTop()];
}

//返回栈中元素的个数
public int size() {
return (top + 1);
}

//删除栈
public void deteleStack() {
top = -1;
}
}

3 测试

package Stack_Study;

/**
* Created by Administrator on 2018/5/13.
*/
public class DynArrayStackTest {
public static void main(String[] args) {
DynArrayStack stack = new DynArrayStack(2);
stack.push(1);
stack.push(2);
stack.push(3);
stack.push(4);
System.out.println(stack.pop());
System.out.println(stack.size());
}
}

4 参考资料

[1] 基于简单数组的方法实现栈:Java语言实现[2] 数据结构与算法经典问题解析




阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: