Java 模拟栈结构
来源:互联网 发布:it 服务 编辑:程序博客网 时间:2024/06/16 02:33
栈和队列:
一般是作为程序员的工具,用于辅助构思算法,生命周期较短,运行时才被创建
访问受限,在特定时刻,只有一个数据可被读取或删除
是一种抽象的结构,内部的实现机制,对用户不可见,比如用数组、链表来实现栈
栈:
同时,只允许一个数据被访问,后进先出
对于入栈和出栈的时间复杂度都为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());}}打印:
反转后:社会式株
0 0
- Java 模拟栈结构
- Java 模拟栈结构
- linkedList模拟栈结构
- JAVA用数组来模拟栈的结构
- 一个菜鸟java码农的成长之路(4):用LinkedList模拟栈结构
- NOIP模拟题 [SPFA][DP][栈结构]
- LinkedList<E> 及模拟栈结构
- C语言模拟栈存储结构笔记
- java:队列模拟(自定义链表结构 +LinkedList )
- 用java模拟dos树结构(tree命令)第二弹
- 《java入门第一季》之LinkList模拟桟结构案例
- Java 数组模拟栈
- 模拟树结构读取
- java实现栈结构
- JAVA实现栈结构
- 数据结构 栈结构 JAVA
- Java实现栈结构
- java栈帧结构
- android 初学 需知
- Frameset布局
- 原码、反码、补码
- readonly 和 disable的区别
- 我们需要这样的产品经理
- Java 模拟栈结构
- Linux 安全基础--用户(用户组)
- MyEclipse设置编码方式
- 常用的主机监控Shell脚本
- xCode控制台学习object-c (step by step)
- EXCEL计算不重复项
- Find Minimum in Rotated Sorted Array 2 寻找旋转有序数组的最小值之二
- HDoj-2084-数塔-dp
- Oracle数据库只Dual表