美文网首页
链表实现栈(LIFO)、队列(FIFO)

链表实现栈(LIFO)、队列(FIFO)

作者: Kino_7abb | 来源:发表于2019-01-10 12:34 被阅读0次

今天来用链表实现栈

栈可以用链表实现,压栈操作即在链表头赋值,弹栈只需要将链表头元素指向下一个即可

public class LinkedListStack<T> {
    private int N;
    private Node first;
    private class Node{
        T t;
        Node next;
    }
    public LinkedListStack(){
        first = new Node();
    }
    //压栈 添加一个first 将值赋给first
    public void push(T t){
        Node oldFirst = first;
        first = new Node();
        first.next = oldFirst;
        first.t = t;
        N++;
    }

    public T pop(){
        T t = first.t;
        first = first.next;
        N --;
        return t;
    }

    public boolean isEmpty(){
        return N ==0;
    }
    
    //返回顶元素
    public T peek(){
        return first.t;
    }

    @Override
    public String toString() {
        StringBuilder res = new StringBuilder();
        res.append(first.t);
        for(Node node = first.next; node!=null; node = node.next){
            res.append("->").append(node.t);
        }
        return res.toString();
    }
}

由此可见,链表也可以实现队列操作,只需要每次返回链表尾部即可

public class LinkedListQueue<T> {
    private int N;
    private Node first; //指向最早添加的
    private Node last; //指向尾部
    private class Node{
        T t;
        Node next;
    }
    public LinkedListQueue(){
        first = new Node();
        last = new Node();
    }

    public boolean isEmpty(){
        return N == 0;
    }

    public int size(){
        return N;
    }

    public void enqueue(T t){
        //进队,则向链表尾部添加元素
        Node oldLast = last;
        last = new Node();
        last.t = t;
        last.next = null;
        //判断是否是空队列
        if(isEmpty()){
            first = last;
        }else {
            oldLast.next = last;
        }
        N ++;
    }
    public T dequeue(){
        //从表头删除元素 ,类似出栈
        T t = first.t;
        first = first.next;
        if(isEmpty()){
            last = null;
        }
        N --;
        return t;
    }

队列的实现也就是增加一个last指向尾部,每一次进队都要对尾部进行操作

相关文章

  • 链表实现栈(LIFO)、队列(FIFO)

    今天来用链表实现栈 栈可以用链表实现,压栈操作即在链表头赋值,弹栈只需要将链表头元素指向下一个即可 由此可见,链表...

  • Swift 队列&栈 相关操作

    栈 LIFO(后进先出) 队列 FIFO(先进先出) 队列与栈相互的实现 栈 - 队列实现 队列 - 栈实现 相关...

  • android数据结构

    基本数据结构:数组、链表、栈、队列栈:LIFO 压栈出栈,只允许在栈顶操作队列:FIFO ,一般只允许队尾插,队首...

  • 2018-05-28

    栈(stack) LIFO last in first out 队列(queue) FIFO first in ...

  • 232. 用栈实现队列--Leetcode

    ​232. 用栈实现队列 队列是一种先进先出(FIFO)的数据结构,而栈是一种后进先出(LIFO)的数据结构。 题...

  • 栈和队列

    概述 栈 => LIFO => 后进先出 队列 => FIFO => 先进先出 Stack 初始化 基本操作 方法...

  • 算法笔记-队列和栈

    先进先出队列(或简称队列) 是一种基于先进先出(FIFO)策略的集合类型。 队列的API: 队列的链表实现 下压栈...

  • 2018-05-28

    栈:LIFO后进先出表 栈底 不动 栈顶指针 (游标) 队列:FIFO先进先出表队列的单向移动性,假溢出 定义一个...

  • 消息队列:Queue 常见用法

    1. Queue 简介 Queue 对象实现一个 fifo 队列(其他的还有 lifo、priority 队列,这...

  • Week 2 - 线性结构

    第二周 线性结构 主要讲的是与链表、Stack(栈,LIFO)、Queue(队列,LILO)相关的数据结构实现以及...

网友评论

      本文标题:链表实现栈(LIFO)、队列(FIFO)

      本文链接:https://www.haomeiwen.com/subject/uyhgrqtx.html