一.数组实现固定大小的栈和队列

1.用数组结构实现大小固定的栈

分析:栈是先进后出的结构,存进去的是12345,那么弹出的要是54321.

思路:1.创建一个数组,数组的长度是固定的(用来实现大小固定的栈);2.要有一个指针(指向的是数组的第一个空位置),用来指示数据进栈的下标位置,同时指示数据出栈的下标位置。

class ArrayStack(){
    private int[] arr;
    int index;
    
    //1.初始化:创建好空数组,指针指向0位置
    public ArrayStack(int initSize){
        if(initSize<=0){
            throw new IllegalArgumentException("栈的初始尺寸不能小于等于0");
        }
        arr=new int[initSize];
        index=0;
    }

    //2.进栈操作
    public void push(int i){
        if(index==arr.length){
            throw new ArrayIndexOutOfBoundsException("栈满员啦");
        }
        arr[index++]=i;
    }

    //3.出栈操作
    public int pop(){
        if(index==0){
            throw new ArrayIndexOutOfBoundsException("栈是空的,弹不出元素");
        }
        return arr[--index];
    }

    //4.弹出栈顶元素(数组中保留这个元素)
    public int peek(){
        if(index==0){
            throw new ArrayIndexOutOfBoundsException("栈是空的,栈顶弹不出元素");
        }
        return arr[index-1];
    }
}

2.用数组结构实现大小固定的队列

分析:队列是先进先出的结构,存进去的是12345,那么弹出的要是12345.

思路:1.创建一个数组,数组的长度是固定的(用来实现大小固定的队列);2.要有三个指针,第一个指针表示的是可以添加元素的第一个空位置end,第二个指针表示的是第一个输出的元素的位置start,第三个指针表示的是已经填充数据的数组的尺寸size

class ArrayQueue{
    private int[] arr;
    int start;
    int end;
    int size;
    
//1.构造函数初始化数组和各个变量
    public ArrayQueue(int initSize){
        if (initSize<0) {
				throw new IllegalArgumentException("初始尺寸小于0");
			}
			arr=new int[initSize];
			start=0;
			end=0;
			size=0;
    }

//2.添加元素到末尾
    public void push(int i){
        if(size==arr.length){
            throw new ArrayIndexOutOfBoundsException("数组满员,不能在添加了");
        }
        size++;
        int[end]=i;
        end=end==arr.length-1?0:end+1;//判断尾指针是不是在末尾,如果是的话,他的下一个位置就到了0位置(数组循环使用)
    }

//3.从头部输出元素
    public int poll(){
        if(size==0){
            throw new ArrayIndexOutOfBoundsException("数组为空,不能输出元素");
        }
        size--;
        int temp=start;
        start=start==arr.length-1?0:start+1;
        return arr[temp];
    }

//4.输出第一个元素(数组中保留这个元素)
    public int peek(){
         if(size==0){
            throw new ArrayIndexOutOfBoundsException("数组为空,不能输出第一个元素");
        }
        return arr[start];
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值