一、栈的介绍

任何数据结构都是一种规则

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

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

规则如下:

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

图解:(入栈和出栈)

特点:

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

栈的应用场景:

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

  • 子程序的调用
  • 处理递归的调用
  • 表达式的转换(中缀转后缀)
  • 二叉树的遍历
  • 图形的深度优先遍历

二、代码的实现思路

1、思路

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

2、Java实现

  1. 用Java数组模拟栈
  2. java链表实现栈

三、Java数组模拟栈

public class ArrayStack<T> {
//栈顶标志
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<T> {
//定义一个栈顶标志,带了个
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);
}
}
}

Java实现栈(链表和线性表两种方法实现)的更多相关文章

  1. Java构造和解析Json数据的两种方法详解二

    在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面接着介绍用org.json构造和解析Jso ...

  2. Java构造和解析Json数据的两种方法详解二——org.json

    转自:http://www.cnblogs.com/lanxuezaipiao/archive/2013/05/24/3096437.html 在www.json.org上公布了很多JAVA下的jso ...

  3. Java构造和解析Json数据的两种方法详解一——json-lib

    转自:http://www.cnblogs.com/lanxuezaipiao/archive/2013/05/23/3096001.html 在www.json.org上公布了很多JAVA下的jso ...

  4. Java执行shell脚本并返回结果两种方法的完整代码

    Java执行shell脚本并返回结果两种方法的完整代码 简单的是直接传入String字符串,这种不能执行echo 或者需要调用其他进程的命令(比如调用postfix发送邮件命令就不起作用) 执行复杂的 ...

  5. DES加密 java与.net可以相互加密解密两种方法

    DES加密 java与.net可以相互加密解密两种方法 https://www.cnblogs.com/DrWang/archive/2011/03/30/2000124.html sun.misc. ...

  6. Eclipse将引用了第三方jar包的Java项目打包成jar文件的两种方法

    方案一:用Eclipse自带的Export功能 步骤1:准备主清单文件 “MANIFEST.MF”, 由于是打包引用了第三方jar包的Java项目,故需要自定义配置文件MANIFEST.MF,在该项目 ...

  7. 将引用了第三方jar包的Java项目打包成jar文件的两种方法

    方案一:用Eclipse自带的Export功能 步骤1:准备主清单文件 “MANIFEST.MF”, 由于是打包引用了第三方jar包的Java项目,故需要自定义配置文件MANIFEST.MF,在该项目 ...

  8. 使用 Eclipse 可视化插件 windowbuilder 进行Java GUI开发(插件安装的两种方法)

    对于Java GUI开发 其实最方便的方法是用插件制作,当然先了解完代码原理是最好的. eclispe安装windowbuilder有两种方式,一种是离线安装,一种是在线安装. 一.第一种在线安装: ...

  9. Java中对List集合排序的两种方法

    第一种方法,就是list中对象实现Comparable接口,代码如下: public class Person implements Comparable<Person> { privat ...

随机推荐

  1. Hadoop权威指南(中文版-带目录索引)pdf电子书

      Hadoop权威指南(中文版-带目录索引)pdf电子书下载地址:百度网盘点击下载:链接:https://pan.baidu.com/s/1E-8eLaaqTCkKESNPDqq0jw 提取码:g6 ...

  2. Daily Scrum 12/9/2015

    Done: Yandong: multi query的代码整合完成,之前采用的是将不同query的score相加的方法,目前改用将不同query的score相乘,搜索效果得到明显提升: Zhaoyan ...

  3. Vmware下安装Linux

    Linux系统 开源的操作系统.主要是应用在软件的服务器,性能比windows要好. Linux系统(ubuntu,centos,redhat,aix....) Linux主要是通过命令去操作计算机, ...

  4. Problem D. Ice Cream Tower

    题解:二分加贪心,,,二分答案,然后进行判断,判断的时候,首先给每一组配一个最大的球,然后在向每一组里面填球,注意填球的时候要按组进行,每一组先填一个,然后更新每一组内的最小值,方便下一次寻找. #i ...

  5. Largest Rectangle in a Histogram 杭电1506

    题目链接 :http://acm.hdu.edu.cn/showproblem.php?pid=1506 Problem Description A histogram is a polygon co ...

  6. sqli-labs通关教程----41~50关

    第四十关 与前几关一样,闭合变成') 插入数据 ?id=1') ;insert into users(id,username,password) values('17','aaa','bbb'); % ...

  7. Nginx知多少系列之(十四)Linux下.NET Core项目Nginx+Keepalived高可用(主从模式)

    目录 1.前言 2.安装 3.配置文件详解 4.工作原理 5.Linux下托管.NET Core项目 6.Linux下.NET Core项目负载均衡 7.负载均衡策略 8.加权轮询(round rob ...

  8. 关于phpstorm、idea、gogland等等ide全家桶设置

    2017-08-29 16:30:55 Preferences => IDE Settings => Editor => Code Completion => Autopopu ...

  9. swoole--服务平滑重启

    参考来源:https://wiki.swoole.com/wiki/page/p-server/reload.html shell代码: echo "loading..." pid ...

  10. php 通过 yield 实现协程有什么使用场景

    来源:https://segmentfault.com/q/1010000010018151 参考:https://www.cnblogs.com/lynxcat/p/7954456.html 协程可 ...