`

Java栈的三种实现(三)

阅读更多

Java栈的三种实现方法,使用Java自带的方法 Stack、用数组模拟Stack、用链表模拟Stack;

第一种方法,使用Java自带的Stack方法,代码如下:

package study.stack;

import java.util.Stack;

/**
 * Created by Taoyongpan on 2017/10/13.
 * 利用Java自带的栈方法
 */
public class StackDemo {


    public static void main(String[] args){
        Stack<String> user = new Stack<String>();
        user.push("taoyongpan1");
        user.push("taoyongpan2");
        user.push("taoyongpan3");
        user.push("taoyongpan4");
        System.out.println("栈顶"+user.peek());
        System.out.println("查找"+user.search("taoyongpan1"));
        while (!user.empty()){

            System.out.println(user.pop());
        }
    }
}
运行结果:
栈顶taoyongpan4
查找4
taoyongpan4
taoyongpan3
taoyongpan2
taoyongpan1

Process finished with exit code 0

 第二张方法,用数组模拟栈,代码如下:

package study.stack;

/**
 * Created by Taoyongpan on 2017/10/13.
 * 利用数组创建栈
 */
public class ArrayStack {

    Object stack[] =null;
    int size;
    int top = -1;

    public ArrayStack(){
        stack = new Object[100];
        size = 100;
    }

    public ArrayStack(int size){
        stack = new Object[size];
        this.size = size;
    }
    //判断是否为空
    public boolean isEmpty(){
        if (top==-1){
            return true;
        }else {
            return false;
        }
    }
    //判断是否已满
    public boolean isFull(){
        if (top>=(size-1)){
            return true;
        }else {
            return false;
        }
    }
    //入栈
    public void push(Object item){

        if (isFull()){
            System.out.println("堆栈已经满了");
            return;
        }
        top++;
        stack[top] = item;
    }

    //出栈
    public Object pop(){
        Object item = null;
        if (isEmpty()){
            System.out.println("堆栈为空");
            return item;
        }
        item = stack[top];
        top--;
        return item;
    }

    //读取栈顶元素
    public Object peek(){
        if (isEmpty()){
            System.out.println("堆栈为空");
            return null;
        }
        return stack[top];
    }

    //读取大小
    public int size(){
        return top+1;
    }
    //获取容量

    public int capcity(){
        return size;
    }

}

 

package study.stack;

/**
 * Created by Taoyongpan on 2017/10/13.
 */
public class StackArrayDemo {

    public static void main(String[] args){
        ArrayStack user = new ArrayStack();
        user.push("taoyongpan1");
        user.push("taoyongpan2");
        user.push("taoyongpan3");
        user.push("taoyongpan4");
        System.out.println("堆栈的大小:"+user.size);
        System.out.println(user.peek());
        while (!user.isEmpty()){
            System.out.println(user.pop());
        }
    }
}

 结果如下:

堆栈的大小:100
taoyongpan4
taoyongpan4
taoyongpan3
taoyongpan2
taoyongpan1

Process finished with exit code 0

 第三种方法,代码 如下:

 

package study.stack;

/**
 * Created by Taoyongpan on 2017/10/13.
 */
public class StackNode {

    private Object data;
    private StackNode next;
    //创建头结点
    public StackNode(){
        data = null;
        next = null;
    }
    //添加节点
    public StackNode(Object data){
        this.data = data;
        next = null;
    }
    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }

    public StackNode getNext() {
        return next;
    }

    public void setNext(StackNode next) {
        this.next = next;
    }
}
package study.stack;

/**
 * Created by Taoyongpan on 2017/10/13.
 */
public class StackNodeDemo {

    StackNode head = null;
    public StackNodeDemo(){
        head =new StackNode();
    }

    //入栈
    public void push(Object data){
        StackNode newNode = new StackNode(data);
        newNode.setNext(head.getNext());
        head.setNext(newNode);
    }
    //判断是否为空
    public boolean isEmpty(){
        if (head.getNext()==null){
            return true;
        }else {
            return false;
        }
    }
    //出栈
    public Object pop(){
        Object item = null;
        if (isEmpty()){
            return item;
        }
        item = head.getNext().getData();
        head.setNext(head.getNext().getNext());
        return item;
    }

    //获得栈的大小
    public int size(){
        int len = 0;
        StackNode node = head;
        while (node.getNext()!=null){
            len++;
            node = node.getNext();
        }
        return len;
    }
    //读取栈顶元素
    public Object peek(){
        Object item = null;
        if (isEmpty()){
            return item;
        }
        item = head.getNext().getData();
        return item;
    }
    public static void main(String[] args){
        StackNodeDemo user = new StackNodeDemo();
        user.push("taoyongpan1");
        user.push("taoyongpan2");
        user.push("taoyongpan3");
        user.push("taoyongpan4");
        System.out.println("栈的大小:"+user.size());
        System.out.println("读取栈顶元素:"+user.peek());
        while (!user.isEmpty()){
            System.out.println(user.pop());
        }
    }
}

 运行结果如下:

栈的大小:4
读取栈顶元素:taoyongpan4
taoyongpan4
taoyongpan3
taoyongpan2
taoyongpan1

Process finished with exit code 0

 

分享到:
评论

相关推荐

    java 栈的实现和应用

    Java栈是一种基于后进先出(LIFO)原则的数据结构,它在计算机科学和编程中具有广泛的应用。本文将深入探讨Java中栈的实现以及其在实际应用中的使用。 首先,我们来理解栈的基本概念。栈是一种特殊类型的线性数据...

    Java用栈实现的计算器

    2. **Java中的栈实现**: Java提供了`java.util.Stack`类来实现栈。它继承自`Vector`类,因此提供了丰富的线程安全的方法,如`push()`, `pop()`, `peek()`等。在这个计算器项目中,我们可以创建一个栈对象来存储...

    java栈实现计算器中缀表达式

    java数字栈和符号栈模拟计算器(中缀表达式) “计算中缀表达式”可以称得上是一个特别经典的关于栈的算法题,几乎在所有数据结构教材中都会涉及,而且很多公司面试或者笔试的时候都会把这道题作为一个考察点。可以说...

    栈的Java语言实现

    在本案例中,我们主要探讨的是顺序存储方式下的栈实现。 #### 三、MyStack类详解 ##### 1. 类成员变量 - `int MAX_SIZE`: 定义了栈的最大容量,默认为100。 - `int top`: 栈顶指针,初始值为-1,表示栈为空。 - `...

    java sip 协议栈实现客户端和服务

    在这个基于Java的SIP协议栈实现中,我们可以通过提供的源码实例和jar包来理解和学习SIP的工作原理。 首先,我们来看标题中的“java sip 协议栈实现客户端和服务”。这意味着这个项目包含了SIP协议客户端和服务器端...

    用Java实现一个栈

    用Java实现一个栈

    用java实现的栈Stack类

    用java实现的栈Stack类,不继承任何集合类,用对象数组实现

    Java实现栈的基本操作

    Java实现栈的基本操作

    java 栈和队列的小例子

    在Java编程语言中,栈(Stack)和队列(Queue)是两种基本的数据结构,它们在处理数据存储和操作方面有着广泛的应用。本教程将通过一些小例子来深入理解这两种数据结构及其在Java中的实现。 栈是一种后进先出(LIFO...

    关于Java栈与堆的思考

    关于Java栈与堆的深入解析 Java作为一种广泛使用的编程语言,其内存管理机制是学习者必须掌握的核心概念之一。在Java中,栈(Stack)与堆(Heap)是用于存储数据的主要区域,它们各自承担着不同的职责,对于理解...

    线性表,单链表,栈 java实现

    Java中栈的实现可以使用`java.util.Stack`类,它是`Vector`类的子类,提供了`push()`, `pop()`, `peek()`等方法。 在给定的文件“王倩”中,很可能包含了实现这些数据结构的Java源代码。通过阅读和理解这些代码,你...

    java实现的栈(通过数组)

    java api 中也有stack,这个是根据stack的特性编写出来的; 此程序在功能上和java提供的功能是一样的,只是实现的方法不一样;

    Java语言编写的数据结构-栈实现

    在计算机科学中,数据结构是组织和存储数据的方式,它对于高效的算法设计至关重要...通过分析`stack_SqStack`和`stack_SLinkList`这两个文件,你可以深入了解Java中栈的两种实现方式,并学习如何在实际项目中灵活运用。

    Java定义栈结构,并实现入栈、出栈操作完整示例

    在 Java 中,栈是一种先进后出的数据结构,即后入栈的元素最先被取出。栈可以使用数组或链表实现,本文使用 ArrayList 实现栈结构。 栈结构的定义包括以下几个部分: * 入栈(push):将元素添加到栈顶 * 出栈...

    java实现顺序栈

    Java实现顺序栈是一种常见的数据结构操作,主要用于存储和管理元素序列。栈是一种后进先出(LIFO,Last In First Out)的数据结构,通常用于执行回溯、递归等算法。在Java中,我们可以使用数组或ArrayList来实现顺序...

    用Java语言实现栈的功能

    实现弹栈,进栈,判断栈是否为空或满等功能 Java入门的简单程序

    java作业 类设计 实现栈的基本结构 小型计算器

    栈是一种特殊的线性数据结构,遵循“后进先出”(LIFO)的原则,常用于各种计算和内存管理操作。下面我们将详细探讨这个作业所涵盖的知识点。 1. **栈的原理与操作**: - **初始化**:创建一个空栈,通常通过数组...

    剑指offer算法实现java版——面试题21包含min函数的栈

    实现一个栈,要求使用O(1)时间获取栈中最小值,O(1)执行pop、push操作。

    java模拟顺序栈实现回文串的判断

    Hui.java可能是实现栈的辅助类,它可能包含了栈操作的定义,如压栈(push)和弹栈(pop)等方法。例如: ```java public class Hui { private char[] stack; private int top; public Hui(int size) { stack =...

    华科java实验-用泛型栈实现泛型队列

    试用java.util.Stack泛型栈作为父类,用另一个泛型栈对象作为成员变量,模拟实现一个泛型子类Queue,当存储元素的第1个栈的元素超过dump时,再有元素入队列就倒入第2栈。除提供无参构造函数Queue( )外,其它所有队列...

Global site tag (gtag.js) - Google Analytics