栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

栈的实现原理与应用

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

栈的实现原理与应用

栈既可以采用链表来表示,也可以采用数组(顺序表)来表示,我们限制的是对于存放数据的存取方式。

顺序存储:

栈的逻辑结构:

栈:只允许在一端进行插入、删除操作的线性表。

空栈:不含任何数据元素的栈。

允许插入(也称进栈、压栈、入栈)、删除(也称出栈)的一端称为栈顶。

小邋遢的衣橱

小邋遢 MS.Jinlin 是个爱打扮的公主,他有很多晚礼服如"LALA" "NIHAOMA"、"WOBUHAO"、"NIHAOBUHAO"等众多衣服,可是由于衣服太多他要把它们装进箱子,但是作为公主,肯定是会突发奇想觉得哪件衣服好看,就把他拿了出来,当然那件衣服上面的衣服也被拿出来了,而且会弄乱了,小邋遢在经过几次的叠衣服和取衣服后,他想知道箱子里最上面的衣服是哪一件,如果箱子为空的话,就告诉她 Empty ,如果有多件一样的衣服,肯定是取走最上面的那一件啦。

 输入:

第 1 行,输入N,代表共计进行了几次操作
第 2 行至第 N+1 行,进行in out 操作
in 为 放入衣服
out 为 取出衣服
 
格式:  
 
    in name1  
    out name2


现在有以下样例输入:

样例 1:

输入:
6
in AMDYES
in INTELNO
in USBAD
in CNYES
out INTELNO
in MDICN
输出:
MDICN


样例 2:

输入:
5
in AMDYES
in INTELNO
in USBAD
in CNYES
out AMDYES 
输出:
Empty

 先创建一个栈以及栈的栈顶指针,定义入栈函数、出栈函数和取栈顶函数。需要注意的是定义出栈函数的时候要判空(因为题意需要)

当栈为空时Top指针为0,随着元素的入栈,Top指针的位置也会改变,但是是在最后入栈的元素的上方。所以在定义入栈函数时要先把元素值赋给Top指针的位置,再Top+1.所以写:

Mystack[Top++]=name; 

在取元素的时候应该写:return Mystack[Top-1];(因为Top指向元素上方)

代码如下:

 
 
import java.util.Scanner;
 
public class Main {
 
 final static  int maxsize=100005;
 
  static String[] Mystack =new String[maxsize]; //栈
  static int Top=0;         //栈顶指针
 
  static boolean in(String  name)
  {
      if(Top>=maxsize) return false;
      else {
          Mystack[Top++]=name;
          return true;
      }
 
  }
  static boolean isEmpty(){
 
      if(Top!=0) return false;
      else return true;
 
  }
 
  static boolean out()
  {
      if(isEmpty()) return false;
      else{
          Top--;
          return true;
      }
  }
  static String getTop()
  {
      if(isEmpty()) return "";
      else return Mystack[Top-1];
  }
 
  public static void main(String[] args)
 
  {
      int N;
      Scanner in=new Scanner(System.in);
      N=in.nextInt();
      for(int i=0;i 

 想要更加精简的代码可以来了解以下内置栈类

Java 中栈的定义及相应的函数:

栈是 Vector 的一个子类,它实现了一个标准的后进先出的栈;堆栈定义了默认构造函数,用来创建一个空栈。

在 Java 的 stack 模板定义了如下操作流程:

push():

执行 push 时(即,将元素推入栈中),是通过将元素追加的数组的末尾中。

peek():

执行 peek 时(即,取出栈顶元素,不执行删除),是返回数组末尾的元素。

pop():

执行 pop 时(即,取出栈顶元素,并将该元素从栈中删除),是取出数组末尾的元素,然后将该元素从数组中删除。

empty():

继承于 Vector,返回是否为空

size():

继承 Vector,返回元素的个数。

若使用 Java 的内置栈类,实现流程会与上述代码有所不同:

首先需引入模板类,并定义声明一个栈类:

import java.util.Scanner;
import java.util.Stack;
 
public class Main {
 
    static Stack Mystack =new Stack();
}

使用 Java 的内置栈类,可以帮我们省略以下流程:

声明并定义入栈函数声明并定义入判空函数声明并定义出栈函数声明并定义出取栈顶函数

详细代码如下(以上题为例): 

 
import java.util.Scanner;
import java.util.Stack;
 
public class Main {
 
    static Stack Mystack =new Stack();
 
    public static void main(String[] args)
    {
        int N;
        Scanner in=new Scanner(System.in);
        N=in.nextInt();
        for(int i=0;i 

可以看到里面使用的方法都是上述提及的push()、peek()、pop()、empty()。用这个内置栈类的时候稍微注意下就好

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/764094.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号