zoukankan      html  css  js  c++  java
  • 数据结构与算法的学习-栈

    栈的学习

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

    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是线程安全,因此访问相比较而言会慢些;

  • 相关阅读:
    NERDTree 快捷键辑录
    linux 自动登录脚本
    INSERT INTO .. ON DUPLICATE KEY更新多行记录
    Linux环境PHP7.0安装
    SVN常用命令
    Linux下查看文件和文件夹大小
    Cacti安装详细步骤
    linux回到上次目录与历史命令查找快捷方式
    shell的if else 以及大于,小于等逻辑表达式
    Nginx_Lua
  • 原文地址:https://www.cnblogs.com/clovejava/p/7496727.html
Copyright © 2011-2022 走看看