java数据结构链表,堆栈,队列相关专题分析与扯谈-堆栈
来源:互联网 发布:地下城与勇士300k网络 编辑:程序博客网 时间:2024/05/16 00:47
继上一篇讲完链表之后,这篇开始我讲堆栈相关内容
顺序堆栈
堆栈有其线性结构和离散结构,其都有数据集合和操作集合
一、定义操作堆栈的功能接口
(1)入栈push(obj):把数据元素obj插入堆栈。
(2)出栈pop():出栈, 删除的数据元素由函数返回。
(3)取栈顶数据元素getTop():取堆栈当前栈顶的数据元素并由函数返回。
(4)非空否notEmpty():若堆栈非空则函数返回true,否则函数返回false。
二、定义队列逻辑类,实现逻辑
定义功能接口Stack_,在下文链式堆栈当中同样会用到该接口
public interface Stack_ { /** * 入栈 */ void push(Object object) throws Exception; /** * 出桟 */ Object pop() throws Exception; /** * 获得桟顶元素 */ Object getTop() throws Exception; /** * 判断是否为空 */ boolean isEmpty();}
实现顺序堆栈逻辑,当中实现接口功能stack_
/** * 顺序桟 * * @author robert * */public class SequenceStack_ implements Stack_ { private static final int defaultsize = 10; public int mTop; int mMaxsize; private Object[] mStack; public SequenceStack_() { init(defaultsize); } public SequenceStack_(int size) { init(size); } public void init(int size) { this.mMaxsize = size; this.mTop = 0; mStack = new Object[size]; } @Override public void push(Object object) throws Exception { // TODO Auto-generated method stub if (mTop == mMaxsize) { throw new Exception("enman"); } mStack[mTop] = object; mTop++; } @Override public Object pop() throws Exception { if (isEmpty()) { throw new Exception("null"); } mTop--; return mStack[mTop]; } @Override public Object getTop() throws Exception { if (mTop == mMaxsize) { throw new Exception("enman"); } return mStack[mTop - 1]; } @Override public boolean isEmpty() { // TODO Auto-generated method stub return mTop == 0; }}
测试类
public class Test_stack { /** * @param args */ public static void main(String[] args) throws Exception { // TODO Auto-generated method stub SequenceStack_ stack = new SequenceStack_(10); Scanner in = new Scanner(System.in); int temp; for (int i = 0; i < 10; i++) { System.out.println("请输入第" + (i + 1) + "个整数:"); temp = in.nextInt(); stack.push(temp); } while (!stack.isEmpty()) { System.out.println(stack.pop()); } }}
结果:
链式堆栈
功能接口同样使用上文的stack_接口
抽象数据类型结点类LinkStack_Node
//结点类public class LinkStack_Node { Object element; // 数据域 LinkStack_Node next; // 指针域 // 头结点的构造方法 public LinkStack_Node(LinkStack_Node nextval) { this.next = nextval; } // 非头结点的构造方法 public LinkStack_Node(Object obj, LinkStack_Node nextval) { this.element = obj; this.next = nextval; } // 获得当前结点的后继结点 public LinkStack_Node getNext() { return this.next; } // 获得当前的数据域的值 public Object getElement() { return this.element; } // 设置当前结点的指针域 public void setNext(LinkStack_Node nextval) { this.next = nextval; } // 设置当前结点的数据域 public void setElement(Object obj) { this.element = obj; } public String toString() { return this.element.toString(); }}
功能逻辑类的代码
/** * 链式桟 * * @author robert * */public class LinkStack_ implements LStack_ { LinkStack_Node mhead;// 栈顶指针 int msize;// 节点个数 public LinkStack_() { this.mhead = null; this.msize = 0; } @Override public void push(Object object) throws Exception { mhead = new LinkStack_Node(object, mhead); msize++; } @Override public Object pop() throws Exception { if(isEmpty()){ throw new Exception("null"); } Object value = mhead.getElement(); mhead = mhead.getNext(); msize--; return value; } @Override public Object getTop() throws Exception { return mhead.getElement(); } @Override public boolean isEmpty() { return mhead == null; }}
测试类:
public class Test_LinkStack { /** * @param args */ public static void main(String[] args) throws Exception { // TODO Auto-generated method stub LinkStack_ stack = new LinkStack_(); Scanner in = new Scanner(System.in); int temp; for (int i = 0; i < 10; i++) { System.out.println("请输入第" + (i + 1) + "个整数:"); temp = in.nextInt(); stack.push(temp); } while (!stack.isEmpty()) { System.out.println(stack.pop()); } }}
结果:
2 0
- java数据结构链表,堆栈,队列相关专题分析与扯谈-堆栈
- java数据结构链表,堆栈,队列等相关专题分析与扯谈-队列
- java数据结构链表,堆栈,队列,串相关专题分析与扯谈-概述
- java数据结构链表,堆栈,队列相关专题分析与扯谈-链表
- java数据结构链表,堆栈,队列,串相关专题分析与扯谈-串结构
- java堆栈与队列
- java队列与堆栈
- 数据结构之堆栈与队列
- Java数据结构--------堆栈和队列
- java 数据结构----------堆栈和队列
- 数据结构的堆栈 与Java中的堆栈
- java中的队列与堆栈
- 数据结构与算法01--堆栈 & 队列
- 数据结构系列(4)堆栈与队列
- 数据结构-堆栈和队列
- 【数据结构】堆栈和队列
- 数据结构--堆栈和队列
- 数据结构堆栈和队列
- How to grab video frames directly from QCamera
- 点击移除样式,再点击新增样式jq代码
- HDU-4849 Wow! Such City!,最短路!
- TensorFlow的异常Reciprocal[T=DT_INT32](Variable_1/read)
- JavaScript算法-排序算法
- java数据结构链表,堆栈,队列相关专题分析与扯谈-堆栈
- zookeeper功能和应用
- RecyclerView加载动画
- java数据结构链表,堆栈,队列等相关专题分析与扯谈-队列
- 最新最全面的QT+Opencv+CMake配置
- java数据结构链表,堆栈,队列,串相关专题分析与扯谈-串结构
- windows 下安装redis
- javascript将table 生成 excel
- linux centOS6 nexus 开启自动启动