数据结构2—Java_栈_顺序存储
2016-03-02 16:13
477 查看
一、定义接口
package Statck; public interface IStatck<T> { /** * 压栈 * @param t */ public void push(T t); /** * 弹栈 */ public T Pop(); /** * 返回元素个数 * @return */ public int StackLength(); /** * 清空栈 */ public void ClearStack(); }
二、自定义类
package Statck; public class MStack<T> implements IStatck<T> { private int top=-1; Object[] objArray ; int MAX; /** * 构造函数,初始化数组大小 * @param n */ MStack(int n){ MAX=n; objArray = new Object[MAX]; } /** * 压栈 */ @Override public void push(T t) { if(top>=MAX-1){//top==Max-1时满栈 throw new RuntimeException("超出栈上线"); }else{ top++; objArray[top]=t; } } /** * 弹栈 */ @Override public T Pop() { if(top==-1){ throw new RuntimeException("空栈,无法弹出元素"); }else{ T t =(T)objArray[top]; top--; return t; } } /** * 长度 */ @Override public int StackLength() { return top+1; } @Override public void ClearStack() { if(top>-1){ for(int i=0;i<top;i++){ objArray[i]=null; } } } }
三、测试代码
package Statck; import java.util.Random; public class TestStack { MStack<Integer> stack ; final int MAXVALUE=15; Random r = new Random(); public static void main(String[] args){ TestStack ts = new TestStack(); ts.initStack(10); ts.pushData(); } /** * 初始化, * @param length 栈长度 */ private void initStack(int length){ stack = new MStack<Integer>(length); } /** * 压栈——弹栈——显示 */ private void pushData(){ int length = Math.abs(r.nextInt(MAXVALUE));//Math.abs()取绝对值 try{ System.out.println("压入元素:"); for(int i=0;i<length;i++){ int j = Math.abs(r.nextInt(MAXVALUE)); System.out.print(" "+j); stack.push(j); } }catch(Exception e){System.out.println(e.toString());} showStackData(stack); } /** * 显示 * @param stack */ private void showStackData(MStack<Integer> stack){ System.out.println(""); System.out.println("栈长:"+stack.StackLength()); System.out.println("栈内元素为(出栈顺序):"); int length = stack.StackLength(); for(int i=0;i<length;i++){ System.out.print(" "+stack.Pop()); } } }
四、测试结果
压入元素:13 10 3 3 9 7 3 12 4 10 10java.lang.RuntimeException: 超出栈上线
栈长:10
栈内元素为(出栈顺序):
10 4 12 3 7 9 3 3 10 13
top来指示栈顶元素在数组中的位置,top初始值为-1,表示栈为空,top=0表示已经有一个元素
(top==MAXSIZE-1)为栈满标志
相关文章推荐
- Windows API中的数据结构
- 2015年大二上-数据结构-图-2-(5)-拓扑排序
- 如何实现自定义的数据结构?以线性表的实现为例分析
- 数据结构-单向无头不循环链表基本实例
- 常用数据结构的应用场景
- 2015年大二上-数据结构-图-2-(4)-Floyd算法
- LeetCode题目难度分布(含面试频率及使用的数据结构与算法)
- 常见数据结构复杂度
- 数据结构与算法面试总结
- 6-2-二叉树(二叉链表存储)-树和二叉树-第6章-《数据结构》课本源码-严蔚敏吴伟民版
- 2015年大二上-数据结构-图-2-(3)-Dijkstra算法
- CLRS 14.2如何扩张数据结构
- 6-1-二叉树顺序存储结构-树和二叉树-第6章-《数据结构》课本源码-严蔚敏吴伟民版
- 数据结构-单向有头不循环链表基本实例
- 数据结构与算法分析 学习笔记——最大子序列求和问题
- 网易云课堂 数据结构01-复杂度2 Maximum Subsequence Sum
- python 数据结构
- 有序二叉树的实现
- 【Educational Codeforces Round 6E】【线段树 dfs序】New Year Tree 子树颜色修改子树颜色数
- 数据结构(15)--哈夫曼树以及哈夫曼编码的实现