2、算法-下压栈(API)

下压栈

package base.第一章.背包_队列_和栈.api.下压栈;

import java.util.Iterator;

/**
 * Created by MK on 2018/7/19.
 * 创建栈(Stack)---以链表的方式实现
 * public class Stack<Item> implements Iterable<Item>
 * Stack()                     创建一个空栈
 * void push(Item item)        添加一个元素
 * Item pop()                  删除最近添加的元素
 * boolean isEmpty()           栈是否为空
 * int size()                  栈中的元素数量
 */
public class Stack<Item> implements Iterable<Item> {

    private Node<Item> node; //创建头节点
    private int n;


    //定义节点的嵌套类
    private class Node<Item> {
        Item item;  //所传参数的值
        Node next;  //节点的指针
    }

    public boolean isEmpty() {
        return node.next == null;
    }

    public int size() {
        return n;
    }

  public void push(Item item) {
        Node oldNode = node; //此时的节点变成了老节点
        node = new Node<Item>(); //创建新节点

        node.item = item; //将值赋值给新节点
        node.next = oldNode;  //新节点的下标指向的是老节点
        n++;
    }

   public Item pop() {
        Item item = node.item;
        node = node.next; //跳过节点
        n--;
        return item;
    }

    //实现迭代
    @Override
    public Iterator<Item> iterator() {
        return new ListIterator();
    }

    private class ListIterator implements Iterator<Item> {
        private Node current = node;

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

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

}

测试

package base.第一章.背包_队列_和栈.api.下压栈;

import edu.princeton.cs.algs4.StdOut;

/**
 * Created by MK on 2018/7/19.
 * 测试Stack
 */
public class 下压栈测试 {

    public static void main(String[] args) {
        Stack<Integer> stack = new Stack<Integer>();

        stack.push(32);
        stack.push(1);
        stack.push(21);
        stack.push(3); //3是最后放入的,类似于放在桌面上的邮件,其是最后一封

        stack.pop(); //栈的删除,删除的是最后放入的

        //foreach循环 栈的话,输出顺序与被压入的顺序正好相反。例如上面的测试例子:32是最先压入的,那么循环的话32就在最底层显示
        for (Integer res : stack) {
            StdOut.println(res);
        }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值