前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据结构----栈

数据结构----栈

作者头像
SuperHeroes
发布2018-05-30 17:16:48
3120
发布2018-05-30 17:16:48
举报
文章被收录于专栏:云霄雨霁云霄雨霁

我们可以设计一个栈API:

代码语言:javascript
复制
 public class Stack<Item> implemrnts Iterable<Item>
               Stack()                              创建一个空栈
       void push(Item item)                添加一个元素
       Item pop()                                删除最近添加的元素
 boolean isEmpty()                          栈是否为空
          int size()                                栈中元素的数量
 

逻辑很好理解,接下来使用链表来实现(其中实现了迭代器类):

代码语言:javascript
复制
public class Stack<Item> implements Iterable<Item> {    //实现迭代器接口
    private Node<Item> first;   //头指针 
    private int n;      //栈中元素数量        
	//节点类
    private static class Node<Item> {
        private Item item;
        private Node<Item> next;
    }
	//构造器
    public Stack() {first = null;n = 0;}
	//是否为空
    public boolean isEmpty() {return first == null;}
	//当前元素数量    
    public int size() {return n;}
	//压栈
    public void push(Item item) {
        Node<Item> oldfirst = first;
        first = new Node<Item>();
        first.item = item;
        first.next = oldfirst;
        n++;
    }
	//出栈
    public Item pop() {
        if (isEmpty()) throw new NoSuchElementException("Stack underflow");
        Item item = first.item;
        first = first.next;            
        n--;
        return item;                   
    }

    //新建迭代器
    public Iterator<Item> iterator() {
        return new ListIterator<Item>(first);
    }
	//实现迭代器
    private class ListIterator<Item> implements Iterator<Item> {
        private Node<Item> current;	
        public ListIterator(Node<Item> first) {
            current = first;
        }
        public boolean hasNext() {
            return current != null;
        }
        public void remove() {
            throw new UnsupportedOperationException();
        }
        public Item next() {	
            if (!hasNext()) throw new NoSuchElementException();
            Item item = current.item;
            current = current.next; 
            return item;
        }
    }
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017.12.10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档