算法
文章平均质量分 55
gausser
不要忘了学习
展开
-
学习《算法导论》第一章 插入排序 总结
学习《算法导论》第一章 插入排序 总结1. 算法入门 1.1 算法简介 1.2 算法分析 1.2.1 最坏情况分析2. 插入排序 2.1 插入排序的思想 2.2 插入排序算法 2.3 插入排序时间复杂度分析 2.4 插入排序代码实现原创 2015-08-29 20:27:57 · 648 阅读 · 0 评论 -
带头结点的单链表的操作 学习总结
带头结点的单链表的操作 学习总结首先给出单链表的存储结构定义如下:struct LNode{ Elemtype date; LNode* next;};typedef LNode* LinkList;下面是带头结点的单链表的基本操作:初始化// 构造一个空线性表Lvoid InitList(LinkList& L){ // 产生头结点,并使L指向该头结点 L原创 2015-09-15 21:04:27 · 612 阅读 · 0 评论 -
关于单链表的几道题
关于单链表的几道题删除单链表中的重复元素思路:建立三个工作指针p, q, r,然后p遍历整个链表,p每到一个结点,q就从这个结点往后遍历,并与p的数值比较,相同的话就free掉那个结点. 代码:// 删除单链表中重复结点的算法LinkList RemoveDupNode(LinkList L){ LinkList p, q, r; p = L->next; // p 遍历原创 2015-09-17 21:57:29 · 390 阅读 · 0 评论 -
学习 栈 总结
学习 栈 总结栈只限定在表尾进行插入和删除操作的线性表. 栈的插入操作,叫做入栈. 栈的删除操作叫做出栈. 大致如下图所示:栈的抽象数据类型Data 同线性表,元素具有相同的类型,相邻元素有前驱和后继关系.Operation InitStack(*S); DestroyStack(*S); ClearStack(*S); StackEmpty(*S);原创 2015-09-16 22:06:59 · 935 阅读 · 0 评论 -
学习队列 总结
学习队列 总结一队列是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。 结构如下图所示:队列的抽象数据类型定义如下:ADT 队列(Queue)Data 同线性表,元素有相同的类型,相邻元素有前驱和后继Operation InitQueue(*Q); DestroyQueue(*Q); ClearQueue(*Q); QueueEmpty(*Q);原创 2015-09-16 21:20:11 · 614 阅读 · 0 评论 -
学习《算法导论》 二叉查找树 总结
学习《算法导论》 二叉查找树 总结二叉查找树二叉查找树可以用链表结构来表示, 其中每个结点除了包括卫星数据外,还包括域left, right, parent; 它们分别指向结点的左儿子,右儿子和父结点. 二叉查找树的链表结构定义如下:typedef int ElemType;// 二叉树的链表结构typdef struct TreeNode{ ElemType data; st原创 2015-09-17 23:40:17 · 406 阅读 · 0 评论 -
学习 《算法导论》第13章 红黑树 总结二
学习 《算法导论》第13章 红黑树 总结二在学习 《算法导论》第13章 红黑树 总结一中学习了红黑树的五个性质,红黑树的结构定义以及旋转。这节学习红黑树的插入和删除操作。红黑树的插入在一棵n个结点的红黑树中插入一个新结点的操作可以在O(lgn)时间内完成。红黑树的插入分为两步:第一步:把红黑树当成是一棵普通的二叉查找树,把新结点插入这棵二叉查找树;第二步:为保证红黑树的性质,将插入的新结点着色.第一原创 2015-09-20 21:26:52 · 1521 阅读 · 0 评论 -
学习 《算法导论》第13章 红黑树 总结三
学习 《算法导论》第13章 红黑树 总结三今天把这编博客写完吧,这里学习红黑树的删除操作,前面学习了 红黑树的定义及旋转 红黑树的插入操作红黑树的删除操作也要结合二叉查找树的删除操作来学习。在一棵n个结点的红黑树中删除一个结点也是一样的,要花O(lgn)的时间,删除操作比插入还要复杂!!!!删除也分为两步:第一步,当成二叉查找树处理,删除一个结点;第二步,修复红黑树的性质;第一步:删除结点第一步原创 2015-09-20 21:50:50 · 473 阅读 · 0 评论 -
学习 《算法导论》第13章 红黑树 总结一
学习 《算法导论》第13章 红黑树 总结一前面学习了二叉查找树,我们知道一棵高度为h的二叉查找树实现的任何一种动态集合操作,其时间都是O(h); 但若二叉查找树退化为n个结点的线性链后,则最坏情况运行时间为O(n); 下面说的红黑树能保证在最坏情况下,任何一种动态集合操作的运行时间为O(h);红黑树介绍红黑树是一种二叉查找树,但在每个结点上增加了一个存储位表示结点的颜色,可以是RED或BLACK;通原创 2015-09-20 19:10:55 · 1706 阅读 · 0 评论 -
学习 单链表 总结二
学习 单链表 总结二—-单链表的头结点、头指针及单链表的初始化和遍历等头结点与头指针头结点即第一个结点,头指针是指向第一个结点的指针. 在单链表中,可以没有头结点,但是不能没有头指针. 下面是头结点与头指针的关系:// 定义结点的结构体typedef struct Node{ int data; struct Node* next;}Node, *LinkList;那么若定义:原创 2015-09-14 23:40:55 · 548 阅读 · 0 评论 -
学习 链表 总结一
学习 链表 总结一链表 (Linked List)是一种常见的基础数据结构,它的特点是用一组任意的存储单元存储线性表的数据元素,它在每个结点存储到下一个结点的指针。 使用链表结构可以克服数组链表需要预先知道数据大小的缺点,链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理。但是链表失去了数组随机读取的优点,同时链表由于增加了结点的指针域,空间开销较大。 链表有很多中不同的类型:单向链表,原创 2015-09-10 22:55:50 · 508 阅读 · 0 评论 -
学习《算法导论》第七章 快速排序 总结
学习《算法导论》第七章 快速排序 总结快速排序概论快速排序通常是用于排序的最佳选择, 这是因为它的平均性能非常好, 期望的运行时间为O(nlg n),且常数因子很小. 另外, 它还能够进行就地排序. 它的最坏运行时间为O(n^2).快速排序的思想快速排序和合并排序一样, 也采用了分治的思想. 分治, 之前学过, 有三个步骤:分解, 解决, 合并. 下面对A[p...r]讲述快速排序的思想:分解:A原创 2015-08-30 14:04:29 · 457 阅读 · 0 评论 -
学习《算法导论》第二章 合并排序 总结
在上一节,学习了插入排序,插入排序使用的算法设计是增量方法. 而这一节我们学习另一种算法设计方法:分治法. 分治算法有一个优点:那就是很容易确定其运行时间. 分治法分治策略:将原问题划分成n个规模较小而结构与原问题相似的子问题;递归地解决这些子问题,然后再合并其结果,就得到原问题的解.原创 2015-08-29 21:59:41 · 584 阅读 · 0 评论 -
学习《算法导论》第六章 堆排序 总结二
在《堆排序_学习总结一》中学习了堆的概念, 最大堆的性质, 以及如何保持最大堆性质、如何建立堆这两个的算法. 最后就是基于这两个算法学习了堆排序的算法. 接下来继续学习几个关于堆的算法. 堆作为一种数据结构, 也有一些基本操作:求堆中的最大值、在堆中插入关键字key、删除堆中的最大值、将堆中某个关键字增加到新的key等.下面分别学习这些算法. 以及由这些算法原创 2015-08-30 13:59:08 · 412 阅读 · 0 评论 -
学习《算法导论》第六章 堆排序 总结
学习《算法导论》第六章 堆排序 总结完全二叉树的概述一颗完全二叉树:树的每一层都是填满的,最后一层可能除外(最后一层是从一个结点的左子树开始填的).树的结点表示对于完全二叉树,给定一个结点的下标i,其父结点PARENT(i),左儿子LEFT(i),右二子RIGHT(i)的下标可通过下面简单计算出来:PARENT(i) return i / 2;LEFT(i) return 2 *原创 2015-08-29 22:38:33 · 411 阅读 · 0 评论 -
学习《算法导论》第八章 计数排序 总结
学习《算法导论》第八章 计数排序 总结前面学习的排序算法都是基于比较的. 下面学习的计数排序不是基于比较的,代码中并没出现元素之前的比较. 当我们不采用基于比较排序的模型时,排序算法的下界Ω(nlgn)在这里就不适用了. 但计数排序作了某种假设,即假设输入的元素是由一个小范围内的整数构成的.计数排序概论计数排序有个前提就是假设n个输入元素中的每个元素都是介于0到k之间的整数. 计数排序的运行时间是Θ原创 2015-08-30 14:10:36 · 414 阅读 · 0 评论 -
学习《算法导论》第十一章 散列表 总结一
学习《算法导论》第十一章 散列表 总结一在很多应用中,都要用到一种动态集合结构,它仅支持INSERT, SEARCH和DELETE字典操作。而实现字典的一种有效数据结构就是散列表. 在最坏情况下,在散列表中,查找一个元素的时间与在链表中查找一个元素的时间相同,在最坏情况下都是Θ(n),但在实践中,散列技术的效率是很高的. 散列表是普通数组概念的推广. 但是对于数组来说,可以进行直接寻址,所以可以原创 2015-09-07 23:37:14 · 579 阅读 · 0 评论 -
学习《算法导论》第十一章 散列表 总结二
学习《算法导论》第十一章 散列表 总结二本节学习散列表的两种实现方法:链接法和开放寻址法的代码实现.链接法hashsep.h#ifndef _HashSep_Htypedef int ElementType;typedef unsigned int Index;struct ListNode;typedef struct ListNode* Position;struct HashTbl;typ原创 2015-09-08 23:30:05 · 626 阅读 · 0 评论 -
学习 线性表的顺序存储 总结一
学习 线性表的顺序存储 总结一线性表是最简单的一种数据结构了,也是最常用的一种。线性表的逻辑结构简单,便于实现和操作。线性表有以下两个特点: 1. 它首先是个序列,元素之前是有顺序的。数据元素之间的关系是一对一的,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的。线性表的元素个数n定义为线性表的长度。线性表的顺序存储定义线性表的顺序存储:用一段地址连续的存储单元依次存储线性表的数原创 2015-09-10 22:21:01 · 877 阅读 · 0 评论 -
Leetcode----205Isomorphic Strings
Leetcode—–Isomorphic Strings链接:https://leetcode.com/problems/isomorphic-strings/题目: Given two strings s and t, determine if they are isomorphic. Two strings are isomorphic if the characters in s can原创 2015-10-24 20:26:58 · 425 阅读 · 0 评论