栈的定义
栈作为数据结构中的一种,满足FILO(先进后出功能),因此有pop方法-存储数据,我们称之为进栈或者压栈,push方法-删除数据,称之为出栈或者弹栈,peek方法-查看栈顶数据。
栈结构
分析
栈这种数据结构,用数组来存储的时候。
步骤:
1.创建一个自己的栈Stack类,需要一个泛型E。
2.成员变量,Object数组,数组大小,以及顶部指针。
3.需要两个构造器,一个无参构造,一个初始化数组大小大的数组。
4.pop()方法,不停的从顶部插入数据。
5.peek()方法,获取顶部数据。
6.push()方法,擦除顶部数据。
代码
public class Stack<E> {
private Object[] data = null; //存入进栈的数据
private int maxSize = 0; // 栈容量
private int top = -1; // 栈顶部指针,为了到时候能够找到栈顶数据
/**
* 无参构造
*/
public Stack() {
this(10);
}
/**
* 有参构造,初始化容量
* @param initialSize
*/
public Stack(int initialSize) {
if(initialSize >= 0) {
this.maxSize = initialSize;
data = new Object[maxSize];
this.top = -1;
}else {
throw new RuntimeException("初始化大小不能小于0:" + initialSize);
}
}
/**
*
* [进栈,压栈,第一个元素位置为0]
* @return
* @exception/throws [违例类型] [违例说明]
* @see [类、类#方法、类#成员]
*/
public boolean push(E e) {
if(top == maxSize - 1) {
throw new RuntimeException("栈已满,无法继续存储元素!");
}else {
data[++top] = e;
return true;
}
}
/**
*
* [出栈,从顶部数据移除]
* @return
* @exception/throws [违例类型] [违例说明]
* @see [类、类#方法、类#成员]
*/
public E pop() {
if(top == -1) {
throw new RuntimeException("栈已空!");
}else {
return (E) data[top--]; //此时top值减一,下次再进栈的时候,会将原来的数据替换。
}
}
/**
*
* [查询顶部数据,但是不移除]
* @return
* @exception/throws [违例类型] [违例说明]
* @see [类、类#方法、类#成员]
*/
public E peek() {
if(top == -1) {
throw new RuntimeException("栈已空!");
}else {
return (E) data[top];
}
}
}