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

栈的学习

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

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

时间: 2024-10-16 04:09:34

数据结构与算法的学习-栈的相关文章

数据结构与算法基础学习笔记

*********************************************            ---算法与数据机结构--- 数据结构:由于计算机技术的发展,需要处理的对象不再是纯粹的数值,还有像字符,表,图像等具有一定结构的数据,需要用好的算法来处理这些数据. 我们把现实中大量而又复杂的问题以特定的数据类型的特定的存储结构保存到主存储器中,以及在此基础上为实现某个功能而执行的相应操作(查找排序),这个相应的操作也叫算法. 数据结构 = 个体 +个体的关系算法 =对存储数据的操

JavaScript 数据结构与算法之美 - 栈内存与堆内存 、浅拷贝与深拷贝

前言 想写好前端,先练好内功. 栈内存与堆内存 .浅拷贝与深拷贝,可以说是前端程序员的内功,要知其然,知其所以然. 笔者写的 JavaScript 数据结构与算法之美 系列用的语言是 JavaScript ,旨在入门数据结构与算法和方便以后复习. 栈 定义 后进者先出,先进者后出,简称 后进先出(LIFO),这就是典型的栈结构. 新添加的或待删除的元素都保存在栈的末尾,称作栈顶,另一端就叫栈底. 在栈里,新元素都靠近栈顶,旧元素都接近栈底. 从栈的操作特性来看,是一种 操作受限的线性表,只允许在

数据结构与算法的学习-二叉树

二叉树的定义: 二叉树是树形结构的一个重要类型.许多实际问题抽象出来的数据结构往往是二叉树的形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显得特别重要.    二叉树(BinaryTree)是n(n≥0)个结点的有限集,它或者是空集(n=0),或者由一个根结点及两棵互不相交的.分别称作这个根的左子树和右子树的二叉树组成.    这个定义是递归的.由于左.右子树也是二叉树, 因此子树也可为空树. 二叉树的遍历 对于二叉树来讲最主要.最基本的运算是遍历

数据结构与算法JavaScript描述——栈

栈就是和列表类似的一种数据结构,它可用来解决计算机世界里的很多问题. 栈是一种高效的数据结构,因为数据只能在栈顶添加或删除,所以这样的操作很快,而且容易实现. 栈的使用遍布程序语言实现的方方面面,从表达式求值到处理函数调用. 1.对栈的操作: 栈是一种特殊的列表,栈内的元素只能通过列表的一端访问,这一端称为栈顶. 栈被称为一种后入先出的数据结构. 由于栈具有后入先出的特点,所以任何不在栈顶的元素都无法访问. 为了得到栈底的元素,必须先拿掉上面的元素. 对栈的两种主要操作是将一个元素压入栈和将一个

数据结构与算法JavaScript描述——栈的使用

有一些问题特别适合用栈来解决.本节就介绍几个这样的例子. 1) 数制间的相互转换 可以利用栈将一个数字从一种数制转换成另一种数制.假设想将数字n 转换为以b 为基数的数字,实现转换的算法如下. 使用栈,在JavaScript 中实现该算法就是小菜一碟.下面就是该函数的定义,可以将数字转化为二至九进制的数字: //============================使用Stack类==================================== /** * 1.数制间的相互转换 */

数据结构和算法术语学习笔记

数据结构:是相互之间存在的一种或多种特定关系的数据元素的集合. 数据:是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合.数据不仅包括整型.实型等数值类型,还包括字符及声音.图像.视频等非数值类型. 数据元素:是组成数据的.有一定意义的基本单位,在计算机中通常作为整体处理.也被成为记录. 数据项:一个数据元素可以由若干个数据项组成.数据项是数据不可分割的最小单位. 数据对象:是性质相同的数据元素的集合,是数据的子集. 按照视点的不同,我们吧数据结构分为

数据结构与算法之美——栈

如何理解栈? 我们平时放盘子的时候,都是从下往上一个一个放,取的时候是从上往下一个一个取,不能从中间抽出.后进者先出,这就是典型的“栈”结构.从栈的操作特性上来看,栈是一种“操作受限”的线性表,只允许从一端插入和删除. 事实上,从功能上看,数组或链表确实可以替代栈,并且操作上更加灵活,但是,在使用时就比较不可控,更容易出错. 当一个数据集合只涉及在一端的插入和删除操作,并且满足后进先出的特性,应该首选“栈”这种数据结构. 实现一个栈 栈主要包含两个操作:出栈和入栈.栈既可以用数组来实现(顺序栈)

数据结构和算法(What Why How)

数据结构和算法是什么? 从广义上讲,数据结构就是指一组数据的存储结构.算法就是操作数据的一组方法. 从狭义上讲,是指某些著名的数据结构和算法,比如队列.堆.栈.二分查找.动态规划等. 数据结构和算法有什么关系? 数据结构和算法是相辅相成的.数据结构是为算法服务的,算法要作用在特定的数据结构之上.因此,我们无法孤立数据结构来讲算法,也无法孤立算法来讲数据结构. 为什么要学数据结构和算法? 如果不学数据结构和算法: 难以通过大公司的面试 编写的代码运行效率低下,占用存储空间大 写出来的框架Bug多.

与Javascript相关的数据结构和算法

著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处.作者:豪情链接:http://www.zhihu.com/question/36882354/answer/69416260来源:知乎 建议先打好基础,了解js语言的特性或玩法,然后再来玩算法,个人感觉才能四两拨千斤,算法这种东西,是高级抽象的东西,简单说:是熟悉计算机语言解决日常需求的前提下,熟练的选择一种高效的做事方式,先了解如何将日常的需求或人类的自然语言转换为计算机语言,然后在进一步的确定算法在整个代码开发中所扮演的角色