码迷,mamicode.com
首页 > 编程语言 > 详细

java:数据结构复习(二)数组栈

时间:2019-02-16 15:28:36      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:ror   结构   div   ESS   util   顺序栈   进制   pre   def   

栈也是数据结构中重要数据结构,它分为链栈和数组栈,特性:元素先进后出,后进先出

读取也只能读取栈顶元素,栈的应用有以下几种:括号匹配,进制转换,与递归也有关系,判断回文,表达式计算(我会在以后文章专门写几篇介绍应用)

推荐在书写数据结构时,保留一个主函数进行测试

栈的源代码:

import java.util.Arrays;
import java.util.Scanner;

/**
 * @author 李正阳
 */
public class MyArraysStack<E> implements MyStack<E> {
    private int DEFAULT_SIZE = 16;//定义栈的初始默认长度
    private int capacity;//保存顺序栈的长度涉及扩容
    public int size;//保存顺序栈中元素的个数
    private Object[] elementData;//定义一个数组用于保存顺序栈中的元素


    /**
     * 初始化栈
     */
    public MyArraysStack() {
        elementData = new Object[DEFAULT_SIZE];
        size = 0;
        capacity = DEFAULT_SIZE;
    }

    /**
     * 清除栈中所有的元素
     *
     * @return
     */
    @Override
    public boolean clearStack() {
        for (int i = 0; i < size; i++) {
            elementData[i] = null;
        }
        return true;
    }

    /**
     * 栈是否为空
     *
     * @return true 空栈 false 非空栈
     */
    @Override
    public boolean isEmpty() {
        if (size == 0) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * 返回这个数组的长度
     *
     * @return
     */
    @Override
    public int getLengh() {
        return size;
    }

    /**
     * 获得栈顶元素
     *
     * @return
     */
    @Override
    public Object getTop() {
        return elementData[size - 1];
    }

    /**
     * 压入元素
     *
     * @param p 存储的值
     * @return true 压入元素成功 false 失败
     */
    @Override
    public boolean push(Object p) {
        if (size >= capacity) {
            reclloc();
            elementData[size] = p;
            size++;
        } else {
            elementData[size] = p;
            size++;

        }
        return true;
    }

    /**
     * 扩容数组
     */
    @Override
    public void reclloc() {
        elementData = Arrays.copyOf(elementData, 2 * DEFAULT_SIZE);
        capacity = 2 * DEFAULT_SIZE;
    }

    /**
     * 弹出栈中的元素
     *
     * @return 所弹出的元素
     */
    @Override
    public E pop() {

        return (E) elementData[--size  ];
    }

    /**
     * 遍历并且输出
     */
    @Override
    public void stackTraverse() {
        for (Object a : elementData) {
            System.out.println(a + " ");
        }
    }
}

 栈的接口:

 1 public interface MyStack<E> {
 2     //清空栈
 3     boolean clearStack();
 4     //判断是否为空栈
 5     boolean isEmpty();
 6     //返回栈中的元素个数
 7     int getLengh();
 8     //返回栈的栈顶元素
 9     Object getTop();
10     //入栈
11     public boolean push(Object p);
12     //出栈
13     public Object pop() ;
14     //编历栈
15     void stackTraverse();
16     //扩容数组
17    default void  reclloc(){};
18     //进制转换
19     default  String systemTransformation(String n,int n1,int n2)  {
20         return "error";
21     }
22     //表达式求值
23     default  boolean expressionEvaluation(String n){
24         return false;
25     }
26     //判断运算符优先级
27     default char precede(char a,char b){
28         return ‘#‘;
29     }
30     //括号匹配
31     default boolean correct(String n){
32         return true;
33     }
34     //回文判断
35     default  boolean  isPalindrome(String n){
36         return false;
37     }
38 }

 

java:数据结构复习(二)数组栈

标签:ror   结构   div   ESS   util   顺序栈   进制   pre   def   

原文地址:https://www.cnblogs.com/lzy321/p/10387642.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!