stack的实现
来源:互联网 发布:三星s5230c软件 编辑:程序博客网 时间:2024/05/22 06:17
1,使用数组 实现
public class ArrayStack implements Stack {String[] data; // 数据int N; // 位置public static void main(String[] args) {ArrayStack s = new ArrayStack(10);s.push("String1");s.push("String2");s.push("String3");System.out.println(s.size());System.out.println(s.pop());System.out.println(s.pop());System.out.println(s.pop());System.out.println(s.isEmpty());}public ArrayStack(int size) {data = new String[size];N = 0;}@Overridepublic void push(String item) {if (data.length > N) {data[N] = item;N++;} else {throw new RuntimeException("stack 已满");}}@Overridepublic String pop() {N--;if (N < 0) {throw new RuntimeException("没有数据可以获取");}String str = data[N];data[N] = null;return str;}@Overridepublic boolean isEmpty() {return N == 0;}@Overridepublic int size() {return N;}}
2.使用链表 实现
public class LinkStack implements Stack {Node current = null;// 当前int size = 0;public static void main(String[] args) {LinkStack s = new LinkStack();s.push("String1");s.push("String2");s.push("String3");System.out.println(s.size());System.out.println(s.pop());System.out.println(s.pop());System.out.println(s.pop());System.out.println(s.pop());System.out.println(s.isEmpty());}@Overridepublic void push(String item) {Node node = new Node(item);if (current == null) {current = node;} else {node.next = current;current = node;}size++;}@Overridepublic String pop() {if (current == null) {throw new RuntimeException("没有数据可以获取");}String str = current.data;current = current.next;size--;return str;}@Overridepublic boolean isEmpty() {return size == 0;}@Overridepublic int size() {return size;}}class Node {public String data;public Node next;public Node(String item) {this.data = item;next = null;}}
3.动态大小的数组实现
public class ReSizeArrayStack implements Stack {String[] data; // 数据int N; // 位置public static void main(String[] args) {ReSizeArrayStack s = new ReSizeArrayStack(10);s.push("String1");s.push("String2");s.push("String3");System.out.println(s.data.length);System.out.println(s.size());System.out.println(s.pop());System.out.println(s.pop());System.out.println(s.pop());System.out.println(s.isEmpty());System.out.println(s.data.length);}public ReSizeArrayStack(int size) {data = new String[size];N = 0;}@Overridepublic String pop() {N--;if (N < 0) {throw new RuntimeException("没有数据可以获取");}String str = data[N];data[N] = null;if (N < data.length / 4) {resize(data.length / 2);}return str;}@Overridepublic void push(String item) {if (N >= data.length) {resize(data.length * 2);}data[N] = item;N++;}private void resize(int size) {String[] datas = new String[size];// 复制数据到新的数组中int min = data.length > size ? size : data.length;for (int i = 0; i < min; i++) {datas[i] = data[i];}data = datas;}@Overridepublic boolean isEmpty() {return N == 0;}@Overridepublic int size() {return N;}}
4.解析运算的字符串(+-)
public class 计算表达式解析 {public static void main(String[] args) {System.out.println(Analysis());}static String str = "(1-(2+3)+2)";private static String Analysis() {// System.out.println(str);LinkStack NStack = new LinkStack();LinkStack OStack = new LinkStack();for (int i = 0; i < str.length(); i++) {char c = str.charAt(i);if (c == '+' || c == '-') {OStack.push(c + "");} else if (c == '(') {str = str.substring(i + 1, str.length());NStack.push(Analysis());i = -1;} else if (c == ')') {str = str.substring(i + 1, str.length());NStack.push(jisuan(NStack, OStack));break;} else {NStack.push(c + "");}}return jisuan(NStack, OStack);}private static String jisuan(LinkStack NStack, LinkStack OStack) {String str2 = "";if (OStack.size == 0) {str2 = NStack.pop();}while (OStack.size > 0) {String op = OStack.pop();int a = Integer.parseInt(NStack.pop());int b = Integer.parseInt(NStack.pop());System.out.println("计算:" + b + op + a);if ("+".equals(op)) {str2 = (b + a) + "";} else if ("-".equals(op)) {str2 = (b - a) + "";}NStack.push(str2);}return str2;}}
0 0
- stack容器的实现
- stack的数组实现
- stack的简单实现
- Stack 的 java 实现
- stack的实现
- 栈:stack的实现
- C++的Stack实现
- stack的单链表实现
- STL stack 的实现
- Stack的实现
- Stack 的C++实现
- Stack的实现
- stack的模拟实现
- Stack 堆栈的实现
- Stack(1)Stack的顺序实现
- Stack(2)Stack的链式实现
- 通用的链式stack实现
- dump call stack 的实现
- JNI编程(二) —— 让C++和Java相互调用(2)
- powerDesigner利用数据库反向生成模型
- SQLite
- exp\imp 导入导出命令使用
- linux命令行下载jdk
- stack的实现
- 口碑不错的国内外优秀稳定网络加速器收集
- 分布式日志收集系统Apache Flume的设计详细介绍
- hibernate缓存机制
- MySQL my.cnf参数配置优化详解
- VC/MFC之TreeCtrl控件使用经验总结
- 对话框包含EditText自动弹出软键盘
- 文本特征提取方法研究
- __bridge,__bridge_retained和__bridge_transfer的意思、区别与使用