
数据结构与算法
Barry__
勿在浮沙筑高台
展开
-
数据结构
概念解释 数据结构---相互之间存在一种或多种特定关系的数据元素的集合。 集合---结构中的数据元素之间除了“同属于一个集合”的关系外,别无其他联系。 线性结构---结构中的数据元素之间存在一个对一个的关系。 树形结构---结构中的数据元素之间存在一个对多个的关系。 图状结构---结构中的数据元素之间存在多个对多个的关系。 树形结构 链表 数据域存储数据元素信息,指针域指向原创 2016-02-18 22:13:59 · 494 阅读 · 0 评论 -
数据结构---树形结构
概念解释 树形结构---有n(n>=0)个结点的有限集,且满足如下条件: 1. 在非空树中有且仅有一个特定的称为根的结点 2. 当n>1时,其余结点可为m(m>0)个互不相交的有限集,每个集合本身是一棵树,称为根的子树 3. 树的结点包含一个数据元素及若干指向其子树的分支 结点拥有的子树数量称为结点的度。度为0的结点称为叶子(终端结点)。度不为0的结点称为分支结点(非终端结点)原创 2016-02-19 11:00:07 · 685 阅读 · 0 评论 -
二分法查找
二分法查找---对有序元素集合的查找,又叫折半查找。 思路:(假设升序)将查找元素与集合中间元素比较,相等则返回;若查找元素小于集合中间元素,则在集合左半部分进行二分查找; 若查找元素大于集合中间元素,则在集合右半部分进行二分查找;(首先判断要查找的范围正确性,如果查找开始位置大于结束位置则返回未找到) // sf.cpp : 定义控制台应用程序的入口点。 // #includ原创 2016-02-19 11:51:40 · 361 阅读 · 0 评论 -
冒泡排序
冒泡排序---总是比较相临元素,每一轮都把最大的“冒”到最后。 思路: 1. 从左到右比较相临元素的值,如果左边的比右边的大,就交换它们 2. 对每一对相临元素做相同操作,从开始一对到最后一对,这样最后的元素是本轮操作中最大的 3. 针对前n-i个元素重复以上步骤(i=1,2,3```),直到不再发生交换(设置change标志位)。 冒泡排序代码 // sf.cpp : 定义控原创 2016-02-19 13:27:29 · 334 阅读 · 0 评论 -
插入排序
插入排序---类似于打牌时摸牌的排序,摸出一张,找到合适位置插入,牌摸完了,顺序排好了 思路: 1. 从第2个元素开始,从右向左比较,如果待插入的元素n,小于当前元素a,则a后移,如果n不小于a,或者向左比较到最左边了,就将n插入到此时的空位 2. 第2个插完再插第三个,第四个···最后一个,插完最后一个,序就排好了 在整个排序过程中,待插入元素左边是排好序的,右边是未排序的 插原创 2016-02-19 17:05:32 · 312 阅读 · 0 评论 -
选择排序
选择排序---每次从未排序部分选择一个最大(或最小)的元素,放到排序部分。 思路: 首先:int t = n;//n为数组最大下标 1. 从右向左,前n-1个与第t个比较,如果大于第t个,就更新t的值,最后交换第t个与第n个元素(最大值(或最小值)放在了n位置) 2. t = n - 1; 从右向左前n-2个元素与第t个元素比较,如果大于第t个元素的值,就更新t的值,最后交换t与n-2的原创 2016-02-24 10:51:40 · 334 阅读 · 0 评论 -
快速排序
快速排序---通过一趟排序将元素集合分成独立的两部分,其中一部分小于分界值,一部分大于分界值;再对每一部分一趟排序, 直到该部分元素个数小于2。 思路: 1. 确认分界值(尽量找均匀的分界值) 2. 分为左右两组(左小右大)(分组的方法有很多,两头设指针向中间找,都找到交换) 3. 分界值与左组中最右边的元素交换(确保是与左组中最右边的交换,考虑好分界值是最大值的情况) 4. 对分界值原创 2016-02-24 16:49:27 · 402 阅读 · 0 评论