数据结构
xiaopihaierletian
这个作者很懒,什么都没留下…
展开
-
大话数据结构十:字符串的模式匹配(BF算法)
1. BF算法简介:BF(Brute Force)算法是普通的模式匹配算法,又称为朴素匹配算法或蛮力算法,该算法最大缺点就是字符匹配失败指针就要回溯,所以性能很低。2. BF算法思想:BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和 T的第二个字符;若不相等,则比较S的第二个字符和P的第一个字符,依次原创 2017-04-14 19:09:22 · 368 阅读 · 0 评论 -
大话数据结构四:线性表的链式存储结构(单向循环链表)
1. 单向循环链表:将单链表尾结点的指针端由空指针改为指向头结点,使整个单链表形成一个环,这种头尾相接的单链表称为单向循环链表。2. 单向循环链表和单链表实现的区别:1.)添加一个结点到单向循环链表末尾时,必须使其最后一个结点的指针指向表头结点,而不是象单链表那样置为null。2.)判断是否到达表尾时,单向循环链表可以判断该结点是否指向头结点,单链表只需要知道是原创 2017-04-14 18:48:38 · 315 阅读 · 0 评论 -
大话数据结构二:线性表的链式存储结构(单链表)
1. 线性表的链式存储结构:指的是用一组任意的存储单元存储线性表的数据元素,这组存储单元可以是连续的,也可以是不连续的,这就意味着这些数据元素可以存在内存未被占用的任意位置。2. 结点:结点由存放数据元素的数据域和存放后继结点地址的指针域组成。1.)顺序存储结构中,每个数据元素只需要存数据元素的信息就可以了。2.)链式存储结构中,除了要存储数据元素信息外,还要存原创 2017-04-14 18:18:13 · 319 阅读 · 0 评论 -
大话数据结构六:特殊的线性表(栈)
1. 什么是栈?栈(stack)是限定仅在表尾进行插入和删除操作的线性表。2. 栈的特点:1.) 栈又称为后进先出(Last In First out)的线性表,栈元素具有线性关系,即前驱后继关系。2.) 栈的特殊之处在于:它的栈底是固定的,只允许在栈顶进行插入和删除操作。3. 栈的顺序存储结构(Java数组实现):原创 2017-04-14 18:50:41 · 362 阅读 · 0 评论 -
大话数据结构三:线性表的链式存储结构(静态链表)
1. 静态链表:用数组描述的链表叫静态链表,通常为方便数据插入,我们会把数组建的大一些。2. 数组元素(node):由两个数据域组成(data,cursor)。数据域data用来存放数据元素,也就是通常我们要处理的数据;而cursor相当于单链表中的指针,存放该元素的后继在数组中的下标。3. Java实现静态链表:[java] vie原创 2017-04-14 18:36:50 · 287 阅读 · 0 评论 -
大话数据结构七:两栈共享存储空间(双向栈)
1. 为什么要使用双向栈?通过上一篇博客 - 特殊的线性表(栈),不难知道栈的顺序存储(数组实现)性能相对较好,因为它不存在插入和删除时移动元素的问题,但是它有一点缺陷:要事先确定数组存储容量的大小,万一不够,就需要扩充数组容量。这时双向栈就派上用场了,它可以最大限度的利用事先开辟的存储空间。2. 双向栈有什么特点?数组有两个端点,两个栈有两个栈底,让一原创 2017-04-14 18:54:26 · 697 阅读 · 0 评论 -
大话数据结构一:线性表的顺序存储结构
1. 线性表的顺序存储结构:指的是用一段地址连续的存储单元依次存储线性表的数据元素。2. Java实现线性表的顺序存储结构:[java] view plain copy // 顺序存储结构 public class SequenceList { private static final int DEFA原创 2017-04-14 18:15:49 · 338 阅读 · 0 评论 -
大话数据结构八:队列的顺序存储结构(循环队列)
1. 什么是队列?队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。2. 队列的特点:队列是一种先进先出(First In First out)的线性表,允许插入的一端称为队尾,允许删除的一端称为队头。3. 队列顺序存储有什么不足?使用数组实现的顺序存储,当做出队列操作时,所有的元素都需要向前移动一位,原创 2017-04-14 19:01:14 · 317 阅读 · 0 评论 -
大话数据结构十一:字符串的模式匹配(KMP算法)
1. KMP算法简介:kmp算法是一种改进的字符串匹配算法,相比朴素算法,KMP算法预先计算出了一个哈希表,用来指导在匹配过程中匹配失败后尝试下次匹配的起始位置,以此避免重复的读入和匹配过程。这个哈希表被称为"部分匹配值表"(Particial match table),这种设计是KMP算法最精妙之处。2. KMP算法分析:下面以阮一峰老师博客中的一篇文原创 2017-04-14 19:19:19 · 328 阅读 · 0 评论 -
大话数据结构五:线性表的链式存储结构(双向链表)
1. 双向链表:在单链表的每个结点中,再设置一个指向其前驱结点的指针域,那么在双向链表中的结点都有两个指针域,一个指向直接后继,另一个指向直接前驱。2. 单链表和双向链表比较:单链表:总是要从头到尾找结点,只能正遍历,不能反遍历。双向链表: 可以从头找到尾,也可以从尾找到头,即正反遍历都可以,可以有效提高算法的时间性能,但由于每个结点需要记录两份指针,所以在空间原创 2017-04-14 18:49:19 · 408 阅读 · 0 评论 -
[数据结构] 数组与链表的优缺点和区别
概述 数组 是将元素在内存中连续存放,由于每个元素占用内存相同,可以通过下标迅速访问数组中任何元素。但是如果要在数组中增加一个元素,需要移动大量元素,在内存中空出一个元素的空间,然后将要增加的元素放在其中。同样的道理,如果想删除一个元素,同样需要移动大量元素去填掉被移动的元素。如果应用需要快速访问数据,很少插入和删除元素,就应该用数组。 链表 中的元素在内存中不是顺序存储的,而原创 2017-07-19 22:59:54 · 506 阅读 · 0 评论 -
大话数据结构九:队列的链式存储结构(链队列)
1. 链队列的特点:链队列其实就是单链表,只不过它是先进先出的单链表,为了实现方便,程序中设置了队头(front),队尾(rear)两个指针。2. Java使用链表实现队列: [java] view plain copy //结点类,包含结点的数据和指向下一个节点的引用 public class Node {原创 2017-04-14 19:07:01 · 311 阅读 · 0 评论 -
《大话数据结构》第1章 数据结构绪论 1.2 你数据结构怎么学的?
1.2 你数据结构怎么学的? 早先我有一个学生叫蔡遥,绰号“小菜”。他前段时间一直通过E-mail与我交流,其中说起了他工作的一些经历,感慨万千。我在这里就讲讲小菜的故事。 他告诉我,在做我学生时,其实根本就没好好学数据结构,时常逃课,考试也是临时突击后勉强及格。毕业后,他几经求职,算是找到了一份程序员的工作。 工作中,有一次他们需要开发一个客原创 2017-04-11 08:09:33 · 387 阅读 · 0 评论 -
《大话数据结构》第1章 数据结构绪论 1.1 开场白
1.1 开场白 If you give someone a program, you will frustrate them for a day; if you teach them how to program, you will frustrate them for a lifetime. (如果你交给某人一个程序,你将折磨他一整天;如果你教某人如何编写程序,你将折磨他一辈子原创 2017-04-11 08:04:40 · 305 阅读 · 0 评论