`
iluoxuan
  • 浏览: 579962 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

1:Stack实现

 
阅读更多

1:先进后出栈的实现:

       

    才用头结点的方式:

 

    

package com.algorithm.common;

import java.util.Iterator;

/**
 * 链表实现先进后出的Stack
 * @author lijunqing
 */
public class Stack<Item> implements Iterable<Item> {

    private int N;

    private Node head;

    class Node {

        private Item item;

        private Node next;
    }

    public Stack() {
        N=0;
        head=new Node();
    }

    /**
     * 入栈
     * @param item head---first ---head.next
     */
    public void push(Item item) {
        Node first=new Node();
        first.item=item;
        first.next=head.next;
        head.next=first;
        N++;
    }

    /**
     * 出栈 head --- head.next.next
     * @return
     */
    public Item pop() {
        Node first=head.next;
        head.next=first.next;
        N--;
        return first.item;
    }

    public int size() {
        return N;
    }

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

    @Override
    public Iterator<Item> iterator() {
        return new ListIterator();
    }

    private class ListIterator implements Iterator<Item> {

        private Node current=head.next;

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

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

        @Override
        public void remove() {
            throw new UnsupportedOperationException();
        }

    }

    public static void main(String[] args) {
        Stack<String> s=new Stack<String>();
        s.push("as");
        s.push("bs");
        s.push("eee");

//        System.out.println(s.size());
//        String a=s.pop();
//        String b=s.pop();
//        System.out.println(a + " 2 " + b);
//        System.out.println(s.isEmpty());

        Iterator<String> iterator=s.iterator();
        while(iterator.hasNext()) {
            System.out.println(iterator.next());
        }
    }

}

 

   结果:

 

eee
bs
as

 

   

分享到:
评论

相关推荐

    堆栈 Stack实现计算器 C++ 数据结构

    在这个“堆栈 Stack实现计算器 C++ 数据结构”的实验中,我们将探讨如何利用堆栈来实现一个简单的计算器。 首先,我们需要理解堆栈的基本操作:压栈(push)和弹栈(pop)。压栈操作是将一个元素添加到堆栈的顶部,...

    StackDocklet.zip

    1. **快捷方式管理**:StackDocklet允许用户将频繁使用的应用程序、文档、目录等添加为快捷方式,然后在桌面的一个可自定义位置显示为一个堆栈。用户只需点击堆栈,即可展开并快速访问这些快捷方式。 2. **定制化...

    Class_Stack.zip_stack的c++实现

    在这个“Class_Stack.zip_stack的c++实现”中,开发者提供了一个自定义的C++类来模拟标准库中的stack容器。 1. **栈的基本概念** - 栈是一种线性数据结构,它的操作集中在一端,称为栈顶。 - 主要操作包括:push...

    STACK1_SEGMENT_STACK.rar_STACK1 SEGMENT_stack segment stack

    在汇编语言的学习中,"STACK1_SEGMENT_STACK.rar_STACK1 SEGMENT_stack segment stack"这个...通过阅读`STACK1_SEGMENT_STACK.doc`文档,可以深入理解栈在汇编语言中的应用和进制转换的具体实现,进一步提升编程能力。

    stack实现运算表达式(C++实现)

    本示例中,我们将探讨如何使用C++标准库中的`stack`容器来实现一个简单的运算表达式解析器,处理如"3+(3*5)"这样的字符串。这种解析方法通常称为后缀表达式(Reverse Polish Notation, RPN)或逆波兰表示法。 首先...

    字符串翻转(使用类库方法和stack实现)

    在Python中,有一个非常方便的内置函数`[::-1]`可以用来轻松实现字符串翻转。这个语法被称为切片操作,它可以创建一个新的字符串,包含原字符串的全部字符,但顺序相反。例如,如果你有一个字符串`s = "hello"`,你...

    微软Azure Stack实现用户混合云战略.pdf

    1. **一致性体验**:Azure Stack与Azure公共云共享相同的API、开发工具和服务模型,这意味着开发者可以在任何环境中编写代码,无需担心兼容性问题。这极大地简化了应用的开发、测试和部署流程。 2. **灵活性和选择*...

    StackView图片展示

    9. **扩展性**:StackView可以与其他UI组件如ScrollView结合,实现滚动展示多张图片,或者通过嵌套StackView实现更复杂的界面布局。 总的来说,StackView是iOS开发中一个强大的工具,通过合理利用它的特性,开发者...

    数据结构中stack的实现

    这个C语言实现的栈程序中,`Stack` 结构体包含了存储元素的数组和一个指向栈顶的指针。`init` 函数初始化栈,`isEmpty` 判断栈是否为空,`push` 实现压栈,`pop` 实现弹栈,`peek` 查看栈顶元素。在实际应用中,根据...

    两个stack来模拟实现一个队列

    这个例子中,`QueueWithStacks`类使用了两个栈`stack1`和`stack2`来模拟队列,并实现了入队、出队和查看队头元素的方法。通过这样的设计,我们可以利用栈的特性实现队列的功能,虽然在某些情况下可能不如原生队列...

    stack实现括号匹配

    这里的“stack实现括号匹配”是指利用栈这种数据结构来判断一个字符串中的左右括号是否正确配对。栈是一种后进先出(LIFO)的数据结构,非常适合用于解决此类问题。 首先,我们需要理解栈的基本操作:压入(push)...

    C++stack介绍及详细使用示例(源代码)

    ### C++ STL 中 std::stack 与 std::...`std::stack` 适用于需要实现 LIFO 操作的场景,而 `std::array` 则更适用于固定大小数组的需求。两者都是 C++ STL 中非常重要的组件,对于开发高效稳定的程序具有重要作用。

    C++数据结构实现之Stack.zip

    在这个"C++数据结构实现之Stack"的压缩包中,我们主要关注的是栈(Stack)这一基本数据结构的C++实现。 栈是一种后进先出(Last In First Out, LIFO)的数据结构,它的操作类似于一个堆叠物品的过程,新添加的元素...

    应用.NET类库中的栈类Stack完成十进制转换成二进制、八进制、十六进制。要求应用 Windows窗体程序设计实现,界面美观,功能完善。

    在本案例中,`Stack`类被用来实现将十进制数转换为二进制、八进制和十六进制的功能。 #### 二、十进制数转换为其他进制数 **1. 基本原理** - **十进制转二进制**: 不断除以2取余数,直到商为0为止,最后将所有...

    Android-SimpleStack这是一个简单的backstack实现

    Android-SimpleStack项目提供了一个轻量级、易于理解和使用的Backstack实现,它基于Flow库的0.9版本。 Flow是一个由Zhuinden开发的库,用于构建可响应的Android界面,其目标是简化UI组件之间的数据流管理。Simple ...

    stack_template

    下面是一个简单的C++栈模板类实现: ```cpp #include template class Stack { public: // 构造函数 Stack() {} // 压入操作 void push(const T& value) { elements.push_back(value); } // 弹出操作 ...

    The-application-stack.zip_栈

    在"The application stack.cpp"程序中,很可能实现了一个这样的功能,通过栈来处理运算符和操作数,从而实现表达式的计算。这可能涉及到符号表管理、语法分析等编程技术。对于初学者来说,这是一个很好的练习,可以...

    RocketDock-StackDocklet

    StackDocklet是RocketDock的一个插件,它增强了RocketDock的功能,实现了“阿拉神灯”般的动态效果,即当鼠标悬停在图标上时,会弹出子菜单或子项,类似于苹果Dock中的堆栈效果。 StackDocklet的主要功能和特点包括...

    堆栈类Stack的C++实现

    以下是一个简单的实现: ```cpp #include #include class Stack { private: std::vector&lt;int&gt; elements; // 使用vector作为底层数据结构 public: // 初始化堆栈 Stack() {} // 入栈 void push(int value)...

    IAR环境如何实现 Stack分析和保护

    1. Stack usage analysis:栈使用情况分析功能,通过对函数的调用关系进行分析,计算从每个根节点出发的函数调用链在理论上所可能消耗的stack的最大值,从而为合理设置堆栈大小提供参考。 2. Graphical stack ...

Global site tag (gtag.js) - Google Analytics