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
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 打脸引起耳朵疼怎么办 被打了耳痛耳鸣怎么办 苹果6视频锁屏怎么办 抠耳朵抠疼了怎么办 图库的相片没了怎么办 遇到打假牌的人怎么办 部队保障卡丢了怎么办 廊坊武警学院取消现役学员怎么办 孩子去当兵联系不上怎么办 军训戴眼镜晒痕怎么办 想进部队体检没过怎么办 大腿跟小腿不直怎么办 腿被车门夹了怎么办 脚出汗穿凉鞋滑怎么办 玩游戏手出汗屏幕滑怎么办 新买的鞋子臭怎么办 当公民利益受到侵犯怎么办 唇钉里面长肉怎么办 宝宝舔了一口酒怎么办 头被玻璃门撞了怎么办 30多了还一事无成 未来怎么办 27岁失业了该怎么办 无业证明不给开怎么办 典型的缺乏运动的肥胖怎么办 30岁了不想结婚怎么办 专家解释欠30万怎么办 欠医院十几万钱怎么办 当你迷茫的时候怎么办 被骗了一年的积蓄怎么办 当兵身高视力都不够怎么办 当兵中途不想当了怎么办 当兵后不想当了怎么办 在泰国想剪头发怎么办 省二证书丢了怎么办 职称计算机级别报错怎么办 科一不会用电脑怎么办 西安科目三挂了怎么办 我有c照想考a照怎么办 叉车证单位不给怎么办 刚练科目三害怕怎么办 摩托科目一考不过怎么办