- 博客(54)
- 资源 (1)
- 收藏
- 关注
原创 数据结构与算法C++描述(6)---稀疏矩阵
1. 稀疏矩阵的概念当我们利用一个矩阵来描述一个实际问题时,往往矩阵中存在许多“0”值,如下图所示。试想,当矩阵维数非常大时,利用一个二维数组来存储此矩阵会浪费很多额外的空间。由此,在参考文献[1]中,借助于链表来存储稀疏矩阵。 通过行节点链表和头节点链表存储一个稀疏矩阵。其中:在稀疏矩阵的每一行中,若该行存在不为0的元素,则为改行创建一个行节点链表。链表中每个节点有3个域:矩阵元素值(值域
2017-10-19 17:03:49
2398
原创 数据结构与算法C++描述(2)---数组
1、数组的定义数据对象的每个实例都是形如(index,value)的数据对集合,其中任意两对数据的index值都各不相同。当每个数据对的index为一个唯一确定的值时,该数据对象被称为一维数组;当每个数据对的index值为唯一确定的两个值时,该数据对象便为二维数组。。。。。。 C++本身是支持数组的,但无法保证数组下标的合法性。同时,C++也未能提供数组的输入、输出以及简单的算数运算(如数组赋值和
2017-10-18 12:05:45
664
原创 数据结构与算法C++描述(5)---模拟指针及模拟链表
1、相关概念1.1、模拟指针的定义模拟指针可以理解为:在一个模拟空间中,存在一个指针数组,数组中的每个元素为指针类型,并且每个指针具有数据域和链接域(指向下一个数组中的指针)。1.2、模拟指针描述单链表、间接寻址描述单链表及普通单链表之间的区别:普通单链表中,各个节点没有索引值;间接寻址描述单链表时,各个节点间的索引值满足一定的数学关系;模拟指针描述单链表时,各个节点的索引值不用满足一定的数学
2017-10-12 22:39:30
1743
原创 数据结构与算法C++描述(3)---间接寻址
间接寻址就是线性表和链表的组合,它利用了线性表中的公式化描述,同时也利用了链表中的链接指针。。采用这种描述方法,可以保留公式化描述方法的许多优点——可以根据索引在ΘΘ( 1 )的时间内访问每个元素、可采用二叉搜索方法在对数时间内对一个有序表进行搜索等等。与此同时,也可以获得链表描述方法的重要特色——在诸如插入和删除操作期间不必对元素进行实际的移动。因此,大多数间接寻址链表操作的时间复杂性都与元素的总
2017-10-10 17:06:23
1076
原创 数据结构与算法C++描述(4)---链表
上文“数据结构C++描述—线性表的基本操作”中所述的线性表是基于公式化描述来存储数据的,即它的存储位置之间满足一定的数学关系。而利用链表描述线性表时,某个元素的描述包含两部分:链接域(指向下一个或上一个节点)和数据域(存储当前元素的值)。因此,链表利用链接指针将各个数据连接起来。 链表包括: 1. 单链表:只有指向下一个元素的指针,最后一个节点链接域为NULL(或0)如下图所示(图片来源
2017-09-29 22:35:31
582
原创 常用排序算法C++ && Python实现
本文对常用的排序算法进行总结,并利用C++和Python语言实现。另:本文所有代码皆上传至[我的码云](https://git.oschina.net/git-lizhen)。 一、直接插入排序1. 算法思想: 直接插入排序的思想是:从待排序序列的第一个元素开始,依次比较相邻的两个元素,若后者小于前者(从小到大排序),则将
2017-09-01 11:59:24
437
原创 排序算法C++&&Python实现---基数排序
本文将介绍基数排序算法的基本思想,并附上C++和Python实现的源代码。基数排序的基本思想: 我是这样理解基数的:任何多位数都是有个位、十位、百位。。。构成的,那么其中的个位、十位、百位等的数字就可称为该数据的基数。从而,我们可以依次根据基数的大小来判断数据的大小。比如:先判断数据的个位数,将它们按个位数的大小从大到小依次排列起来,然后在依次比较十位数,依次类推,直至比较完数据的所有位数。C+
2017-08-22 17:41:50
356
原创 排序算法C++&&Python实现---归并排序
本文将介绍归并排序算法的基本思想及其C++和Python的代码实现。归并排序基本思想: 首先将待排序数列两两分组,将排序好的两个序列归并到中间数组中,依次类推,直到归并完整个待排序数列。C++实现://打印排序结果函数void Print(int a[],int n,int i=0){ //cout<<i<<endl; cout<<"排序后的结果为:"<<endl;
2017-08-22 10:17:25
387
原创 排序算法C++ && Python实现---快速排序
本文将介绍快速排序算法及一种优化的快速排序算法。1.基本的快速排序算法: (1)算法原理: 首先从待排序数组中选取参考数据keyvalue(一般选取数组第一个或最后一个数据),根据keyvalue的大小将待排序数组分成两部分(大于keyvalue部分和小于keyvalue部分),对这两部分分别递归调用快速算法。 流程图如下: (2)C++实现://打印排
2017-08-21 11:56:38
353
原创 排序算法C++&&Python实现---冒泡排序
本文将介绍基本的冒泡排序算法及两种冒泡排序的优化算法。一、基本冒泡排序算法原理:对于待排序数列,从后到前依次比较相邻两个元素,若后面的元素小于前面的元素,则交换。(从小到大排序)C++实现//打印排序结果函数void Print(int a[],int n,int i=0){ //cout<<i<<endl; cout<<"排序后的结果为:"<<endl; for
2017-05-30 11:16:30
753
原创 排序算法C++ && Python实现---堆排序
堆排序是利用“堆”的概念,将一列数进行排序。本文首先介绍“堆”的定义,说明“堆”排序的过程和解决思路,最后利用C++和Python实现算法。“堆”的定义 具有n个元素的序列(k1,k2,...,knk_1,k_2,...,k_n),当且仅当满足: {ki≤k2iki≤k2i+1\{^{k_i\le{k_{2i}}}_{k_i\le{k_{2i+1}}} (小顶堆)
2017-05-30 09:43:34
549
原创 排序算法的C++ && Python实现---选择排序
算法思想: 选择排序有简单的选择排序和二元选择排序。其中,简单选择排序是依次寻找序列中的最小值,然后将其放入序列的前端。比如,序列 a[16]={88,10,71,29,50,9,34,4,675,3,89,19,55,67,45,234};第一次循环找到最小值3,然后与第一个元素交换;接下来,在除去第一个元素后的序列中寻找最小值,并与原序列中的第二个元素交换;直到第n个元素与第n-1个元素交换完
2017-04-27 11:09:32
386
原创 排序算法的C++ && Python实现---希尔排序(缩小增量排序)
算法思想 希尔排序是在直接插入排序的基础上进行改进。直接插入排序时每次数据间间隔总为1,遍历整个序列,而希尔排序时每次数据间间隔分别为n/2、n/4、…、1,然后再对每一个分组数据进行直接插入排序,当间隔小于1时,表明排序完成。C++代码(VS2012)://打印排序结果函数void Print(int a[],int n,int i=0){ //cout<<i<<endl;
2017-04-27 10:43:15
390
原创 排序算法C++ && Python实现---直接插入排序
算法思想: 直接插入排序的思想是:从待排序序列的第一个元素开始,依次比较相邻的两个元素,若后者小于前者(从小到大排序),则将后者作为哨兵,插入到序列中的正确位置。 那么问题来了,怎么样才能将哨兵插入到正确的位置呢?这就是下面需要着重解决的问题。 考虑,第i个元素作为哨兵,则意味着data[i-1]>data[i]的,且经过前面的排序后,前面的0~i-1个元素已经从小到大排好序了。那么,可
2017-04-26 15:30:33
409
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人