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

栈、队列(链表实现)

作者: 毕丙伟 | 来源:发表于2017-07-13 20:35 被阅读0次
package com.company;

import java.util.Iterator;

/**
 * Created by bbw on 2017/7/13.
 * 下压堆栈,链表实现
 * 实现长度、pop、push、非空
 */
public class Stack<Item> implements Iterable<Item> {

    private Node first;
    private int length;
    private class Node{
        Item item;
        Node next;
    }

    public boolean isEmpty(){
        //非空
        return length == 0;
    }

    public void push(Item item){
        //加入
        Node oldFirst = first;
        first = new Node();
        first.item = item;
        first.next = oldFirst;
        length++;
    }

    public Item pop(){
        //删除
        Item item = first.item;
        first = first.next;
        if (isEmpty())
            first = null;
        length--;
        return item;
    }


    @Override
    public Iterator<Item> iterator() {

        return new ListIterator() ;
    }
    private class ListIterator<Item> implements Iterator<Item>{

        private Node current = first;

        public boolean hasNext() {
            return current != null;
        }

        public Item next() {

            Item item = (Item) current.item;
            current = current.next;
            return item;
        }

        public void remove() {

        }
    }
}

package com.company;

import java.util.Iterator;

/**
 * Created by bbw on 2017/7/13.
 * 队列实现
 * 实现长度、非空、添加、删除
 */
public class Queue<Item> implements Iterable<Item>{


    private Node first;
    private Node last;
    private int length = 0;

    private class Node{
        Item item;
        Node next;
    }

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

    public void enQueue(Item item){
        //添加
        Node oldLast = last;
        last = new Node();
        last.item = item;
        last.next = null;
        if (isEmpty())
            last = first;
        else
            oldLast.next = last;
        length++;
    }

    public Item deQueue(){
        //删除
        Item item = first.item;
        first = first.next;
        if (isEmpty()){
            last = null;
        }
        length--;
        return item;

    }
    @Override
    public Iterator<Item> iterator() {

        return new ListIterator() ;
    }
    private class ListIterator<Item> implements Iterator<Item>{

        private Node current = first;

        public boolean hasNext() {
            return current != null;
        }

        public Item next() {

            Item item = (Item) current.item;
            current = current.next;
            return item;
        }

        public void remove() {

        }
    }
}


值得注意next方法会返回当前节点的item 并移向下一节点。

相关文章

  • 数据结构java描述

    接口 栈 队列 集合 并查集 映射 数组 链表 栈 数组实现 链表实现 队列 数组实现 链表实现 二分搜索树 集合...

  • C语言第七次作业:链表

    707. 设计链表 空指针 空节点 225. 用队列实现栈 链式存储栈 双队列实现栈 232. 用栈实现队列 链式...

  • 基础算法学习与实践

    数组&链表 1. 快慢指针的方式实现判断链表是否有环 栈和队列 1. 栈实现队列(负负得正) ...

  • 数据结构与算法之数组与链表

    线性表包括数组,链表(单链表,双向链表,循环链表,双向循环链表,静态链表),栈(顺序栈,链式栈),队列(普通队列,...

  • 数据结构与算法之栈与队列

    线性表包括数组,链表(单链表,双向链表,循环链表,双向循环链表,静态链表),栈(顺序栈,链式栈),队列(普通队列,...

  • 用数组实现栈、队列

    用数组实现一个栈 用数组实现一个队列 用单链表实现给队列

  • 第四章_栈和队列_2019-03-20

    基本知识点 栈:先进后出,队列:先进先出 栈和队列都既能用数组实现,又能用链表实现 栈和队列的基本操作:pop()...

  • 常见的数据结构

    常见的数据结构有: 数组 链表单链表、双向链表、循环链表、双向循环链表、静态链表 栈顺序栈、链式栈 队列普通队列、...

  • 数据结构-系列文章

    线性表 单链表 单链表-OC实现 双链表 循环链表 栈 栈 队列 待完善 数组 待完善 树 待完善 图 待完善 哈...

  • 单链表和双链表

    单链表(可以用来实现栈和队列) 删除链表的元素 添加元素 双向链表(实现LinkedList) 添加元素 删除元素

网友评论

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

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