自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

大芝士球的博客

怕什么真理无穷,进一寸有一寸的欢喜

  • 博客(30)
  • 收藏
  • 关注

原创 83. Remove Duplicates from Sorted List (删除重复结点)

Description:Given a sorted linked list, delete all duplicates such that each element appear only once.For example,Given 1->1->2, return 1->2.Given 1->1->2->3->3, return 1->2-&g...

2018-02-28 21:34:09 158

原创 21. Merge Two Sorted Lists (合并两个链表) Review

Description:Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.Example:Input: 1->2->4, 1->3->4Out...

2018-02-27 21:31:24 119

原创 237. Delete Node in a Linked List (删除结点)

Description:Write a function to delete a node (except the tail) in a singly linked list, given only access to that node.Supposed the linked list is 1 -> 2 -> 3 -> 4 and you are given the thir...

2018-02-27 21:09:51 144

原创 快慢指针找链表中点

今天在刷leetcode的题目 Palindrome Linked List的时候,想出来的解决算法的空间复杂度都在O(n),不符合题目的限制,在看了几个博客以后发现他们的解决方案都用到了一个方法查找链表的中点:                    快慢指针找链表中点法算法的思路是:定义一个快指针fast 一个慢指针slow ,快指针一次移动两个结点,慢指针一次移动一个结点当fast到达链表的尾...

2018-02-26 22:11:58 3556 1

原创 234. Palindrome Linked List (判断回文链表)

Description:Given a singly linked list, determine if it is a palindrome.Follow up:Could you do it in O(n) time and O(1) space?判断一个链表是否是回文链表注意条件......算法思考:1.先用一个数组存储正向的链表的每一个结点的值,再使用单链表的就地逆置 ,用另一个数组存储逆...

2018-02-26 21:59:31 128

原创 快速排序

快速排序由于其效率在同为O(n * log n)的几种排序方法中效率较高,故经常被使用,其思想为:分治法 该算法的基本思想是:1.先从数列中取出一个数作为枢轴数。2.分组过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。3.再对左右区间重复第二步,直到各区间只有一个数,达到整个序列的有序目的(PS:怎么和归并排序的算法思路这么像。。。) 代码所需...

2018-02-26 18:59:12 249

原创 单链表的就地逆置

