Java实现栈(链表和线性表两种方法实现)

简介:

Java实现栈(链表和线性表两种方法实现)

一、栈的介绍
任何数据结构都是一种规则

栈就是在最基础的结构——线性结构和链式结构上面定义规则形成的

如果对基本数据结构(线性表和链表)有疑问的同学可以看我之前的博客:https://www.cnblogs.com/yxm2020/p/12762888.html

规则如下:

限制链表或者线性表元素的插入和取出,只能在同一端进行操作,运行插入的一段称为栈顶(top),另一端为固定的一端,成为栈底。

图解:(入栈和出栈)

特点:

先入后出FILO(First in last out),最先放入栈的数据,只能最后才能出来,和队列完全相反

栈的应用场景:

保存运行过程中程序中的代码或者值,比如:

子程序的调用
处理递归的调用
表达式的转换(中缀转后缀)
二叉树的遍历
图形的深度优先遍历
二、代码的实现思路
1、思路

确定一个结构存储数据,线性表或者链表
既然只能在栈顶操作,那么定义一栈顶标志(top)
最基本的两个方法,入栈和出栈
入栈后,在栈顶加入一个元素,top上移一个单元
出栈后,在栈顶删除一个元素,top下移一个单元
2、Java实现

用Java数组模拟栈
java链表实现栈
三、Java数组模拟栈
public class ArrayStack {

//栈顶标志
private int top;
//java数组
private T[] stack;
//最大长度
private int maxsize;
public ArrayStack(int maxsize,Class<T> type){
    this.maxsize = maxsize;
    this.top = -1;
    stack = (T[]) Array.newInstance(type,maxsize);
}
//长度
public int size(){
    return top+1;
}
//栈满
public boolean isFull(){
    return top == maxsize-1;
}
//栈空
public boolean isEnpty(){
    return top == -1;
}
//入栈
public void push(T t){
    if(isFull()){
        throw new RuntimeException("栈满");
    }
    top++;
    stack[top] = t;
}
//出栈
public T pop(){
    if(isEnpty()){
        throw new RuntimeException("栈空");
    }
    T value = stack[top];
    top--;
    return value;
}
//遍历
public void show(){
    if(isEnpty()){
        System.out.println("栈空");
    }
    int temp = top;
    while (temp != -1){
        System.out.println(stack[temp]);
        temp--;
    }
}

}
四、Java链表实现栈
public class LinkedStack {

//定义一个栈顶标志,带了个
private Node top;
private class Node{
    private Node next;
    private T t;
    public Node(T t){
        this.t = t;
    }
}
//创建
public LinkedStack(){
    top = new Node(null);
}
//栈空
public boolean isEnpty(){
    if(top.next == null){
        return true;
    }
    return false;
}
//入栈
public void push(T t){
    Node newNode = new Node(t);
    //从栈顶入
    newNode.next = top.next;
    top.next = newNode;
}
//出栈
public T pop(){
    if(isEnpty()){
        System.out.println("栈空");
        return null;
    }
    T value = top.next.t;
    top.next = top.next.next;
    return value;
}
//show
public void show(){
    Node temp = top;
    if(temp.next == null){
        System.out.println("栈空");
    }
    while (temp.next!=null){
        temp = temp.next;
        System.out.println(temp.t);
    }
}

}

原文地址https://www.cnblogs.com/yxm2020/p/12859000.html

相关文章
|
2天前
|
Java
判断不为空和不为空串的方法java
判断不为空和不为空串的方法java
|
2天前
|
存储
数据结构第二课 -----线性表之单向链表
数据结构第二课 -----线性表之单向链表
|
1天前
|
Java
Java String 避免空指针的方法
Java String 避免空指针的方法
5 0
|
2天前
|
Java
【Java开发指南 | 第九篇】访问实例变量和方法、继承、接口
【Java开发指南 | 第九篇】访问实例变量和方法、继承、接口
14 4
|
2天前
|
XML JavaScript Java
详解Java解析XML的四种方法
详解Java解析XML的四种方法
15 1
|
2天前
|
存储 Java API
掌握8条方法设计规则,设计优雅健壮的Java方法
掌握8条方法设计规则,设计优雅健壮的Java方法
|
2天前
|
Java C语言
详解java方法与递归
详解java方法与递归
11 3
|
2天前
|
SQL Java 数据库连接
JDBC Java标准库提供的一些api(类+方法) 统一各种数据库提供的api
JDBC Java标准库提供的一些api(类+方法) 统一各种数据库提供的api
11 0
|
2天前
|
Java
Java一分钟之-方法定义与调用基础
【5月更文挑战第8天】本文介绍了Java编程中的方法定义和调用,包括基本结构、常见问题和避免策略。方法定义涉及返回类型、参数列表和方法体,易错点有返回类型不匹配、参数错误和忘记返回值。在方法调用时,要注意参数传递、静态与非静态方法的区分,以及重载方法的调用。避免错误的策略包括明确返回类型、参数校验、理解值传递、区分静态和非静态方法以及合理利用重载。通过学习和实践,可以提升编写清晰、可维护代码的能力。
14 0
|
2天前
|
存储 监控 安全
JVM工作原理与实战(十六):运行时数据区-Java虚拟机栈
JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了运行时数据区、Java虚拟机栈等内容。
12 0