• 数据结构与算法的学习-栈


    栈的学习

    栈存储数据是先进后出的形式

    java语言来实现的话如下

    package com.example;

     

    import java.util.Stack;

     

    /**

     * @author ChenLang 模拟栈的先进后出等

     */

    public class StackDemo {

             int[] stack;

             int top;//表示栈顶

     

             public StackDemo() {

                       stack = new int[10];

                       top = -1;

             }

     

             public StackDemo(int element) {

                       stack = new int[element];

                       top = -1;

             }

             //压栈

             public void push(int value) {

                       stack[++top] = value;

             }

             //出栈

             public int pop() {

                       return stack[top--];

             }

             //判断是否为空

             public boolean isEmpty() {

                       if (top >= 0) {

                                return true;

                       }

                       return false;

             }

             //判断是否满了

             public boolean isFull() {

                       if (stack.length-1 == top) {

                                return true;

                       }

                       return false;

             }

    }

     

    java实现后开始看jdk提供的stack的源码,并改造原先的代码

    stack继承了vector类,该类可实现自动增长的对象数组。

    vector的学习:

    源码中有三个构造方法:

    一:public Vector(int initialCapacity, int capacityIncrement) {

            super();

            if (initialCapacity < 0)

                throw new IllegalArgumentException("Illegal Capacity: "+

                                                   initialCapacity);

            this.elementData = new Object[initialCapacity];

            this.capacityIncrement = capacityIncrement;

        }

    二:

    public Vector(int initialCapacity) {

            this(initialCapacity, 0);

    }

     

    三:public Vector() {

            this(10);

        }

    其中:initialCapacity设定向量对象初始容量,当真正存放的数据超过容量时,系统会扩充向量对象的存储容量

                       capacityIncrement这个参数给定的是每次扩充容量的值。如果这个数是0则每次扩充一倍,利用这个方法可以优化存储,减少内存泄露

    缺点:数据太大时,vector就会消耗很多额外的资源,使应用程序的性能下降,(有可能是数据太多了导致vector分配内存失败,因为vector是用数组存放的,需要连续的存储空间)同时vector一旦插入或者删除数据之后,迭代器就失效了

    同时vector是线程安全,因此访问相比较而言会慢些;

  • 相关阅读:
    c语言博客作业09
    c语言|博客作业08
    C语言|博客作业07
    C语言|博客作业06
    C语言|博客作业05
    C语言|博客作业04
    C语言|博客作业03
    关于Vue.js里面输入框在v-model之后如果给其绑定属性赋初始值导致绑定数据不响应问题
    前后端分离开发模式中关于前端取得分页数据时的分页问题(前端使用ant design pro)
    《电子病案在病案管理中存在问题及对策》文献阅读随笔
  • 原文地址:https://www.cnblogs.com/clovejava/p/7496727.html
Copyright © 2020-2023  润新知