基础数据结构之栈(用Java语言实现)

栈又叫做堆栈;是允许在同一端进行插入与删除操作的特殊线性表。其中执行插入删除操作的一段叫栈顶(Top),另一端为栈底(Bottom)。栈底固定,栈顶浮动。当栈内没有元素时,该栈叫做空栈。

插入过程叫做进栈(Push);

删除过程叫做出栈(Pop);

栈遵循FILO(First in Last Out),先入后出的原则。

示意图如下:

基础数据结构之栈(用Java语言实现)

方法 功能描述
push() 向栈内压入一个数据,在栈的最下面
pop() 弹出栈顶元素,出栈
peek() 返回当前栈顶数据

首先定义栈的基本数据结构:

public class Stack<E>{
    private Object[] data=null;
    private int maxSize;
    private int top=-1;
    
    Stack(){
        this(10)
    }
    
    Stack(int initalSize){
        if(initalSize>=0){
            this.maxSize=initalSize;
            data=new Object(initalSize);
            top=-1;
        }else{
         	throw new RuntimeException("初始化大小不能小于0"+initalSize);   
        }
    }
}

该段代码定义了一个栈类,‘定义了一个数组data,用于存储数据;定义了一个maxSize,用于规定栈的最大容量;

定义了栈顶指针为-1;同时无参构造函数中,栈的默认大小为10,当然也提供了有参的构造方法,帮助其规定其他容量的栈。

//进栈,第一个元素top=0
public boolean push(E e){
    if(top==maxSize-1){
        throw new RuntimeException("栈已满,无法再继续入栈")
    }else{
        data[++top]=e;
        return true;
    }
} 

进栈前首先要判断是否栈已经满了,要是满了,则压不了栈;注意top指针是从-1开始的,因此top==maxSize-1的时候就是栈已经满了;入栈就是data[++top]=e,(指针不断上移)然后返回true(因为该函数返回值是布尔值)。

出栈,从栈顶移除数据

public E pop(){
    if(top==-1){
        throw new RuntimeException("栈为空")
    }else{
        return (E)data[top--];
    }
}

上面方法定义了pop(),注意这里是data[top–],先把数据移除去,再top减一

仔细推向一下,一开始top=-1;压入一个,top就是0了,也就是top要比maxSize小一个。

public E peek(){
    if(top==-1){
        throw new RuntimeException("栈为空")
    }else{
        return (E)data[top];
    }
}

这个和pop()差不多

上一篇:List分段


下一篇:Python内置函数之 print - 屏幕输出(打印)内容