Stack操作,栈的操作。

栈是先进后出,后进先出的操作。

有点类似浏览器返回上一页的操作,

public class Stack<E>extends Vector<E>

是vector的子类。

常用方法:

boolean empty()
          测试堆栈是否为空。
 E peek()

查看堆栈顶部的对象,但不从堆栈中移除它。

 E pop()

移除堆栈顶部的对象,并作为此函数的值返回该对象。

 E push(E item)

把项压入堆栈顶部。

 int search(Object o)

返回对象在堆栈中的位置,以 1 为基数。

代码:

package 类集;
import java.util.Stack;
public class test1{
    public static void main(String args[]){
        Stack<String> s = new Stack<String>() ;
        s.push("A") ;    // 入栈
        s.push("B") ;    // 入栈
        s.push("C") ;    // 入栈
        if(!s.empty())
            System.out.println("不是空栈");
        else
            System.out.println("是空栈");
        System.out.print(s.pop() + "、") ;
        System.out.print(s.pop() + "、") ;
        System.out.println(s.pop() + "、") ;
        System.out.println(s.pop()) ;    //此时里面没有内容了,报错
    }
};

结果:

不是空栈
C、B、A、
Exception in thread "main" java.util.EmptyStackException
    at java.util.Stack.peek(Stack.java:102)
    at java.util.Stack.pop(Stack.java:84)
    at 类集.test1.main(test1.java:16)

如果栈中没有内容了,则无法再输出。

时间: 2025-01-02 05:44:13

Stack操作,栈的操作。的相关文章

对栈的操作和算法实现

一.栈的定义 从数据结构角度看,栈也是线性表,其特殊性在于栈的基本操作都是线性操作的子集,它是操作受限的线性表. 栈(stack)是限定仅在表尾进行插入或删除操作的线性表. 栈一般分为两种: 静态栈:用数组实现: 动态栈:用链表实现. 一般用的比较多的都是动态栈.如果学会了链表,其实对栈的操作就比较简单了. 二.栈的结构 空栈的结构:(其实就是栈顶和栈顶都指向一个不存放有效数据的头结点) 存有结点的栈结构:(栈顶指针指向栈顶结点,栈底指针指向头结点) 三.用C语言实现 /* 2016年9月17日

利用TaskScheduler处理Queue、Stack等类型的操作队列(生产者消费者场景)

我们经常会遇到生产者消费者模式,比如前端各种UI操作事件触发后台逻辑等.在这种典型的应用场景中,我们可能会有4个业务处理逻辑(下文以P代表生产者,C代表消费者): 1. FIFO(先进先出) P产生1,2,3,4,5,6,3,2 C处理顺序应为1,2,3,4,5,6,3,2 2.LIFO(后进先出) P产生1,2,3,4,5,6,3,2 C处理顺序应为2,3,6,5,4,3,2,1 3.Dynamic FIFO(我定义为:去掉相同数据的FIFO, 如果产生的数据队列里已经有相同数据,后进的数据优

栈和队列----用递归函数和栈的操作实现逆序一个栈

用递归函数和栈的操作实现逆序一个栈 一个栈依次压入1.2.3.4.5,那么从栈顶到栈底分别为5.4.3.2.1,将这个栈转置后,从栈顶到栈底为1.2.3.4.5,也就是实现栈中元素的逆序,但是只能使用递归函数来实现,不能实现其他数据结构. package com.test; import java.util.Stack; /** * Created by Demrystv. */ public class ReverseStack { //将栈stack的栈底元素返回并且删除 private s

栈的操作

学习了数据结构之的顺序表与链表之后,再去接触栈的操作,觉得简单多了.自己就想用栈来实现下实际功能.但是遇到了麻烦(对于初学者来说),不管结果怎样,这都是一次成长的过程,虽然现在问题没有解决,但是我先把他以微博的形式记录下来,以遍我在以后能解决它. #include<stdio.h> #include<stdlib.h> #include<malloc.h> #include"string.h" typedef char NoteType; //#in

洛谷P1573 栈的操作 [2017年6月计划 数论11]

P1573 栈的操作 题目描述 现在有四个栈,其中前三个为空,第四个栈从栈顶到栈底分别为1,2,3,…,n.每一个栈只支持一种操作:弹出并 压入.它指的是把其中一个栈A的栈顶元素x弹出,并马上压入任意一个栈B中.但是这样的操作必须符合一定的规则才能进行.规则1:A栈不能为空.规则 2:B栈为空或x比B栈栈顶要小. 对于给定的n,请你求出把第四个栈的n个元素全部移到第一个栈的最少操作次数. 由于最少操作次数可能很多,请你把答案对1000007取模. 输入输出格式 输入格式: 一行,一个n 输出格式

HDU 5818 Joint Stacks ——(栈的操作模拟,优先队列)

题意:有两个栈A和B,有3种操作:push,pop,merge.前两种都是栈的操作,最后一种表示的是如果“merge A B”,那么把B中的元素全部放到A中,且满足先入后出的栈原则. 分析:显然,我们给每一个节点配备一个时间戳即可.我一开始的思路是直接开两个优先队列进行直接模拟,merge操作就是把一个栈的元素全部倾倒到另一个栈内,但是会出现的问题是,如果有一个状态A和B的元素都相当多了,并且反复的进行merge操作,那么每一次merge都意味着大量的元素进出,肯定会超时的.因此,我们需要优化,

顺序栈的操作,整数进栈,取栈顶元素,栈内剩余元素

// main.cpp //  stack_quhao //  Created by duanqibo on 2019/6/29. //  Copyright © 2019年 duanqibo. All rights reserved. //  顺序栈的操作,整数进栈,取栈顶元素,栈内剩余元素 #include <iostream> #include <stdio.h> #include <stdlib.h> const int maxsize=6; /* typede

H5中对history栈的操作

今天研究一下H5中history操作的相关知识,首先梳理一下基本内容: 一.在history中的跳转 使用 back(), forward()和 go() 方法来完成在用户历史记录中向后和向前的跳转. window.history.back(); window.history.forward(); window.history.go(-1); window.history.go(1); 可以通过查看长度属性的值来确定的历史堆栈中页面的数量: let numberOfEntries = windo

lintcode 中等题:Min stack 最小栈

题目 带最小值操作的栈 实现一个带有取最小值min方法的栈,min方法将返回当前栈中的最小值. 你实现的栈将支持push,pop 和 min 操作,所有操作要求都在O(1)时间内完成. 解题 可以定义一个数组或者其他的存储最小值,第i个元素,表示栈中前i个元素的最小值. 定义两个ArrayList来存储栈,一个ArrayList存储当前栈中的元素,一个ArrayList存储最小栈,并且其第i个元素表示栈中前i个元素的最小值,这样两个栈的长度是始终一样的 入栈:最小栈需要加入的元素是 当前要入的元

stack 集合栈计算机 (摘)

有一个专门为了集合运算而设计的“集合栈”计算机.该机器有一个初始为空的栈,并且支持以下操作:PUSH:空集“{}”入栈DUP:把当前栈顶元素复制一份后再入栈UNION:出栈两个集合,然后把两者的并集入栈INTERSECT:出栈两个集合,然后把二者的交集入栈ADD:出栈两个集合,然后把先出栈的集合加入到后出栈的集合中,把结果入栈       每次操作后,输出栈顶集合的大小(即元素个数).例如栈顶元素是A={ {}, {{}} }, 下一个元素是B={ {}, {{{}}} },则:UNION操作将