模拟栈 java_Java 模拟栈结构
栈和队列:
通常是作为程序猿的工具,用于辅助构思算法。生命周期较短,执行时才被创建
訪问受限。在特定时刻,仅仅有一个数据可被读取或删除
是一种抽象的结构。内部的实现机制。对用户不可见。比方用数组、链表来实现栈
栈:
同一时候,仅仅同意一个数据被訪问,后进先出
对于入栈和出栈的时间复杂度都为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 模拟栈结构相关推荐
- Colorful Lecture Note(栈的模拟)
时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 Little Hi is writing an algorithm lecture note for Little Ho. ...
- 编写程序,使用一维数组,模拟栈数据结构。 要求: 1、这个栈可以存储java中的任何引用类型的数据。 2、在栈中提供push方法模拟压栈。(栈满了,要有
代码 /*第一题:编写程序,使用一维数组,模拟栈数据结构.要求:1.这个栈可以存储java中的任何引用类型的数据.2.在栈中提供push方法模拟压栈.(栈满了,要有提示信息.)3.在栈中提供pop方法 ...
- Java开发中巧妙使用链表来实现模拟栈的入栈出栈操作
2019独角兽企业重金招聘Python工程师标准>>> 在Java开发中经常会碰到需要你用Java链表来实现入栈出栈的模拟操作,下文就这个操作做了一个详细的描述. 栈:后进先出:最后 ...
- 堆 堆栈 java_java的栈和堆
先用一张图展示一下Java堆栈的概况 堆 方法区:class文件信息,运行时常量池,以及编译器编译后的代码 堆:存储对象,对象包含类的信息,指向方法区 栈 虚拟机栈:表示Java方法执行的内存模型,每 ...
- 再探C#类与结构体究竟谁快——考虑栈变量、栈分配、64位整数、密封类
上次我对C#类与结构体做了一次速度评测(http://blog.csdn.net/zyl910/article/details/6788417).经过一段时间思索,发现还可以进一步探讨-- 第一.栈变 ...
- 定义入栈java_Java堆和栈你敢说了解吗?看完这个文章再有底气说吧
Java中堆和栈的理解要求特别深刻,所以我们重点写了一个堆和栈的区别的文章,方便大家理解和应用. JAVA,内存模型中堆和栈的区别 在了解Java堆和栈的区别之前,我们先了解一下内存分配策略. JAV ...
- java链式栈_Java栈之链式栈存储结构实现
一.链栈 采用单链表来保存栈中所有元素,这种链式结构的栈称为链栈. 二.栈的链式存储结构实现 package com.ietree.basic.datastructure.stack; /** * 链 ...
- 11.JDK8内存模型、本地方法栈、虚拟机栈、栈帧结构(局部变量表、操作数栈、方法出口、虚拟机栈与本地方法栈的关系、寄存器、方法区、堆(Heap)、jvm中的常量池、Metaspace(元空间))
11.JDK8内存模型 11.1.本地方法栈(Native Method Stacks) 11.2.虚拟机栈(Java Virtual Machine Stacks) 11.3.栈帧结构 11.3.1 ...
- 数据结构(C++版) 栈的链接存储结构及实现
数据结构(C++版) 栈的链接存储结构及实现 #include<iostream.h> struct node { int data; node *next; }; cla ...
最新文章
- 软件测试培训分享:做软件测试工作如何清楚的描述一个bug
- JMeter常用组件
- Windows下安装Docker图解
- jquery form 的beforeSubmit提交前的回调函数
- TensorFlow for Hackers - Part I
- 在Mac上为自己手动编译安装一套PHP7的开发环境
- 1.2w星!火爆GitHub的Python学习100天刷爆朋友圈!
- java证书验证失败_Java 跳过 HTTPS 请求过程中证书验证问题
- Mac系统打开dmg出现 “资源忙” 怎么解决?
- asp导出excel文件格式
- 【物联网项目系列】——使用netty框架做一个环保hj212协议即时通讯工具(接收解析处理实时数据)
- 鹏业安装算量软件支架计算
- 超阅读:数码时代的文本变革
- ccna综合实验实训总结_CCNA实训总结
- 蒲丰投针问题的matlab仿真
- #名词区别篇:px、em、rem、rpx、vh、vw、vmin 、vmax、%用法 与 区别
- (收藏)刘德华获奖全记录“经典”
- 湖北省荆门市谷歌高清卫星地图下载
- 【项目精选】城市公交查询系统(论文+视频+源码)
- 使用MRT批量提取modis数据所需波段(HDF转TIF)