栈和队列:

通常是作为程序猿的工具,用于辅助构思算法。生命周期较短,执行时才被创建

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

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

栈:

同一时候,仅仅同意一个数据被訪问,后进先出

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

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

public class StackS {

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;

}

//size

public int size() {

return top + 1;

}

public static void main(String[] args) {

StackS stack = new StackS(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

*/

public class StackSS {

private LinkedList datas;

public StackSS() {

datas = new LinkedList();

}

// 入栈

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();

}

//size

public int size() {

return datas.size();

}

public static void main(String[] args) {

StackS stack = new StackS(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 stack = new StackSS();

char[] charArray = word.toCharArray();

int len = charArray.length;

for (int i = 0; i

stack.push(charArray[i]);

}

StringBuilder sb = new StringBuilder();

while (!stack.isEmpty()) {

sb.append(stack.pop());

}

System.out.println("反转后:" + sb.toString());

}

}打印:

反转后:社会式株

模拟栈 java_Java 模拟栈结构相关推荐

  1. Colorful Lecture Note(栈的模拟)

    时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 Little Hi is writing an algorithm lecture note for Little Ho. ...

  2. 编写程序,使用一维数组,模拟栈数据结构。 要求: 1、这个栈可以存储java中的任何引用类型的数据。 2、在栈中提供push方法模拟压栈。(栈满了,要有

    代码 /*第一题:编写程序,使用一维数组,模拟栈数据结构.要求:1.这个栈可以存储java中的任何引用类型的数据.2.在栈中提供push方法模拟压栈.(栈满了,要有提示信息.)3.在栈中提供pop方法 ...

  3. Java开发中巧妙使用链表来实现模拟栈的入栈出栈操作

    2019独角兽企业重金招聘Python工程师标准>>> 在Java开发中经常会碰到需要你用Java链表来实现入栈出栈的模拟操作,下文就这个操作做了一个详细的描述. 栈:后进先出:最后 ...

  4. 堆 堆栈 java_java的栈和堆

    先用一张图展示一下Java堆栈的概况 堆 方法区:class文件信息,运行时常量池,以及编译器编译后的代码 堆:存储对象,对象包含类的信息,指向方法区 栈 虚拟机栈:表示Java方法执行的内存模型,每 ...

  5. 再探C#类与结构体究竟谁快——考虑栈变量、栈分配、64位整数、密封类

    上次我对C#类与结构体做了一次速度评测(http://blog.csdn.net/zyl910/article/details/6788417).经过一段时间思索,发现还可以进一步探讨-- 第一.栈变 ...

  6. 定义入栈java_Java堆和栈你敢说了解吗?看完这个文章再有底气说吧

    Java中堆和栈的理解要求特别深刻,所以我们重点写了一个堆和栈的区别的文章,方便大家理解和应用. JAVA,内存模型中堆和栈的区别 在了解Java堆和栈的区别之前,我们先了解一下内存分配策略. JAV ...

  7. java链式栈_Java栈之链式栈存储结构实现

    一.链栈 采用单链表来保存栈中所有元素,这种链式结构的栈称为链栈. 二.栈的链式存储结构实现 package com.ietree.basic.datastructure.stack; /** * 链 ...

  8. 11.JDK8内存模型、本地方法栈、虚拟机栈、栈帧结构(局部变量表、操作数栈、方法出口、虚拟机栈与本地方法栈的关系、寄存器、方法区、堆(Heap)、jvm中的常量池、Metaspace(元空间))

    11.JDK8内存模型 11.1.本地方法栈(Native Method Stacks) 11.2.虚拟机栈(Java Virtual Machine Stacks) 11.3.栈帧结构 11.3.1 ...

  9. 数据结构(C++版) 栈的链接存储结构及实现

    数据结构(C++版) 栈的链接存储结构及实现 #include<iostream.h> struct node {     int data;     node *next; }; cla ...

最新文章

  1. 软件测试培训分享:做软件测试工作如何清楚的描述一个bug
  2. JMeter常用组件
  3. Windows下安装Docker图解
  4. jquery form 的beforeSubmit提交前的回调函数
  5. TensorFlow for Hackers - Part I
  6. 在Mac上为自己手动编译安装一套PHP7的开发环境
  7. 1.2w星!火爆GitHub的Python学习100天刷爆朋友圈!
  8. java证书验证失败_Java 跳过 HTTPS 请求过程中证书验证问题
  9. Mac系统打开dmg出现 “资源忙” 怎么解决?
  10. asp导出excel文件格式
  11. 【物联网项目系列】——使用netty框架做一个环保hj212协议即时通讯工具(接收解析处理实时数据)
  12. 鹏业安装算量软件支架计算
  13. 超阅读:数码时代的文本变革
  14. ccna综合实验实训总结_CCNA实训总结
  15. 蒲丰投针问题的matlab仿真
  16. #名词区别篇:px、em、rem、rpx、vh、vw、vmin 、vmax、%用法 与 区别
  17. (收藏)刘德华获奖全记录“经典”
  18. 湖北省荆门市谷歌高清卫星地图下载
  19. 【项目精选】城市公交查询系统(论文+视频+源码)
  20. 使用MRT批量提取modis数据所需波段(HDF转TIF)

热门文章

  1. SQL语法之排序查询(进阶3)and常见函数(进阶4)
  2. 【安全】免密登陆SQLSERVER 之 Token 窃取
  3. C++11 运行时变量类型判断
  4. pwn学习总结(四)—— 堆基础知识(持续更新)
  5. Windows驱动开发学习笔记(一)—— 环境配置第一个驱动程序
  6. 12、Java Swing计算器界面的实现
  7. 1、数据库为什么需要备份?
  8. 线性代数 第四章 向量组的线性相关性
  9. C语言选择排序(解析)
  10. Servlet中的HttpServlet