数据结构_顺序栈的java实现

栈的特点

  • 栈(stack)在计算机科学中是限定仅在表尾进行插入或删除操作的线形表。
    栈是一种数据结构,它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。
  • 栈是只能在某一端插入和删除的特殊线性表。用桶堆积物品,先堆进来的压在底下,随后一件一件往堆。取走时,只能从上面一件一件取。堆和取都在顶部进行,底部一般是不动的。
  • 栈就是一种类似桶堆积物品的数据结构,进行删除和插入的一端称栈顶,另一堆称栈底。插入一般称为进栈(PUSH),删除则称为退栈(POP)。 栈也称为后进先出表(LIFO表)。

顺序栈的特点

  1. 因为物理结构和逻辑结构均连续
  2. 顺序储存要求明确数据的规模用来分配数据空间
  3. 节省空间

顺序栈的java实现

package stack;
/**
 * ================================数据结构说明:========================================
 * 
 * 名称:顺序栈
 * 
 * 特征:
 *      1. 因为物理结构和逻辑结构均连续
 *      3. 顺序储存要求明确数据的规模用来分配数据空间
 *      4. 节省空间
 * 
 * 主要方法:
 *      1. init:初始化顺序表
 *      2. destroy:销毁栈
 *      3. clear:清空栈中的元素
 *      4. length:获取数据表长度
 *      5. getTop: 获取栈顶元素
 *      6. pop: 退栈操作
 *      7. isEmpty:判断顺序栈是否为空
 *      8. print:打印顺序栈中的元素
 * 
 * ======================================================================================
 */
/**
 * @author 叶清逸
 * @date 2018年7月31日上午11:23:26
 * @version 1.0
 * @project stack
 */
public class SeqStack implements Stack{
    //初始化最大容量
    final int MAXSIZE = 100 ;
    //数据域
    Object [] Element  = null ;
    //栈顶指针
    int top ;

    /**
     * @see stack.Stack#init()
     * @explain init方法:初始化栈
     * @throws 
     * @author 叶清逸
     * @date 2018年7月31日 上午11:55:21
     */
    @Override
    public void init() {
        /*初始化数据域*/
        Element = new Object[MAXSIZE] ;
        /*初始化指针*/
        top = -1 ;
    }

    /**
     * @see stack.Stack#destroy()
     * @explain destroy方法:销毁栈
     * @throws 
     * @author 叶清逸
     * @date 2018年7月31日 下午12:01:06
     */
    @Override
    public void destroy() {
        /*若栈未初始化打印错误信息*/
        if(Element == null){
            System.out.println("错误!栈未初始化");
            return ;
        }
        Element = null ;
        top = -1 ;
    }
    /**
     * @see stack.Stack#clear()
     * @explain clear方法: 清空栈
     * @throws 
     * @author 叶清逸
     * @date 2018年7月31日 下午12:01:40
     */
    @Override
    public void clear() {
        /*若栈未初始化打印错误信息*/
        if(Element == null){
            System.out.println("错误!栈未初始化");
            return ;
        }
        /*将所有节点制为空*/
        for(int i=0 ; i<top ; i++){
            Element[i] = null ;
        }
        /*指针制为初始状态*/
        top = -1 ;
    }
    /**
     * @see stack.Stack#isEmpty()
     * @explain isEmpty方法: 判断栈是否为空
     * @return 若为空返回true,否则返回false
     * @throws 
     * @author 叶清逸
     * @date 2018年7月31日 下午12:04:02
     */
    @Override
    public boolean isEmpty() {

        if(top == -1)
            return true ;
        else
            return false;
    }

    /**
     * @see stack.Stack#length()
     * @explain length方法: 获取栈的长度
     * @return 栈的长度
     * @throws 
     * @author 叶清逸
     * @date 2018年7月31日 下午12:06:38
     */
    @Override
    public int length() {
        /*若栈未初始化打印错误信息*/
        if(Element == null){
            System.out.println("错误!栈未初始化");
            return -1;
        }
        return top+1;
    }

    /**
     * @see stack.Stack#getTop()
     * @explain getTop方法: 获取栈顶元素
     * @return 返回栈顶元素
     * @throws 
     * @author 叶清逸
     * @date 2018年7月31日 下午12:07:32
     */
    @Override
    public Object getTop() {
        /*若栈未初始化打印错误信息*/
        if(Element == null){
            System.out.println("错误!栈未初始化");
            return null;
        }
        return Element[top];
    }
    /**
     * @see stack.Stack#push(java.lang.Object)
     * @explain push方法: 将元素压进栈
     * @param elem 要进栈的元素
     * @throws 
     * @author 叶清逸
     * @date 2018年7月31日 下午12:09:49
     */
    @Override
    public void push(Object elem) {
        /*若栈未初始化打印错误信息*/
        if(Element == null){
            System.out.println("错误!栈未初始化");
            return ;
        }
        /*将元素压进栈*/
        Element[top+1] = elem ;
        /*指针+1*/
        top++ ;
    }
    /**
     * @see stack.Stack#pop()
     * @explain pop方法: 元素退栈
     * @return 已退栈的元素
     * @throws 
     * @author 叶清逸
     * @date 2018年7月31日 下午12:12:24
     */
    @Override
    public Object pop() {
        /*若栈未初始化打印错误信息*/
        if(Element == null){
            System.out.println("错误!栈未初始化");
            return null;
        }
        /*复制栈顶元素*/
        Object elem = Element[top] ;
        /*当前指针所指域制为空*/
        Element[top] = null ;
        /*指针-1*/
        top-- ;
        return elem ;
    }

    /**
     * @see stack.Stack#print()
     * @explain print方法: 由栈底向栈顶打印元素
     * @throws 
     * @author 叶清逸
     * @date 2018年7月31日 下午12:14:45
     */
    @Override
    public void print() {
        /*循环遍历数据域,打印*/
        for(int i=0 ; i<=top ; i++){
            System.out.print(Element[i]+" ");
        }
        System.out.println();
    }
}

猜你喜欢

转载自blog.csdn.net/u013634252/article/details/81301366