TypeScript算法与数据结构-栈篇】的更多相关文章

本文的源码在这里,可以参考一下 栈也是一种使用非常广泛的线性数据结构,它具有后进先出last in first out的特点.通俗的例子就像我们平时一本一本的往上放书,等到我们又想用书时,我们首先接触到的总是我们最后一本放上去的书. 栈的添加和删除操作总是在栈的一端完成,这一端被称为栈顶,对于栈的实现,我会采用上一篇中实现的数组作为底层的数据结构,所有栈的操作都会在这个底层的数组中完成.栈的主要操作有两个,一个是入栈,一个是出栈 首先我们会定义一个TypeScript接口,这个接口会包含基础的栈…
数组是数据结构中最简单,也是使用最广泛的一种.在原生的js中,数组给我们提供了很多方便的操作方法,比如push(), pop(), shift(), unshift().但是出于对数据结构的学习,我们将不使用这些已有的方法,而是自己实现这些方法.这样也方便我们计算其时间复杂度.这里我们选择使用TypeScript实现,主要是因为TypeScript的强类型控制,以及泛型这些高级特性. 先来看我们自己实现数组的实例属性以及构造函数,我们用capacity来表示数组的容量,虽然在TypeScript…
一.栈的介绍 栈作为一种数据结构,是一种只能在一端进行插入和删除操作.它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来).栈被使用于非常多的地方,例如浏览器中的后退按钮,文本编辑器中的撤销机制. 进栈的时候是1先进,然后是2.3.4.5.6,出栈的时候是先6出,然后是5.4.3.2.1 二.栈中常用的方法 作为一个栈(用stack来表示),最基本的方法有下面几个: stack.push(e): 将元素e添加到S…
本文涉及的源码,均在我的github.有两部分队列和循环队列.有问题的可以提个issue,看到后第一时间回复 1. 队列(Queue) 队列也是一种线性的数据结构, 队列是一种先进先出的数据结构.类似于生活中的排队买东西,先进入队列的人可以先购买到东西.这次的队列具体实现依然会采用之前自己封装好的数组,具体的优势依然是我们可以清晰的算出每次操作的时间复杂度.对于基本的队列而言,主要包含两个基本的操作入队(enqueue)和出队(dequeue). 对于队列而言,入队发生在尾部,出队发生在首部,队…
“要成高手,必练此功”.   要成为优秀的程序员,数据结构和算法是必修的内容.而现在的Web程序员使用传统算法和数据结构都比较少,因为很多算法都是包装好的,不用我们去操心具体的实现细节,如PHP的取栈操作array_pop,进栈操作array_push,都有指定的库函数,导致我们对基础算法的研究越来越少,最后成为一个工具的傀儡而已.   所以我还是建议更多的coder从基础开始学习.这篇就先讲我们最熟悉的栈操作开始入手,让我们熟悉栈.     栈为何物?   口诀“后进先出”,这是我印象最深的一…
可以将10进制数据转换成2进制,8进制,16进制等. 晚上练练算法和数据结构哈. # coding = utf-8 class Stack: def __init__(self): self.items = [] # 是否为空 def is_empty(self): return self.items == [] # 进栈 def push(self, item): self.items.append(item) # 出栈 def pop(self): return self.items.pop…
栈和队列 一.栈 Stack 和队列 Queue 我们日常生活中,都需要将物品排列,或者安排事情的先后顺序.更通俗地讲,我们买东西时,人太多的情况下,我们要排队,排队也有先后顺序,有些人早了点来,排完队就离开了,有些人晚一点,才刚刚进去人群排队. 数据是有顺序的,从数据1到数据2,再到数据3,和日常生活一样,我们需要放数据,也需要排列数据. 在计算机的世界里,会经常听见两种结构,栈(stack)和队列 (queue).它们是一种收集数据的有序集合(Collection),只不过删除和访问数据的顺…
学习数据结构与算法走向深蓝之路 第一章:数据结构与算法概念型 数据结构:数据之间的相互关系,即是数据的组织形式. 基本组成:{ 数据:信息的载体 数据元素:数据基本单位: } 其结构形式有四种: 1,集合结构  2,线性结构.   3,树形结构  4,图形结构 在计算机中的存储有量中形式: 顺序存储(数组形式)和非顺序存储(链式存储结构) 1.1抽象数据类型:指的是数据模型或者定义在数据模型上的一组操作 (D,R,P){ D是数据对象, R是D上的关系集 P是对D进行的操作} ListInser…
今天这篇博客就聊聊几种常见的查找算法,当然本篇博客只是涉及了部分查找算法,接下来的几篇博客中都将会介绍关于查找的相关内容.本篇博客主要介绍查找表的顺序查找.折半查找.插值查找以及Fibonacci查找.本篇博客会给出相应查找算法的示意图以及相关代码,并且给出相应的测试用例.当然本篇博客依然会使用面向对象语言Swift来实现相应的Demo,并且会在github上进行相关Demo的分享. 查找在生活中是比较常见的,本篇博客所涉及的这几种查找都是基于线性结构的查找.也就是说我们的查找表是一个线性表,我…
http://www.cnblogs.com/yangecnu/p/Introduce-Binary-Search-Tree.html 前文介绍了符号表的两种实现,无序链表和有序数组,无序链表在插入的时候具有较高的灵活性,而有序数组在查找时具有较高的效率,本文介绍的二叉查找树(Binary Search Tree,BST)这一数据结构综合了以上两种数据结构的优点. 二叉查找树具有很高的灵活性,对其优化可以生成平衡二叉树,红黑树等高效的查找和插入数据结构,后文会一一介绍. 一 定义 二叉查找树(B…