栈(图文详解以及实现它的一些方法)

栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。
进行数据插入和删除操作的一端 称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。 压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。
出栈:栈的删除操作叫做出栈。出数据也在栈顶。

在这里插入图片描述
在这里插入图片描述


     package www.bittech;
        
        public interface IMyStack {
            // 将 item 压入栈中
            void push(int item);
            // 返回栈顶元素,并且出栈
            int pop();
            // 返回栈顶元素,但不出栈
            int peek();
            // 判断这个栈是否为空栈
            boolean empty();
            // 返回元素个数
            int size();
        }



public class MyStacklmpl implements IMyStack {
    //top所指向位置为存放数据元素的下标
    private int[] elem;//存放数据的数组
    private int top;//栈顶
    private int usedSize;
    public MyStacklmpl(int size){
        this.elem=new int[size];
        this.top=0;
        this.usedSize=0;
    }
    //判断栈是否是满的
    private  boolean isFull(){
        return this.top==this.elem.length;
    }
    @Override
    public void push(int item) {
        if(isFull()){
            throw  new UnsupportedOperationException("栈满了");
        }
        this.elem[this.top++]=item;
        this.usedSize++;
    }


    @Override
    public int pop() {
        if(empty()){
            throw new UnsupportedOperationException("栈空了");
        }
        this.top--;
        this.usedSize--;
        return this.elem[this.top];

    }

    @Override
    public int peek() {
        if(empty()){
            throw new UnsupportedOperationException("栈空了");
        }
        return this.elem[this.top-1];
    }
//判断栈是否为空
    @Override
    public boolean empty() {
        return this.usedSize==0;
    }
//得到栈的长度
    @Override
    public int size() {
       return this.usedSize;
    }
   

猜你喜欢

转载自blog.csdn.net/qq_44149554/article/details/90642569