栈的常见操作:以下 方法也是栈操作的规范
1 入栈
2 出栈
3 判断栈是否为空
4 判断栈是否已满
5 返回栈顶元素
6 返回元素在栈中的位置
7 返回栈的实际长度
8 返回栈的容量
9 打印栈
栈接口
public interface IStack {
//1 入栈
boolean push(Object obj);
// 2 出栈
Object pop();
// 3 判断栈是否为空
boolean isEmpty();
// 4 判断栈是否已满
boolean isFull();
// 5 返回栈顶元素
Object peek();
// 6 返回元素在栈中的位置
int getIndex(Object obj);
// 7 返回栈的实际长度
int size();
// 8 返回栈的容量
int getStatckSize();
// 9 打印栈
void display();
}
栈的实现:
用数组模拟栈的结构
public class StackImpl implements IStack {
//定义栈的属性
private Object[] data = null;
private int top = -1;// 栈顶
private int maxSize = 0 ;// 表示栈的容量
public StackImpl(){// 默认初始化一个容量为10的栈
this(10);
}
// 创建一个栈结构 并对栈进行初始化
public StackImpl(int initialSize){
if(initialSize >= 0){
this.data = new Object[initialSize];
this.maxSize = initialSize;
this.top=-1;
}
}
@Override
public boolean push(Object obj) {
if(isFull()){//如果栈已满
System.out.println("栈已满,入栈失败!");
return false;
}
top++;// 更新栈顶指针
data[top] = obj;//将元素保存到栈中
return true;
}
@Override
public Object pop() {
if(isEmpty()){
System.out.println("栈为空,没有可出栈的元素");
return null;
}
Object topObj = data[top];// 获取栈顶元素
top--;
return topObj;
}
@Override
public boolean isEmpty() {
return top == -1 ? true:false;
}
@Override
public boolean isFull() {
return top >= maxSize -1? true:false;
}
@Override
public Object peek() {
if(isEmpty()){
System.out.println("栈为空,没有可出栈的元素");
return null;
}
return data[top];
}
@Override
public int getIndex(Object obj) {
// 需要不断的获取栈顶和目标元素进行比较
while(top != -1){
if( peek().equals(obj)){
return top;
}
top--;
}
return -1;// 表示元素不存在
}
@Override
public int size() {
return 0;
}
@Override
public int getStatckSize() {
return this.top +1;
}
@Override
public void display() {
while(top != -1){
System.out.println(data[top]);
top--;
}
}
public static void main(String[] args) {
// 创建一个栈
IStack stack = new StackImpl();
// 入栈
for(int i = 0 ; i < 10 ;i++){
stack.push(i);
}
stack.push("aa");
stack.display();
}
}