随笔分类 - 数据结构和算法
不会算法的程序员也许也是个不错的程序员。
    
摘要:树 不同于队列、栈等一对一的数据结构, 树是一对多的数据结构 。树(Tree)是n(n =0)各节点的有限集。当n=0,为空树。 在任意一颗非空树中: 1. 有且只有一个特定的结点称为:根(Root) 2. 当n 1时,其余结点可分为m(m 0)个互不相交的有限集T1、T2、...Tm。其中每一个树
        阅读全文
                
摘要:引言:关于字符串 字符串(string):是由0或多个字符组成的有限序列。一般写作`s = "123456..."`。s这里是主串,其中的一部分就是子串。 其实,对于字符串大小关系不如是否相同重要。包括密码验证、hash列等。 而字符串的存储结构有两种:顺序存储结构和链式存储结构。由于不同的字符是连
        阅读全文
                
摘要:[TOC] 递归和分治思想 如果可以使用迭代,尽量别使用递归。由编译原理可以知道,每次自调用的时候,计算机都需要保存在调用,浪费时间空间。当然,迭代是当我们知道循环次数的时候。而 当我们不知道循环次数,比如说对于文件夹和文件进行遍历,不知道深度的情况下,我们就需要递归来实现。 显然,递归是先解决小的
        阅读全文
                
摘要:队列 定义 :队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(head)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。 按照队列的定义,结合内存地址的理解,初始化队列的时候,准备 和`rear 
        阅读全文
                
摘要:[TOC] 一、两种表达式 中缀表达式:人使用的类似于(2+3\ 5),运算符号在数字中间的表达式 后缀表达式:不包含括号,运算符放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左向右进行(不再考虑运算符的优先规则。这是计算机的计算方式。 二、转化规则和思路 利用栈,可以实现中缀表达式转
        阅读全文
                
摘要:栈(stack)又名堆栈,是仅允许在表的一端进行插入和删除运算。 表尾一端被称为 栈顶 ,相对地,表头称为 栈底 。Push:向一个栈插入新元素又称作进栈、 入栈 或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素。Pop:从一个栈删除元素又称作 出栈 或退栈,它是把栈顶元素删除掉,使其相
        阅读全文
                
摘要:今天课上实验课,遇到一道题目,需要查找一个数组中出现次数最多的元素和次数,并且输出。第一次用struct模拟字典,十分麻烦而且复杂度是O(n\ n)。其实,运用转化的思想,可以先将其排序,然后再查找即可,时间复杂度之后只有O( n\ log_2(n))。 题目是这样的: 某小镇要票选镇长,得票最高者
        阅读全文
                
摘要:双向链表和双向循环链表 和单向链表相比,多了一个前驱结点。如果他为空,那么next和prior都指向自己。而对于双循环链表,只需要最后一个元素的next指向head next,head next的prior指向最后一个节点即可。 插入操作 新节点s插入链表,s next给p结点,s prior给p 
        阅读全文
                
摘要:判断单链表是否有环 假设有一个含环链表:1 2 3 4 5 6 3(6又连接到3,形成一个环) 1. 使用p、q两个指针,p总是向前走,但q每次都从头开始走,对于每个节点,看p走的步数是否和q一样。当p从6走到3时,用了6步;此时q从head出发,则只需两步就到3,因而步数不等,出现矛盾,存在环。而
        阅读全文
                
摘要:尾指针及其简单应用 循环链表如果拿到最后结点,若没有尾指针(rear),那么需要O(n)的时间。如果有的话,只需要O(1)的时间。 如果有两个链表,需要将他们连接,拥有尾指针只需要O(1)的时间复杂度。 此时,判断循环链表是否为空的方法:rear是否等于rear next。 一道题目:将两个线性表A
        阅读全文
                
摘要:自然语言处理中算法设计有两大部分:分而治之 和 转化 思想。一个是将大问题简化为小问题,另一个是将问题抽象化,向向已知转化。前者的例子:归并排序;后者的例子:判断相邻元素是否相同(与排序)。 这次总结的 自然语言中常用的一些基本算法 ,算是入个门了。 递归 使用递归速度上会受影响,但是便于理解算法深
        阅读全文
                
摘要:循环链表的实现 单链表只有向后结点,当单链表的尾链表不指向NULL,而是指向头结点时候,形成了一个环,成为单循环链表,简称循环链表。当它是空表,向后结点就只想了自己,这也是它与单链表的主要差异,判断node next是否等于head。 代码实现分为四部分: 1. 初始化 2. 插入 3. 删除 4.
        阅读全文
                
摘要:腾讯的一道面试题:如何快速找到位置长度单链表的中间节点?普通方法,就是先遍历,在从头找到2/length的中间节点。算法复杂度是:O(3 n/2)。而更快的方法就是利用 快慢指针 的原理。 快慢链表:利用标尺的思想,设置两个指针(一快一慢)\ serach和\ mid,刚开始都指向单链表的头结点。但
        阅读全文
                
摘要:早期语言没有c,更不用说java等一些高级语言。那么是怎么描述链表这种实现呢?这次以单链表的模拟为例,深究一下 静态链表 的实现。 静态链表结构 按照之前单链表的性质,我们需要 游标和数据 。当然,每个元素都有下标(类似数组) 游标的含义 静态链表中,首节点和尾结点都没有数据( 数据为空 ) 首节点
        阅读全文
                
摘要:先接一下上次的笔记,实现对单链表进行删除 思路实现 1. 声明结点p和q 2. 首节点赋值给p,下一个结点赋值给q 3. 循环执行释放p,将q赋值给p的操作(删除第一个结点后,之后的结点就是首节点了,以此类推) 问题 不可以代替循环体吗? 注意 释放了数据域和指针域,所以无法记录下一节点了。 应用 
        阅读全文
                
摘要:顺序表和单链表 真正意义上自己弄出来的,发篇博客记录一下 "顺序表" "单链表" 顺序表 类似于数组,元素都是相邻的,这也决定了它比较容易和比较适合查询。但缺点就是长度有限。 时间复杂度 查询操作 O(1) 插入和删除操作 O(n) 代码实现 c++ include include using na
        阅读全文
                
摘要:《算法图解》代码实现和改进 请随意观看表演 "二分查找" "数组和链表" "递归" "递归条件和基线条件" "快速排序" "散列表" "广度优先搜索" "狄克斯特拉算法" "贪婪算法" 二分查找 [1, 3, 5, 7, 9] None 2 数组和链表 选择排序 python def lookFor
        阅读全文
                
 
                    
                
 浙公网安备 33010602011771号
浙公网安备 33010602011771号