JAVA基础(65)---栈
栈
定义:只能在表的一端(栈顶)进行插入和删除运算的线性表
逻辑结构:与线性表相同,仍为一对一关系
存储结构:用顺序栈或链栈存储均可,但以顺序栈更常见
运算规则:只能在栈顶运算,且访问结点时依照后进先出(LIFO)或先进后出(FILO)的原则
实现方式:关键是编写入栈和出栈函数,具体实现依顺序栈或链栈的不同而不同
基本操作:入栈、出栈、读栈顶元素值、建栈、判断栈端、栈空等
栈的实现
package org.lanqiao.stack;
public interface IStack {
/*
* 入栈
*/
public void push(Object obj);
/*
* 出栈(删除栈顶元素)
*/
public Object pop();
/*
* 获取栈顶元素(获取值但不删除栈顶元素)
*/
public Object getTop();
/*
* 判断栈是否已满
*/
public boolean isMax();
/*
* 判断栈是否为空
*/
public boolean isEmpty();
/*
* 遍历栈
*/
public void print() ;
}
package org.lanqiao.stack;
/*
* 采用顺序栈来实现
*/
public class Stack implements IStack{
private Object[] stack;//栈的底层本质
private int capacity =5;//栈的容量
private int top = -1 ;//栈顶标记
public Stack() {
stack = new Object[capacity];
}
public Stack(int capacity) {
stack = new Object[capacity];
}
@Override
public void push(Object obj) {
if(isMax()) {
System.out.println("栈已满,入栈失败。。。");
return;
}
stack[++top] = obj;
}
@Override
public Object pop() {
if(isEmpty()) {
System.out.println("栈为空,弹栈失败...");
return null;
}
return stack[top--];
}
@Override
public Object getTop() {
if(isEmpty()) {
System.out.println("栈为空,获取栈顶元素失败...");
return null;
}
return stack[top];
}
@Override
public boolean isMax() {
return top == (capacity -1);
}
@Override
public boolean isEmpty() {
return top == -1;
}
@Override
public void print() {
for(int i = 0 ; i <= top;i++) {
System.out.println(stack[i]);
}
}
}
package org.lanqiao.stack;
public class StackTest {
public static void main(String[] args) {
Stack stack = new Stack();
System.out.println(stack.isEmpty());
stack.push("aa");
stack.push("bbb");
stack.push("cc");
stack.push("dd");
stack.push("eee");
stack.push("ffff");
stack.print();
System.out.println("---------------");
Object top = stack.getTop();
System.out.println("栈顶元素:" + top);
stack.pop();
System.out.println("---------------");
stack.print();
System.out.println(stack.isMax());
}
}