摘要:
由计算机来处理数学或现实中的问题,本质在于如何对问题进行数学建模,也就是怎样将问题中含有的要素与相应数据结构中的项形成对应关系,以及将对问题求解的过程转化为对数据的操作组合。 而在计算机中,对现实问题数学建模,常用的方法是递推或递归的分析思路。将一个大的问题分割成小的局部问题,通过获得最小问题的解、 阅读全文
摘要:
相比链表结构,使用动态树结构能够更有效的添加、删除和搜索数据。搜索树可用作字典或优先级队列,而二叉搜索树是最基本的搜索树。 二叉搜索树满足如下排序性质:若其执行中序遍历,则会得到一个按升序排列的键值序列。通过指针将节点连接成一棵树,各节点内包含键值以及指向父节点、左子节点、右子节点指针。 1、插入 阅读全文
摘要:
通过adduser user1命令创建普通用户,且使该用户具有sudo权限(将该新用户user1添加到sudo或root用户组中,或者修改/etc/sudoer文件),但是依然无法执行sudo指令,会报如下错误: sudo: /usr/lib/sudo/sudoers.so must be owne 阅读全文
摘要:
作为一名程序员,深刻的体会到结构化及面向对象思维的重要性。这种思考方式可以有效的帮助你学习生活中的方方面面,以及形成体系化的事物分析方法。对于结构化的编程思想主要还是用于流程化或操作型的事物,而针对英语学习,我觉得面向对象学习方法就很适合。 其实,对于学习语言,我们程序员应该是最擅长的。像C、C++ 阅读全文
摘要:
一种用于表达层级结构的数据结构,常用来表达文档、组织结构图、图形图像等。在此主要介绍树的表达方式以及相关基本算法。 1. 有根树 要求获得有根树中各节点的信息,如:节点编号、节点种类(根、内部节点、叶)、父节点编号、子节点编号、节点深度等。 采用“左子右兄弟表示法”来表示有根树(父节点、最左侧子节点 阅读全文
摘要:
1. 归并排序 基本思想:利用分治法,将局部数组分割成两个局部数组,再对两局部数组执行归并排序,最后通过归并方法将两个已排序的局部数组整合成一个数组。 伪代码如下: 2. 快速排序 基本思想:先可任意一个元素作为分割点,将数组中大于该分割点的元素放置在其右边,小于该分割点的元素置于其左边。然后再对分 阅读全文
摘要:
1. 线性搜索 简单线性查找伪代码: 含有标记的线性查找 2. 二分搜索 要求数据集合先进行排序。 伪代码: 3. 散列法 散列法可根据各元素的值来确定元素的存储位置,再将位置保管在散列表中,从而实现高速搜索。其由容纳m个元素的数组T, 以及根据数据关键字决定数组下标的函数共同组成。 简单实现: 散 阅读全文
摘要:
C++标准库以提供“模板”为主,即不必预先指定类型的函数或类。 STL提供了多种名为容器的类,用于管理数据集合。如stack、queue、vector、list等。 stack<int> S; queue<string> Q; queue<pair<string, int> > Qp; vector 阅读全文
摘要:
数据结构顾名思义就是一堆数据的组织方式,以方便后续的存取和操作,且好的算法离不开高效管理数据的方法。 数据结构的三要素: 1. 数据集合。通过数据对象的本体(如数组和结构体)保存数据 2. 操作。对数据集合的操作,如插入、存取、查找、以及修改等 3. 规则。保证数据集合按照一定规矩来操作、管理和存取 阅读全文
摘要:
1. 插入排序 思想: 其思路与打扑克时排列手牌的方法类似,即需要将牌一张张抽出来,分别插入到前面已排序好的手牌中的适当位置。 算法伪代码: 2. 冒泡排序 思想:让数组元素逐个地像水中气泡一样上浮。 伪代码1: 伪代码2: 3. 选择排序 思想:在每个计算步骤中选出一个最小值,进而完成排序。 伪代 阅读全文