队列的实现(链表方法)

队列的实现就显的有点麻烦了,因为队列是一种先进先出的数据结构,如果是用数组去做的话,就会导致数组的浪费,因为当你pop的时候,头指针向后移动,会导致index从0开始向后面的逐步浪费,但是你如果在pop操作后让数组先前移动的话,又会导致时间复杂度上的提升,所以用数组去完成队列的操作就会显的不是很完美;
(其实我觉得可以让数组变成一个环路,当尾指针指向size的时候就让他从0开始,当头和尾相撞的时候呢就报超模了,在扩容的时候就扩容(判断尾指针的位置进行一下复制的操作)这样的话就不会出现上述的问题,但是在扩容的时候会出现复杂度为N的复制操作,但是在空间的利用上还是pop的操作上都比上述的两种方法好,今后我会完成放出来的)
但是如果用链表去实现队列的操作就不会显的怎么笨重,pop的时候直接弹出头节点,push操作就在尾节点上加上一个节点,所以我比较倾向与用链表完成。
代码的完成:

//对节点的定义
class node{
    int var;
    node next = null;
    public node(int var){
        var = this.var;
    }
    public node(){
    }
}
class queue{
    private node first;//头节点
    private node last;//尾节点
    private int count = 0;//长度

    //队列的添加元素
    public void add(int var){
        node llast = last;
        last = new node(var);
        if (count == 0){
            first = new node(var);
        }else {
            llast.next = last;
        }
        count++;
    }

    //队列弹出队首元素
    public int pop(){
        node ffirst = first;
        int var = ffirst.var;
        ffirst = null;
        first = first.next;
        count--;
        return var;
    }

    //判断队列是否空
    public boolean isEmpty(){
        if(count == 0)  return true;
        else return false;
    }


    //遍历元素
    public void  iterator(){
        node Node = first;
        while (Node.next != null){
            System.out.print(Node.var + " ");
        }
    }
}

//验证是否完成操作
public class queuee {
    public static void main(String[] args){
        queue Queue = new queue();
        if (Queue.isEmpty()){
            System.out.println("为空操作完成");
        }else {
            System.out.println("为空操作失败");
        }
        Queue.add(111);
        if (!Queue.isEmpty()){
            System.out.println("添加操作完成");
        }
        int var = Queue.pop();
        if (Queue.isEmpty()){
            System.out.println("弹出操作完成且var = " + var);
        }
    }
}

只做了一些基础操作,还有很多的操作未实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值