数据结构之栈、队列(Java简单实现)

栈和队列这两个数据结构底层都是基于数组来实现的:
Java API提供了Queue、Deque接口,由LinkedList来实现着两种数据结构,通过offer()、poll()等方法来操作队列Queue;通过push()、pop()等方法来实现栈Deque。

  System.out.println("************使用API实现队列**************");
        //使用API提供的Queue接口来实现队列
        Queue<Integer> queue=new LinkedList();
        queue.offer(1);
        queue.offer(2);
        queue.offer(3);
        System.out.println(queue.isEmpty());
        System.out.println(queue.poll());
        System.out.println(queue.poll());
        System.out.println(queue.poll());
        System.out.println(queue.isEmpty()); 


 System.out.println("************使用API实现栈**************");
        //使用API提供的Queue接口来实现队列
        Deque<Integer> deque=new LinkedList();
        deque.push(1);
        deque.push(2);
        deque.push(3);
        System.out.println(deque.isEmpty());
        System.out.println(deque.poll());
        System.out.println(deque.poll());
        System.out.println(deque.poll());
        System.out.println(deque.isEmpty());

基于数组的实现:

public class NewQueue<E>{//队列实现
    private E[] queue;

    public NewQueue(){
       queue=(E[])new Object[0];
    }
    //队列元素的添加
    public void offer(E element){
            //创建新数组代替原数组,动态扩容
            E[] newArr=(E[])new Object[queue.length+1];
            //将原来的数组复制到新数组中
            for(int i=0;i<queue.length;i++){
            newArr[i]=queue[i];
            }
            //数据添加进队列
            newArr[queue.length]=element;
            //更新数组
            queue=newArr;
            }
     //弹出队列头元素        
    public E poll(){
            //判断是否空队列,若空队列则抛出异常
            if(isEmpty()){
            throw new RuntimeException("Queue is empty");
            }
            //弹出队列顶元素
            E pollEle=queue[0];
            //更新队列内容信息
            E[] newArr= (E[]) new Object[queue.length-1];
            for(int i=0;i<newArr.length;i++){
                newArr[i]=queue[i+1];
            }
            //更新数组
            queue=newArr;
            return pollEle;
            }

    public boolean isEmpty(){
          //判断队列是否为空
            return queue.length==0;
        }
    }



public class NewDeque<E>{//栈实现
    private E[] deque;

    public NewDeque(){
        deque=(E[])new Object[0];
    }
    //压栈
    public void push(E element){
            //创建新数组代替原数组,动态扩容
            E[] newArr=(E[])new Object[deque.length+1];
            //将原来的数组复制到新数组中
            for(int i=0;i<deque.length;i++){
                newArr[i]=deque[i];
            }
            //压栈
            newArr[deque.length]=element;
            //更新数组
             deque=newArr;
            }
    //弹出栈顶元素
    public E pop(){
            //判断栈是否为空
            if(isEmpty()){
            throw new RuntimeException("Deque is empty");
            }
            //弹出栈顶元素
            E popEle=deque[deque.length-1];
            //更新栈内容信息
            E[] newArr= (E[]) new Object[deque.length-1];
            for(int i=0;i<newArr.length;i++){
                newArr[i]=deque[i];
            }
            //更新数组
            deque=newArr;
            return popEle;
            }

    public boolean isEmpty(){
          //判断队列是否为空
        return deque.length==0;
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值