栈和队列:

一般是作为程序员的工具,用于辅助构思算法,生命周期较短,运行时才被创建

访问受限,在特定时刻,只有一个数据可被读取或删除

是一种抽象的结构,内部的实现机制,对用户不可见,比如用数组、链表来实现栈

栈:

同时,只允许一个数据被访问,后进先出

对于入栈和出栈的时间复杂度都为O(1),即不依赖栈内数据项的个数,操作比较快

例,使用数组作为栈的存储结构

public class StackS<T> {private int max;private T[] ary;private int top;   //指针,指向栈顶元素的下标public StackS(int size) {this.max = size;ary = (T[]) new Object[max];top = -1;}// 入栈public void push(T data) {if (!isFull())ary[++top] = data;}// 出栈public T pop() {if (isEmpty()) {return null;}return ary[top--];}// 查看栈顶public T peek() {return ary[top];}//栈是否为空public boolean isEmpty() {return top == -1;}//栈是否满public boolean isFull() {return top == max - 1;}//sizepublic int size() {return top + 1;}public static void main(String[] args) {StackS<Integer> stack = new StackS<Integer>(3);for (int i = 0; i < 5; i++) {stack.push(i);System.out.println("size:" + stack.size());}for (int i = 0; i < 5; i++) {Integer peek = stack.peek();System.out.println("peek:" + peek);System.out.println("size:" + stack.size());}for (int i = 0; i < 5; i++) {Integer pop = stack.pop();System.out.println("pop:" + pop);System.out.println("size:" + stack.size());}System.out.println("----");for (int i = 5; i > 0; i--) {stack.push(i);System.out.println("size:" + stack.size());}for (int i = 5; i > 0; i--) {Integer peek = stack.peek();System.out.println("peek:" + peek);System.out.println("size:" + stack.size());}for (int i = 5; i > 0; i--) {Integer pop = stack.pop();System.out.println("pop:" + pop);System.out.println("size:" + stack.size());}}
}

上面的例子,有一个maxSize的规定,因为数组是要规定大小的,若想无限制,可以使用其他结构来做存储,当然也可以new一个新的长度的数组。

例,使用LinkedList存储来实现栈

/*** 使用LinkedList存储来实现栈* @author stone** @param <T>*/
public class StackSS<T> {private LinkedList<T> datas;public StackSS() {datas = new LinkedList<T>();}// 入栈public void push(T data) {datas.addLast(data);}// 出栈public T pop() {return datas.removeLast();}// 查看栈顶public T peek() {return datas.getLast();}//栈是否为空public boolean isEmpty() {return datas.isEmpty();}//sizepublic int size() {return datas.size();}public static void main(String[] args) {StackS<Integer> stack = new StackS<Integer>(3);for (int i = 0; i < 5; i++) {stack.push(i);System.out.println("size:" + stack.size());}for (int i = 0; i < 5; i++) {Integer peek = stack.peek();System.out.println("peek:" + peek);System.out.println("size:" + stack.size());}for (int i = 0; i < 5; i++) {Integer pop = stack.pop();System.out.println("pop:" + pop);System.out.println("size:" + stack.size());}System.out.println("----");for (int i = 5; i > 0; i--) {stack.push(i);System.out.println("size:" + stack.size());}for (int i = 5; i > 0; i--) {Integer peek = stack.peek();System.out.println("peek:" + peek);System.out.println("size:" + stack.size());}for (int i = 5; i > 0; i--) {Integer pop = stack.pop();System.out.println("pop:" + pop);System.out.println("size:" + stack.size());}}
}

例,单词逆序,使用Statck结构

public class WordReverse {public static void main(String[] args) {reverse("株式会社");}static void reverse(String word) {if (word == null) return;StackSS<Character> stack = new StackSS<Character>();char[] charArray = word.toCharArray();int len = charArray.length;for (int i = 0; i <len; i++ ) {stack.push(charArray[i]);}StringBuilder sb = new StringBuilder();while (!stack.isEmpty()) {sb.append(stack.pop());}System.out.println("反转后:" + sb.toString());}
}

打印:

反转后:社会式株

