左神算法学习笔记基础篇(2):栈和队列

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

数组实现队列

1.题目

用数组实现大小固定的队列

2.算法思路

队列的特性是先进先出,后进后出。

  1. 可以设置队列的队头start和队尾end。然后队列的长度size。
  2. 队列的push方法,只需要将此时start索引处的值输出,然后,start需要向后移一个(如果原本在数组的最后一位,则移动到数组第一位)。同时size减1。
  3. 队列的poll方法,只需要将end向后移一个(如果原本在数组的最后一位,则移动到数组第一位),然后在新的end索引填上该数。同时size加1。
  4. 队列的peek方法,直接输出start索引处的元素即可。

3.算法代码

 public static class arrayQueue{
   
        private int[] arr;
        private int start;
        private int end;
        private int size;
        public arrayQueue(int arraySize){
   
            arr = new int[arraySize];
            start = 0;
            end = 0;
            size = 0;
        }
        //输出队列的队头元素
        public int peek(){
   
            if(size == 0){
     //若队列是空的,抛异常
                throw new ArrayIndexOutOfBoundsException("队列是空的");
            }
            return arr[start];
        }
        //向队列中添加元素
        public void push(int num){
   
            if(size == arr.length){
    //若队列已满,抛异常
                throw new ArrayIndexOutOfBoundsException("队列已经满了");
            }
            size++; //因为添加元素,故size加1
            end = end==arr.length-1 ? 0 : end+1;//队尾指针如果本来指在数组最后一位,那么跳到0。否则加1
            arr[end] = num;     //在新的队尾加入该新元素
        }
        //队列输出队头元素并删除
        public int pop(){
   
            if(size == 0){
   
                throw new ArrayIndexOutOfBoundsException("队列是空的");
            }
            size--; //因为删除元素,故size减1
            int temp = arr[start];  //先记录住队头的元素
            start = start==arr.length-1 ? 0:start+1;//队头指针若本来只在数组的最后以为,那么跳到0。否则加1
            return temp;
        }
    }

数组实现栈

1.题目

用数组实现大小固定的队列。

2.算法思路

栈的特性是先进后出,后进先出。

  1. 设置栈的深度为size。栈所对应的数组示意图如下。0索引为栈底。
    在这里插入图片描述
  2. 栈的push方法,只需要将size加1,然后在原size索引出添加该元素。
  3. 栈的pop方法,只需要将size减1。
  4. 栈的pop方法,直接输出size-1索引处的元素

3.算法代码

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值