摘要:
在C#的网络编程中,进程和线程是必备的基础知识,同时也是一个重点,所以我们要好好的掌握一下。一:概念 首先我们要知道什么是”进程”,什么是“线程”,好,查一下baike。 进程:是一个具有一定独立功能的程序关于某个数据集合的一次活动。它是操作系统动态执行的基本单元, 在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。 线程:是"进程"中某个单一顺序的控制流。关于这两个概念,大家稍微有个印象就行了,防止以后被面试官问到。二:进程 framework里面对“进程”的基本操作的封装还是蛮好的,能够满足我们实际开发中的基本应用。<1> 获取进程信息 fra 阅读全文
摘要:
今天说说递归思想,在我们编码时,有的时候递归能够让我们的算法更加通俗易懂,并且代码量也是大大的减少。比如我先前的系列中说到了关于树的“先序,中序和后序”遍历,那么看看用递归来描叙这个问题是多少的简洁,多么的轻松。 1 #region 二叉树的先序遍历 2 /// <summary> 3 /// 二叉树的先序遍历 4 /// </summary> 5 /// <typeparam name="T"></typeparam> 6 /// <param name="tree"></param&g 阅读全文
摘要:
像俺一样奋斗在一线的码农们,一谈到学编程,都是说要学会XX语言就OK了,其实我们理解的有一点点的偏差,因为我们只说到了三分之一,其实真正的编程应该是:编程=数据结构+算法+XX语言。 对的,XX语言只是一个工具而已,就好比我们知道用笔来写字,但是不见得我们就能写出一手让张恨水为之倾倒的好字,其实我也说过算法不仅仅用于程序设计中,在我们的生活中也处处存在着算法,比如记得我大二学C#的时候,无聊的我们就出了个猜美女芳龄的问题。 1 static void Main(string[] args) 2 { 3 Random random = new Ra... 阅读全文
摘要:
今天是大结局,说下“图”的最后一点东西,“最小生成树“和”最短路径“。一: 最小生成树1. 概念 首先看如下图,不知道大家能总结点什么。 对于一个连通图G,如果其全部顶点和一部分边构成一个子图G1,当G1满足: ① 刚好将图中所有顶点连通。②顶点不存在回路。则称G1就是G的“生成树”。 其实一句话总结就是:生成树是将原图的全部顶点以最小的边连通的子图,这不,如下的连通图可以得到下面的两个生成树。 ② 对于一个带权的连通图,当生成的树不同,各边上的权值总和也不同,如果某个生成树的权值最小,则它就是“最小生成树”。 2. 场景 实际应用中“最小生成树”还是蛮有实际价值... 阅读全文
摘要:
今天来分享一下图,这是一种比较复杂的非线性数据结构,之所以复杂是因为他们的数据元素之间的关系是任意的,而不像树那样被几个性质定理框住了,元素之间的关系还是比较明显的,图的使用范围很广的,比如网络爬虫,求最短路径等等,不过大家也不要胆怯,越是复杂的东西越能体现我们码农的核心竞争力。 既然要学习图,得要遵守一下图的游戏规则。一: 概念 图是由“顶点”的集合和“边”的集合组成。记作:G=(V,E);<1> 无向图 就是“图”中的边没有方向,那么(V1,V2)这条边自然跟(V2,V1)是等价的,无向图的表示一般用”圆括号“。 <2> 有向图 “图“中的边有方向,自然<V. 阅读全文
摘要:
今天说下最后一种树,大家可否知道,文件压缩程序里面的核心结构,核心算法是什么?或许你知道,他就运用了赫夫曼树。听说赫夫曼胜过了他的导师,被认为”青出于蓝而胜于蓝“,这句话也是我比较欣赏的,嘻嘻。一 概念了解”赫夫曼树“之前,几个必须要知道的专业名词可要熟练记住啊。 1: 结点的权 “权”就相当于“重要度”,我们形象的用一个具体的数字来表示,然后通过数字的大小来决定谁重要,谁不重要。2: 路径 树中从“一个结点"到“另一个结点“之间的分支。 3: 路径长度 一个路径上的分支数量。4: 树的路径长度 从树的根节点到每个节点的路径长度之和。 5: 节点的带权路径路劲长度其实也就是该节点到根 阅读全文
摘要:
先前说了树的基本操作,我们采用的是二叉链表来保存树形结构,当然二叉有二叉的困扰之处,比如我想找到当前结点的“前驱”和“后继”,那么我们就必须要遍历一下树,然后才能定位到该“节点”的“前驱”和“后继”,每次定位都是O(n),这不是我们想看到的,那么有什么办法来解决呢? (1) 在节点域中增加二个指针域,分别保存“前驱”和“后继”,那么就是四叉链表了,哈哈,还是有点浪费空间啊。 (2) 看下面的这个二叉树,我们知道每个结点有2个指针域,4个节点就有8个指针域,其实真正保存节点的指针 仅有3个,还有5个是空闲的,那么为什么我们不用那些空闲的指针域呢,达到资源的合理充分的利用。一: 线索... 阅读全文
摘要:
最近项目赶的紧,歇了一个星期没写博客了,趁周末继续写这个系列。 先前我们讲的都是“线性结构”,他的特征就是“一个节点最多有一个”前驱“和一个”后继“。那么我们今天讲的树会是怎样的呢?我们可以对”线性结构“改造一下,变为”一个节点最多有一个"前驱“和”多个后继“。哈哈,这就是我们今天说的”树“。一: 树 我们思维中的”树“就是一种枝繁叶茂的形象,那么数据结构中的”树“该是怎么样呢?对的,他是一种现实中倒立的树。1:术语 其实树中有很多术语的,这个是我们学习树形结构必须掌握的。 <1> 父节点,子节点,兄弟节点 这个就比较简单了,B和C的父节点就是A,反过来说就是B和C... 阅读全文
摘要:
楼主做前端开发一年多了,对前端的见解还是多多少少有一点的,今天特拿出来跟大家分享分享。做前端开发少不了各种利器。比如我习惯用的还是Google浏览器和重型武器Fiddller。一: 原始情况首先大家看看如下的代码: 1 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="JsLoad.Default" %> 2 3 <!DOCTYPE html PUBLIC "-//W3 阅读全文
摘要:
今天跟大家聊聊栈,在程序设计中,栈的使用还是非常广泛的,比如有“括号匹配问题“,”html结构匹配问题“。所以说掌握了”栈“的使用,对我们学习算法还是很有帮助的。一: 概念 栈,同样是一种特殊的线性表,是一种Last In First Out(LIFO)的形式,现实中有很多这样的例子, 比如:食堂中的一叠盘子,我们只能从顶端一个一个的取。二:存储结构 ”栈“不像”队列“,需要两个指针来维护,栈只需要一个指针就够了,这得益于栈是一种一端受限的线性表。 这里同样用”顺序结构“来存储这个”栈“,top指针指向栈顶,所有的操作只能在top处。 代码段: 1 #region 栈的... 阅读全文
摘要:
可能大家都知道,线性表的变种非常非常多,比如今天讲的“队列”,灰常有意思啊。一:概念 队列是一个”先进先出“的线性表,牛X的名字就是“First in First Out(FIFO)”, 生活中有很多这样的场景,比如读书的时候去食堂打饭时的”排队“。当然我们拒绝插队。二:存储结构 前几天也说过,线性表有两种”存储结构“,① 顺序存储,②链式存储。当然“队列”也脱离 不了这两种服务,这里我就分享一下“顺序存储”。 顺序存储时,我们会维护一个叫做”head头指针“和”tail尾指针“,分别指向队列的开头和结尾。代码段如下: 1 #region 队列的数据结构 2 ... 阅读全文
摘要:
一:线性表的简单回顾 上一篇跟大家聊过“线性表"顺序存储,通过实验,大家也知道,如果我每次向顺序表的头部插入元素,都会引起痉挛,效率比较低下,第二点我们用顺序存储时,容易受到长度的限制,反之就会造成空间资源的浪费。二:链表 对于顺序表存在的若干问题,链表都给出了相应的解决方案。1. 概念:其实链表的“每个节点”都包含一个”数据域“和”指针域“。 ”数据域“中包含当前的数据。 ”指针域“中包含下一个节点的指针。 ”头指针”也就是head,指向头结点数据。 “末节点“作为单向链表,因为是最后一个节点,通常设置指针域为null。代码段如下: 1 ... 阅读全文
摘要:
人活在社会上不可能孤立,比如跟美女有着千丝万缕的关系,有的是一对一,有的是一对多,有的是多对多。哈哈,我们的数据也一样,存在这三种基本关系,用术语来说就是:<1> 线性关系。<2> 树形关系。<3> 网状关系。一: 线性表 1 概念: 线性表也就是关系户中最简单的一种关系,一对一。 如:学生学号的集合就是一个线性表。 2 特征: ① 有且只有一个“首元素“。 ② 有且只有一个“末元素”。 ③ 除“末元素”外,其余元素均有唯一的后继元素。 ④ 除“首元素”外,其余元素均有唯一的前驱元素。 3 ... 阅读全文
摘要:
大家是否感觉到,树在数据结构中大行其道,什么领域都要沾一沾,碰一碰。就拿我们前几天学过的排序就用到了堆和今天讲的”二叉排序树“,所以偏激的说,掌握的树你就是牛人了。今天就聊聊这个”五大经典查找“中的最后一个”二叉排序树“。1. 概念: <1> 其实很简单,若根节点有左子树,则左子树的所有节点都比根节点小。 若根节点有右子树,则右子树的所有节点都比根节点大。 <2> 如图就是一个”二叉排序树“,然后对照概念一比较比较。 2.实际操作: 我们都知道,对一个东西进行操作,无非就是增删查改,接下来我们就聊聊其中的基本操作。 <1> 插入:相信大家对“... 阅读全文
摘要:
大家可否知道,其实查找中有一种O(1)的查找,即所谓的秒杀。哈希查找: 对的,他就是哈希查找,说到哈希,大家肯定要提到哈希函数,呵呵,这东西已经在我们脑子里面形成固有思维了。大家一定要知道“哈希“中的对应关系。 比如说: ”5“是一个要保存的数,然后我丢给哈希函数,哈希函数给我返回一个”2",那么此时的”5“和“2”就建立一种对应关系,这种关系就是所谓的“哈希关系”,在实际应用中也就形成了”2“是key,”5“是value。 那么有的朋友就会问如何做哈希,首先做哈希必须要遵守两点原则: ①: key尽可能的分散,也就是我丢一个“6”和“5”给你,你都返回一个“2”,那么这样的... 阅读全文