Java 模拟栈结构相关推荐

  1. 032_使用ArrayDeque模拟栈结构

    import java.util.ArrayDeque; import java.util.Iterator;/*** 使用ArrayDeque模拟栈结构*/ public class DequeSt ...

  2. 模拟栈 java_Java 模拟栈结构

    栈和队列: 通常是作为程序猿的工具,用于辅助构思算法.生命周期较短,执行时才被创建 訪问受限.在特定时刻,仅仅有一个数据可被读取或删除 是一种抽象的结构.内部的实现机制.对用户不可见.比方用数组.链表 ...

  3. Java_基础—用LinkedList模拟栈数据结构的集合并测试

    为了达到更好的封装效果,应该把使用LinkedLIst的方法进行进栈(list.addLast(obj)).弹栈(list.removeLast()).判断栈是否为空(list.isEmpty())封 ...

  4. java顺序栈_顺序栈的基本操作(入栈和出栈)

    顺序栈的基本操作(入栈和出栈) 顺序栈,即用顺序表实现栈存储结构.通过前面的学习我们知道,使用栈存储结构操作数据元素必须遵守 "先进后出" 的原则,本节就 "如何使用顺序 ...

  5. 花式模拟【栈结构】做“日志分析”(洛谷P1165题题解,Java语言描述)

    题目要求 P1165题目链接 分析 标准的栈结构,但使用数组来模拟会更简单. 因为对于这个问题,其实数组不需要存储真实数值,只考虑当前最大值就行了. 毕竟,出栈也不需要返回当前真实值. 另外,我们只使 ...

  6. 程序计数器(PC寄存器)以及java虚拟机栈的存储结构与运行原理的基本介绍

    学习内容: 1.运行时数据区的结构 2.JVM线程的说明 3.程序计数器(PC寄存器) 4.java虚拟机栈 内容详情: 1.运行时数据区的结构 其中:上面的本地方法栈,程序计数器,虚拟机栈是每个线程 ...

  7. JAVA SE学习day_12:集合的排序、队列、栈结构

    一.集合的排序 1.1 集合的排序 集合的工具类java.util.Collections提供了一个静态方法sort,可以对List集合 进行自然排序,即:从小到大 除了自然排序之外还有反转.乱序方法 ...

  8. 左神算法:单调栈结构(Java版)

    本题来自左神<程序员面试代码指南>"单调栈结构"题目. 题目 给定一个不含有重复值的数组 arr,找到每一个 i 位置左边和右边离 i 位置最近且值比 arr[i] 小 ...

  9. 数据结构笔记--栈的总结及java数组实现简单栈结构

    杂谈"栈"结构: 栈(Stack)是一种插入删除操作都只能在一个位置上进表,这个位置位于表的末端,叫做栈顶(Top). 对栈的基本操作有push和pop,表示进栈和出栈.也就相当于 ...

最新文章

  1. BERT和ERNIE谁更强?这里有一份4大场景的细致评测
  2. Android之实现RTL的ViewPager
  3. layui tab html,layui竖版tab选项卡
  4. 是什么决定了创业的成败?
  5. Java实战视频bilibili
  6. hget如何获取多个value_《深入微服务》之 如何给老婆解释什么是微服务的基础框架SpringBoot?...
  7. 对话张悦然:当年新概念作文大赛获奖者 现在怎样了
  8. gcc for linux安装失败,安装错误的gcc导致一些错误
  9. Keycloak服务器安装和配置
  10. t60整了个vista!!感觉不错!
  11. 明解C语言(入门篇)第十章
  12. 基于校园图书管理系统需求分析
  13. 如何把python代码翻译成中文-Python:谷歌翻译20次的程序如何实现?
  14. 腾讯越来越不懂游戏了
  15. vue脚手架 使用npm run dev 遇到的错误问题
  16. 第07课:项目实战——自己动手写一个神经网络模型
  17. python房子_用Python研究了三千套房子,告诉你究竟是什么抬高了房价?
  18. 问卷调查系统的设计与实现【源码:文档:教程】
  19. 经典 Fuzzer 工具 AFL 模糊测试指南
  20. (模电3)整流二极管和开关二极管

热门文章

  1. Verilog HDL 学习篇——六位数码管驱动
  2. 企业数字化转型 有“后台”就是硬
  3. PPT如何抠图?这个操作还真没了解过
  4. 使用adb查看手机中包含中文的目录或者文件(中文乱码问题)。
  5. flutter调用android 原生TextView
  6. HTML hr标签简介
  7. 计算机 小学数学应用题教学设计,小学数学如何有效地进行应用题教学设计
  8. 金华市中级工程师职称证书用途
  9. 从零开始学ros小车仿真
  10. 关于mac中office文件不显示图标的解决方法