单链表的就地逆置有多种方法,这里说说迭代与递归迭代其中使用了头插法void converse(Linklist *head){ Linklist *p1,*p2; p1=head->next; head->next=NULL; while(p1) { p2=p1; p1=p1->next; p2->next=head->ne...

2018-02-25 22:23:58 582

原创 206. Reverse Linked List (单链表的逆置)

Description:Reverse a singly linked list.click to show more hints.Hint:A linked list can be reversed either iteratively or recursively. Could you implement both? 使用迭代和递归的方法实现单链表的逆置我们追求不仅仅是实现单链表的逆置,而是就...

2018-02-25 21:56:31 282

转载 归并排序 (有迹可循)

归并:将两个或两个以上的有序表组合成一个新有序表。基本思路: 归并排序采用了分治策略(divide-and-conquer),就是将原问题分解为一些规模较小的相似子问题,然后递归解决这些子问题,最后合并其结果作为原问题的解。(也就是将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。) 先递归的把数组划分为两个子数组,一...

2018-02-25 15:54:52 202

原创 1. Two Sum (to be continue~~~~)

Description:Given an array of integers, return indices of the two numbers such that they add up to a specific target.You may assume that each input would have exactly one solution, and you may not use...

2018-02-24 19:04:21 133

原创 堆排序

简单的选择排序中没有把每一次比较的结果保存,在下一次的比较中有许多比较已经在前一次做过了,但由于没有保存,所以下一次的排序又重复执行了这些比较,因而记录的次数很多。堆排序正是在这个部分有所优化。堆的基本概念:是具有一些性质的完全二叉树-----每个结点的值都大于或等于其左右孩子结点的值,称大顶堆;小于等于的,称为小顶堆若按层序遍历的方式给结点1开始编号,则有:      Ki>=K2i   ...

2018-02-24 17:11:17 113

原创 直接插入排序

基本思路:将一个记录插入到已经排好序的有序表中,得到一个新的、长度加一的有序表使用的结构:#define MAX 10//排序所用的顺序表结构 typedef struct{ int a[MAX+1]; //存储排序数组,a[0]用作临时变量 int length; //记录顺序表的长度 }Sqlist;//交换 void swap(Sqlist *L,int i,...

2018-02-24 13:59:50 127

原创 简单选择排序

基本思路:通过n-i次的关键字比较,从n-i+1个记录中选出关键字最小的记录,并和第i(1<=i<=n)个记录交换算法所需结构:#define MAX 10//排序所用的顺序表结构 typedef struct{ int a[MAX+1]; //存储排序数组,a[0]用作临时变量 int length; //记录顺序表的长度 }Sqlist;//交换 v...

2018-02-23 20:55:42 350

原创 冒泡排序

基本思想:两两比较相邻记录的关键字,若顺序反了就进行交换,直到所有元素排序正确将要排序的一组数字进行遍历。第一次遍历,将相邻的两个数字进行比较,直到这组数字全部比较完成,如果前面比后面的数字大,则进行交换位置,此时可以将最大的数字筛选出来,放到最后的位置上。第二次遍历,将相邻的两个数字进行比较,直到这组数字全部比较完成,如果前面比后面的数字大,则进行交换位置,将这组数字里面第二大的数字...

2018-02-23 20:34:22 184

原创 求第n项斐波那契数列的递归函数的时间复杂度

函数代码:long Fib(int n) { if(n==0||n==1) return n; else return Fib(n-1)+Fib(n-2); }求第n项的时间复杂度。举例说明,当n=5时,计算调用了多少次Fib()函数,把n次运算调用函数的次数看成一个数列,求出其通项公式,即为时间复杂度可以得出Fib(0)被调用了3次,Fib(1)被调用了5次,共8次 。 2^3=...

2018-02-22 18:59:18 3648 3

原创 单链表的创建及基本操作

链表作为数据结构中最容易理解的结构,我们需要对它的基本操作非常熟悉结点结构:typedef struct Node{ int data; struct Node *next;}Node,*snode;基本操作:初始化://初始化 snode init(){ snode head=(snode)malloc(sizeof(Node)); if(!head) return NUL...

2018-02-17 17:47:22 462

原创 递增链表的创建

递增链表就是其中的元素呈递增排序方式:#include<stdio.h>#include<stdlib.h>typedef struct Node *SNode;struct Node{ int data; SNode next;};SNode createhead()//创建头结点 { SNode head; head=(SNode)malloc...

2018-02-16 14:23:43 1467

原创 队列的创建以及基本操作

队列(FIFO)是只允许在一段插入,另一端删除的线性表,遵循先进先出原则,队头删除,队尾插入。顺序队列使用用数组存储 初始条件 front =rear=0满队列:rear=m    容量m空队列:   front=rear 结构:typedef struct{ int data[MAX]; int front,rear;}Queue;操作:/初始化队列Queue InitQueue()...

2018-02-15 12:14:57 14691 2

原创 栈的创建和基本操作

栈(LIFO):限定仅在表尾进行插入和删除操作的线性表,简单来说就是最后一个进入最早出来顺序栈用数组实现,下标为0的一端作为栈底,另一端为栈顶,用top作为栈顶指针我们定义空栈时top=-1栈结构:typedef struct SqStack{ int data[MAX]; int top; }SqStack;基本操作://初始化栈 void Ini...

2018-02-14 16:54:54 14498 4

原创 KMP模式匹配算法求next数组

KMP模式匹配算法是串部分的一个重要算法,需要知道求next和nextval数组的方法next数组的求法next数组中规定下标1、2的字符的next数组值是0、1从下标为3的字符开始,判断P[i-1]=P[next[i-1]]是否成立即第i个字符的前一个字符是否和第next[i-1]字符是一样的,若是一样的———next[i]=next[i-1]+1若不一样————往前继续找,判断P[i-1]=P...

2018-02-14 11:15:56 9083 3

原创 树 赫夫曼树的定义及建立 、赫夫曼编码的定义

以下有叶子结点带权的二叉树:路径:从树中一个结点到另一个结点之间的分支构成两个结点之间的路径路径长度:路径上的分支数目树的路径长度:根结点到每一个结点的路径长度和在上图树的路径长度就为:1+1+2+2+3+3+4+4=20带权路径长度WPL:从该结点到根结点之间的路径长度与结点上权的乘积上图树的WPL:5*1+15*2+40*3+30*4+10*4=315带权路径长度最小的二叉树称为赫夫曼树,也叫...

2018-02-13 12:22:25 516

原创 树 二叉树的建立和基本操作

二叉树是应用非常广泛的结构,其基本实现如下:结点结构:也就是使用二叉链表实现typedef struct Node //树结点结构{ char data; struct Node *lchild; struct Node *rchild; }BitreeNode,*Bitree;//先序建立二叉树 Bitree create(){ Bitree T; char ch;...

2018-02-12 18:39:37 1014

转载 (图)关键路径算法 (含AOV AOE网比较)

拓扑排序的意义是解决工程的顺序进行问题,但有时我们也需要解决工程完成需要的最短时间问题。AOV网和AOE网:AOE(Activity On Edge)网:顶点表示事件,弧表示活动,弧上权值表示活动所需时间网中没有入边的顶点称为始点或源点,没有出边的顶点称为终点或汇点在AOE网中,只有一个顶点代表的事件发生后,从该顶点出发的各个弧所代表的活动才能开始,只有以弧头关联一个顶点的各个弧所代表的活动都已结...

2018-02-11 11:39:27 2687

原创 (图)有向无环图的应用:拓扑排序

AOV网(Activity On Vertex Network):在一个表示工程的有向图中,顶点表示活动,弧表示活动之间的优先关系设G={V,E}是一个具有n个顶点的有向图,V中的顶点序列V1,V2,......,Vn,满足若从顶点Vi到Vj有一条路径,则在顶点序列中顶点Vi必须在Vj之前。这样的顶点序列称为拓扑序列。在上图的AOV网中,拓扑序列有多条。序列V0 V1 V2 V3 V4 V5 V6...

2018-02-10 17:24:06 1888

转载 (图)最短路径之弗洛伊德算法

弗洛伊德Floyd算法:其本质是动态规划算法,也是经典的多源最短路径算法之所以称为经典便是因为该算法非常简短:该算法的时间复杂度:O(n的三次方)这个算法短的离谱,以致于我们通常直接将它背了下来当模板使用,而不像学dijkstra那时候一步步理解它是如何贪心的.那么,为什么floyd算法是这个样子的呢?或者说,为什么这样就能求出所有点到所有点的最短路径?它的递推公式是:D[v][w]=min{D[...

2018-02-10 16:02:14 685 1

原创 (图)最短路径的求法之迪杰斯特拉算法

对于网图而言,最短路径指两顶点之间经过的边上权值和最少的路径,并且路径上的第一个顶点是源点,最后一个顶点是 终点。迪杰斯特拉dijkstra算法: 其本质是一种贪婪算法也是最经典的单源最短路径算法假设源点是V1,终点是V8,求其最短路径。我们先求V1到V2 V4 V3哪条路径最短,答案是到V2最短。由于V2与V4 V5连线,V2->V5=7  V2->V4=1  故选择V4于是再求V1...

2018-02-09 21:55:11 495

原创 (图)最小生成树算法之普里姆算法

图的基本概念里有提到,一个连通图的生成树是一个极小的连通子图,它含有图中的全部顶点,但只有构成一棵树的n-1条边。最小生成树:构造连通图的最小代价生成树即在上图(网结构)中找到权值之和最小的生成树的路径。实现最小生成树有两种算法:普里姆(Prim)算法构造邻接矩阵实现void MiniTree(MGraph G){ int min,i,j,k; int adjvex[MAX]; ...

2018-02-09 17:28:35 445

原创 图的广度优先遍历BFS(邻接矩阵实现)c语言

 广度优先遍历也叫广度优先搜索(Breadth First Search)。它的遍历规则:先访问完当前顶点的所有邻接点。 先访问的顶点的邻接点先于后访问顶点的邻接点被访问。 算法思想: 使用队列的数据结构(FIFO (First In First Out)),将一个顶点加入队列,然后在队列中删除顶点,并且将该顶点相连的所有顶点依次加入队列中,再循环处理这些顶点,直至所有...

2018-02-08 21:38:05 20636 5

原创 图的深度/广度优先遍历DFS和BFS(邻接表实现)c语言

目录定义邻接表存储图深度优先遍历广度优先遍历:BFS部分完整代码定义要实现该算法首先要知道邻接表的概念。邻接表是一种常用的图的存储结构,它的结构特点是:顶点由一个一维数组存储;邻接点用链表存储相比于单纯用数组实现的邻接矩阵,邻接表可以避免空间浪费其图解如下:firstedge指向边表第一个结点。边表的adjvex的值代表与V0顶...

2018-02-08 19:48:51 30613 13

原创 图的深度优先遍历DFS (邻接矩阵实现) c语言

图的遍历是指从图中的某一顶点出发,按照一定的策略访问图中的每一个顶点。每个顶点有且只能被访问一次。深度优先遍历也叫深度优先搜索(Depth First Search)。它的遍历规则:先选择一个初始顶点,再规定一个方向,例如往右边一直遍历。于是就往右边一直走,把访问过的顶点做好标记,沿着右边访问完后,回溯到之前访问过的顶点,找找还有没有顶点没有访问的,当所有顶点被访问,完成遍历。DFS是...

2018-02-08 16:30:42 20780 17

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除