Java 模拟栈结构
栈和队列:
一般是作为程序员的工具,用于辅助构思算法,生命周期较短,运行时才被创建
访问受限,在特定时刻,只有一个数据可被读取或删除
是一种抽象的结构,内部的实现机制,对用户不可见,比如用数组、链表来实现栈
栈:
同时,只允许一个数据被访问,后进先出
对于入栈和出栈的时间复杂度都为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 模拟栈结构相关推荐
- 032_使用ArrayDeque模拟栈结构
import java.util.ArrayDeque; import java.util.Iterator;/*** 使用ArrayDeque模拟栈结构*/ public class DequeSt ...
- 模拟栈 java_Java 模拟栈结构
栈和队列: 通常是作为程序猿的工具,用于辅助构思算法.生命周期较短,执行时才被创建 訪问受限.在特定时刻,仅仅有一个数据可被读取或删除 是一种抽象的结构.内部的实现机制.对用户不可见.比方用数组.链表 ...
- Java_基础—用LinkedList模拟栈数据结构的集合并测试
为了达到更好的封装效果,应该把使用LinkedLIst的方法进行进栈(list.addLast(obj)).弹栈(list.removeLast()).判断栈是否为空(list.isEmpty())封 ...
- java顺序栈_顺序栈的基本操作(入栈和出栈)
顺序栈的基本操作(入栈和出栈) 顺序栈,即用顺序表实现栈存储结构.通过前面的学习我们知道,使用栈存储结构操作数据元素必须遵守 "先进后出" 的原则,本节就 "如何使用顺序 ...
- 花式模拟【栈结构】做“日志分析”(洛谷P1165题题解,Java语言描述)
题目要求 P1165题目链接 分析 标准的栈结构,但使用数组来模拟会更简单. 因为对于这个问题,其实数组不需要存储真实数值,只考虑当前最大值就行了. 毕竟,出栈也不需要返回当前真实值. 另外,我们只使 ...
- 程序计数器(PC寄存器)以及java虚拟机栈的存储结构与运行原理的基本介绍
学习内容: 1.运行时数据区的结构 2.JVM线程的说明 3.程序计数器(PC寄存器) 4.java虚拟机栈 内容详情: 1.运行时数据区的结构 其中:上面的本地方法栈,程序计数器,虚拟机栈是每个线程 ...
- JAVA SE学习day_12:集合的排序、队列、栈结构
一.集合的排序 1.1 集合的排序 集合的工具类java.util.Collections提供了一个静态方法sort,可以对List集合 进行自然排序,即:从小到大 除了自然排序之外还有反转.乱序方法 ...
- 左神算法:单调栈结构(Java版)
本题来自左神<程序员面试代码指南>"单调栈结构"题目. 题目 给定一个不含有重复值的数组 arr,找到每一个 i 位置左边和右边离 i 位置最近且值比 arr[i] 小 ...
- 数据结构笔记--栈的总结及java数组实现简单栈结构
杂谈"栈"结构: 栈(Stack)是一种插入删除操作都只能在一个位置上进表,这个位置位于表的末端,叫做栈顶(Top). 对栈的基本操作有push和pop,表示进栈和出栈.也就相当于 ...
最新文章
- BERT和ERNIE谁更强?这里有一份4大场景的细致评测
- Android之实现RTL的ViewPager
- layui tab html,layui竖版tab选项卡
- 是什么决定了创业的成败?
- Java实战视频bilibili
- hget如何获取多个value_《深入微服务》之 如何给老婆解释什么是微服务的基础框架SpringBoot?...
- 对话张悦然:当年新概念作文大赛获奖者 现在怎样了
- gcc for linux安装失败,安装错误的gcc导致一些错误
- Keycloak服务器安装和配置
- t60整了个vista!!感觉不错!
- 明解C语言(入门篇)第十章
- 基于校园图书管理系统需求分析
- 如何把python代码翻译成中文-Python:谷歌翻译20次的程序如何实现?
- 腾讯越来越不懂游戏了
- vue脚手架 使用npm run dev 遇到的错误问题
- 第07课:项目实战——自己动手写一个神经网络模型
- python房子_用Python研究了三千套房子,告诉你究竟是什么抬高了房价?
- 问卷调查系统的设计与实现【源码:文档:教程】
- 经典 Fuzzer 工具 AFL 模糊测试指南
- (模电3)整流二极管和开关二极管