数据结构之双向循环链表-指针实现 发表于 2018-05-30 | 分类于 数据结构 基础知识双向循环链表和单向链表一样是一种线性表数据结构,但和单向链表不同,双向循环链表需要增加两个指针域分别指向前驱节点和后继节点,同时首尾节点分别指向彼此。双向链表的实现和单向链表相比稍微有点复杂,但是双向循环链表具有前向和后向遍历能力并且可以从任意节点开始循环遍历所有的节点。双向循环链表的指针域 ... 阅读全文 »
欧几里得计算最大公因数数学原理及实现 发表于 2018-05-30 | 分类于 算法设计 最大公因数定义最大公因数又名最大公约数,是指两个整数(本文约定为正整数)共同的最大约数。在实际编程中按照维基百科的说法主要有穷举法、素因数分解法、短除法、辗转相除法(欧几里得算法)。本文主要尝试分析实现穷举法和辗转相除法。具体分析实现见下小节。 穷举法穷举法的思路非常简单,即在所有可能的解中遍历找出 ... 阅读全文 »
最大连续子序列和问题 发表于 2018-05-29 | 分类于 算法设计 问题描述给定整数序列$A_1,A_2,A_3…A_N$,求$\sum_{k=i}^jA_k$的最大值(约定如果所有整数均为负数则最大和为0)。最大子序列和问题既是根据给出的数列抽取某段连续子数列使其和为最大。《数据结构与算法分析:C语言描述》一书中给出了四种解法,以下分别分析实现。 穷举法穷举法的含 ... 阅读全文 »
选择问题-TopK问题:N个元素的数组找到最大K个数 发表于 2018-04-16 | 分类于 算法设计 问题描述选择问题或者说TopK问题是指给一堆无序的含有N个元素的数组,找出里面的最大的K个数(也可以是找出最小的K个数)。在本问题的基础上可以加上诸如元素数量较多,无法完整放入整个内存中,此时常规的先排序的思路是无效的。TopK问题的解决思路主要有如下几种,分别介绍如下。 常规排序思路当不存在内存限 ... 阅读全文 »
TCP-UDP基础以及区别 发表于 2018-04-15 | 分类于 计算机网络 TCP-UDP基础知识TCP全称传输控制协议(Transmission Control Protocol),是一种面向连接、可靠的、基于字节流的传输层通信协议。面向连接意味着TCP在进行数据交换时需要先建立一个TCP连接(三次握手);可靠意味着TCP协议需要保证数据可靠的传送到对方,TCP可靠性体现 ... 阅读全文 »
Linux下C++实现一个简单的线程池 发表于 2018-04-08 | 分类于 操作系统 线程池基本概念线程池是一种线程使用模式,其思想非常类似于内存池,均是从性能出发而开发出来的一种优化技巧。线程池主要用在需要频繁执行较短的任务的情况下,由于短时间内如果进行大量线程的创建与销毁带来的开销是不可接受,因此通常预先创建好一些工作线程,然后在需要使用时直接将任务分派给空闲线程即可,同时可以根 ... 阅读全文 »
磁盘调度策略介绍与实现 发表于 2018-04-06 | 分类于 操作系统 磁盘调度基础磁盘是一种大容量低成本的存储设备,其支持随机存取。机械硬盘的物理结构如下所示:图片来源 如图所示,磁盘由多个盘片和读写磁头臂组成。盘面被分为多个同心圆,称为磁道;每个磁道又被划分为多个独立的逻辑区域,被称为扇区,扇区容量一般是512byte,有些较大为4Kbyte。每个磁道上扇区的数量 ... 阅读全文 »
进程或线程死锁 发表于 2018-03-24 | 分类于 操作系统 死锁基本概念死锁是指在一组进程中,每个进程都无限等待该组进程中另一个进程所占有的资源而导致永远无法等到资源的现象,这一组进程被称为死锁进程。死锁一旦发生,将会极大浪费系统资源以及可能造成系统崩溃。 死锁原因从死锁的基本概念可以得知,死锁是发生在进程申请资源而得不到满足同时又互相僵持导致的,因此死锁原 ... 阅读全文 »
各大排序算法的分析与实现 发表于 2018-03-15 | 分类于 算法设计 排序算法汇总 插入排序:插入排序思想是通过逐遍扫描(N-1遍扫描,N为排序元素个数)的方式消除逆序对,对于位置P=1遍到P=N-1遍保证插入顺序位置0到位置P为已排序状态。 冒泡排序:通过重复遍历待排序的数列,每次比较一对元素,过程中不断消除逆序对,最终达到排序的目的,和插入排序对比,冒泡排序每次遍 ... 阅读全文 »
STL基础概述 发表于 2018-03-13 | 分类于 C++ STL基础知识STL全称标准模板库(Standard Template Library),是一套程序库,采用了模板编程技术。STL并不是C++标准库的一部分,其由六大组件组成 容器(containers):各种数据结构,有vector(动态数组),list(双向链表),dequeue(双端队列), ... 阅读全文 »