概念:顺序栈是使用顺序存储结构实现的堆栈,即利用一组地址连续的存储单元依次存放堆栈中的数据元素。
特点:由于堆栈是一种特殊的线性表,因此在线性表的顺序存储结构的基础上,选择线性表的一端作为栈顶即可。根据数组操作的特性,选择数组下标大的一端,即线性表顺序存储的表尾来作为栈顶,此时入栈、出栈等操作可以在Ο(1)时间完成。
代码实现:
package csdn.wj.assistant;
public interface Stack {
public class StackEmptyException extends RuntimeException {
/**
*
*/
private static final long serialVersionUID = 1L;
public StackEmptyException(String err) {
super(err);
}
}
// 返回堆栈的大小
public int getSize();
// 判断堆栈是否为空
public boolean isEmpty();
// 数据元素 e入栈
public void push(Object e);
// 栈顶元素出栈
public Object pop() throws StackEmptyException;
// 取栈顶元素
public Object peek() throws StackEmptyException;
}
package csdn.wj.linear;
import csdn.wj.assistant.Stack;
public class Stack01 implements Stack {
private final int LEN = 8;
private Object[] elements;
private int top;
// 数组的默认大小
// 数据元素数组
// 栈顶指针
public Stack01() {
top = -1;
elements = new Object[LEN];
}
// 返回堆栈的大小
public int getSize() {
return top + 1;
}
// 判断堆栈是否为空
public boolean isEmpty() {
return top < 0;
}
// 数据元素 e入栈
public void push(Object e) {
if (getSize() >= elements.length)
expandSpace();
elements[++top] = e;
}
private void expandSpace() {
Object[] a = new Object[elements.length * 2];
for (int i = 0; i < elements.length; i++)
a[i] = elements[i];
elements = a;
}
// 栈顶元素出栈
public Object pop() throws StackEmptyException {
if (getSize()<1)
throw new StackEmptyException("错误,堆栈为空。");
Object obj = elements[top];
elements[top--] = null;
return obj;
}
// 取栈顶元素
public Object peek() throws StackEmptyException {
if (getSize() < 1)
throw new StackEmptyException("错误,堆栈为空。");
return elements[top];
}
}