c/c++常用算法
热血枫叶
开朗、活泼
展开
-
c/c++常用算法(1) -- 数据结构(线性表的顺序存储)
一、线性表描述 线性结构是最常用、最简单的一种数据结构。而线性表是一种典型的线性结构。其基本特点是线性表中的数据元素是有序且是有限的。在这种结构中:①存在一个唯一的被称为“第一个”的数据元素;②存在一个唯一的被称为“最后一个”的数据元素;③除第一个元素外,每个元素均有唯一一个直接前驱;④除最后一个元素外,每个元素均有唯一一个直接后继。二、线性表原创 2013-12-19 11:54:11 · 3402 阅读 · 2 评论 -
c/c++常用算法(9) -- 基本排序算法(交换排序)
交换排序概念 交换排序的基本思想是:两两比较待排序记录的关键字,发现两个记录的次序相反时即进行交换,直到没有反序的记录为止。应用交换排序基本思想的主要排序方法有:冒泡排序和快速排序。1.冒泡1.1 排序思想 依次比较相邻的两个记录的关键字,若两个记录是反序的(即前一个记录的关键字大于后前一个记录的关键字),则进行交换原创 2013-12-21 14:51:52 · 1757 阅读 · 0 评论 -
c/c++常用算法(10) -- 基本排序算法(选择排序)
选择排序 选择排序(SelectionSort)的基本思想是:每次从当前待排序的记录中选取关键字最小的记录表,然后与待排序的记录序列中的第一个记录进行交换,直到整个记录序列有序为止。1.简单选择排序 简单选择排序(Simple Selection Sort,又称为直接选择排序)的基本操作是:通过n-i次关键字间的比较,从n-i+1个记录中选取关键原创 2013-12-23 18:18:16 · 1955 阅读 · 0 评论 -
c/c++常用算法(14) -- 经典数据结构(约瑟环夫问题)
一、简单的约瑟环夫1.故事描述: 据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Jose原创 2014-01-07 17:17:00 · 3915 阅读 · 0 评论 -
c/c++常用算法(13) -- 基本查找算法
查找的概念 查找表(SearchTable):相同类型的数据元素(对象)组成的集合,每个元素通常由若干数据项构成。 关键字(Key,码):数据元素中某个(或几个)数据项的值,它可以标识一个数据元素。若关键字能唯一标识一个数据元素,则关键字称为主关键字;将能标识若干个数据元素的关键字称为次关键字。 查找/检索(Searchin原创 2014-01-06 11:47:05 · 3930 阅读 · 0 评论 -
c/c++常用算法(8) -- 基本排序算法
排序(sort)或分类 所谓排序,就是要整理文件中的记录,使之按关键字递增(或递减)次序排列起来。其确切定义如下: 输入:n个记录R1,R2,…,Rn,其相应的关键字分别为K1,K2,…,Kn。 输出:Ril,Ri2,…,Rin,使得Ki1≤Ki2≤…≤Kin。(或Ki1≥Ki2≥…≥Kin)。1.被排序对象--文件 被排序的对象--文件由一组原创 2013-12-21 11:36:56 · 1769 阅读 · 0 评论 -
c/c++常用算法(11) -- 基本排序算法(插入排序)
插入排序 采用的是以“玩桥牌者”的方法为基础的。即在考察记录Ri之前,设以前的所有记录R1, R2,…., Ri-1已排好序,然后将Ri插入到已排好序的诸记录的适当位置。 最基本的插入排序是直接插入排序(Straight Insertion Sort)。1.直接插入排序1.1 排序思想 将待排序的记原创 2014-01-04 14:20:55 · 1703 阅读 · 0 评论 -
c/c++常用算法(7) -- 基本算法思想
概述 在实际应用中,不同问题的解题思想也往往不同。如果找不到一个合适的思路,那么求解过程可能就变得复杂,甚至无法求解得到结果。选择合理的思想,可以帮助用户理清问题的头绪,更快地解决问题。算法就是起到了这个作用。常见的算法穷举算法思想递推算法思想递归算法思想分治算法思想概率算法思想还有贫心算法思想、回溯思想、动态规则思想(本篇就不做介绍了)。1.原创 2013-12-20 09:53:47 · 2986 阅读 · 0 评论 -
c/c++常用算法(6) -- 数据结构(图)
一、概念1.图、树、线性结构区别: 图(Graph)是一种比线性表和树更为复杂的数据结构。 图结构:是研究数据元素之间的多对多的关系。在这种结构中,任意两个元素之间可能存在关系。即结点之间的关系可以是任意的,图中任意元素之间都可能相关。 树结构:是研究数据元素之间的一对多的关系。在这种结构中,每个元素对下(层)可以有0个或多个元素相联系,对上(原创 2013-12-19 16:21:47 · 4597 阅读 · 0 评论 -
c/c++常用算法(12) -- 基本排序算法(归并排序)
归并排序归并(Merging) :是指将两个或两个以上的有序序列合并成一个有序序列。若采用线性表(无论是那种存储结构)易于实现,其时间复杂度为O(m+n)。 归并思想实例:两堆扑克牌,都已从小到大排好序,要将两堆合并为一堆且要求从小到大排序。 ◆ 将两堆最上面的抽出(设为C1,C2)比较大小,将小者置于一边作为新的一堆(不妨设C1原创 2014-01-04 14:35:46 · 1622 阅读 · 0 评论 -
c/c++常用算法(7) -- 基本算法思想(续)
4.分治算法思想4.1 思想 有时候我们处理一个复杂的问题,可能此问题求解步骤非常杂,也可能是数据非常多,导致我们当时很难求出或者无法求出,古语有云:步步为营,各个击破,这个思想在算法中称为分治思想,就是我们可以将该问题分解成若干个子问题,然后我们逐一解决子问题,最后将子问题的答案组合成整个问题的答案。 4.2 条件 当然各个思想都有它的原创 2013-12-20 10:27:09 · 1999 阅读 · 2 评论 -
c/c++常用算法(2) -- 数据结构(线性表的链式存储)
一、线性表的链式存储结构 链式存储:用一组任意的存储单元存储线性表中的数据元素。用这种方法存储的线性表简称线性链表。 存储链表中结点的一组任意的存储单元可以是连续的,也可以是不连续的,甚至是零散分布在内存中的任意位置上的。 链表中结点的逻辑顺序和物理顺序不一定相同。为了正确表示结点间的逻辑关系,在存储每个结点值的同时,还必须存储指示其直接后继结点的地址(或位置),称原创 2013-12-19 14:44:17 · 2027 阅读 · 0 评论 -
c/c++常用算法(5) -- 数据结构(树)
一、树的定义和基本术语1.树的定义 树(Tree)是n(n≧0)个结点的有限集合T,若n=0时称为空树,否则: ⑴ 有且只有一个特殊的称为树的根(Root)结点; ⑵ 若n>1时,其余的结点被分为m(m>0)个互不相交的子集T1, T2, T3…Tm,其中每个子集本身又是一棵树,称其为根的子树(Subtree)。原创 2013-12-19 15:43:40 · 4744 阅读 · 0 评论 -
c/c++常用算法(4) -- 数据结构(队列)
一、概念 队列(Queue):也是运算受限的线性表。是一种先进先出(FirstIn FirstOut ,简称FIFO)的线性表。只允许在表的一端进行插入,而在另一端进行删除。 队首(front):允许进行删除的一端称为队首。 队尾(rear):允许进行插入的一端称为队尾。 例如:排队购物。操作系统中的作业排队。先进入队列的成员总是先离开队原创 2013-12-19 15:17:43 · 1784 阅读 · 0 评论 -
c/c++常用算法(3) -- 数据结构(栈)
一、概念: 栈(Stack):是限制在表的一端进行插入和删除操作的线性表。又称为后进先出(LIFO(Last In First Out)或先进后出(FILO(First In Last Out)线性表。 栈顶(Top):允许进行插入、删除操作的一端,又称为表尾。用栈顶指针(top)来指示栈顶元素。 栈底(Bottom):是固定端,又称为表头。原创 2013-12-19 15:07:47 · 1744 阅读 · 0 评论 -
c/c++常用算法(15) -- 经典数据结构(城市之间的最短距离问题)
一、最短总距离算法:1.描述我们先来分析一下这个问题。某个地区n个城市构成一个交通图,我们可以使用图结构来描述这个问题,其对应关系如下:每个城市代表一个图中的一个顶点。两个顶点之间的边就是两个城市之间的路径,边的权值代表了城市间的距离。这样,求解各个城市之间的最短总距离问题就归结为该图的最小生成树问题。2.最小生成树一个有 n 个原创 2014-01-08 17:29:10 · 16686 阅读 · 1 评论