
算法和数据结构
@迷途小书童
这个作者很懒,什么都没留下…
展开
-
算法及其复杂度度量简介
1,算法: 1.1 所谓算法,是指基于特定的计算模型,旨在解决某一信息处理问题而设计的一个指令序列。 1.2 一般地,算法还应必须具备以下要素: 输入与输出;基本操作、确定性与可行性;有穷性与正确性;退化与鲁棒性;重用性 对退化与鲁棒性说明: 比如其中之一就是,除一般性情况外,实用的算法还应能够处理各种极端的输入实例。以排序问题为例,极端情况下待排序序列的长度可能不是正数(参数n = 0甚至n &...原创 2019-06-03 11:08:15 · 1845 阅读 · 0 评论 -
线性表概述
一、线性表的定义 线性表:零个或多个数据元素的有限序列。 包括顺序表和链表:顺序表(其实就是数组)里面元素的地址是连续的,链表里面节点的地址不是连续的,是通过指针连起来的。 二、线性表的抽象数据类型 线性表的抽象数据类型定义如下: ADT 线性表(List) Data 线性表的数据对象集合为{a1,a2,....,an},每个元素的类型均为DataType。其中,除了第一个元素a1外,每一个元素有...翻译 2019-06-27 09:39:28 · 300 阅读 · 0 评论 -
栈和队列
1,栈 1.1 栈的特性 后进先出(Last In First Out),简称为LIFO线性表。栈是动态集合,可以插入、删除,并且是线性不循环结构。 栈的性质推论: 1)只有最上面的元素能被弹出 2)只能在最上面放置新元素 3)弹出的元素是最新压入的 4)元素弹出的顺序与压入的顺序相反 即其特殊性在于限定插入和删除数据元素的操作只能在线性表的一端进行。 1.2 栈的类实现 #ifndef ST...原创 2019-06-27 10:42:59 · 121 阅读 · 0 评论 -
选择排序
1,算法实现原理 设置一个模板函数实现对线性数组进行选择排序,首先记第i(i的初始值为0)个元素为整个数组的最小值,记录其下标为minIndex,遍历除首元素以外的整个数组(j=i+1,j<n,j++),通过逐个比较找到实际最小值,将其下标j记为minIndex,交换i和minIndex对应的元素值,增加i的值,重复上述操作,直至i到达最后一个元素。 2,C++源码 #include &l...原创 2019-08-18 10:00:19 · 140 阅读 · 0 评论 -
运算符重载
1,定义 C++ 允许在同一作用域中的某个函数和运算符指定多个定义,分别称为函数重载和运算符重载。 重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但是它们的参数列表和定义(实现)不相同。 当您调用一个重载函数或重载运算符时,编译器通过把您所使用的参数类型与定义中的参数类型进行比较,决定选用最合适的定义。选择最合适的重载函数或重载运算符的过程,称为重载决策。 2,实例 ...原创 2019-08-18 10:49:32 · 234 阅读 · 0 评论 -
插入排序
1,插入排序思想 利用 for( int i = 1 ; i < n ; i ++ )遍历整个数组,考察当前第i个元素,并将其下标记录为j(j>0)其值赋值给e,比较j和j-1元素的大小,如果当前元素较前一个元素较小( arr[j-1] > e),将前一个元素后移,并使j–,逐个完成上述操作,然后将e赋值给第j个元素。 2,代码实现 #include <iostream&g...原创 2019-08-18 14:48:16 · 264 阅读 · 0 评论 -
气泡排序
1,气泡排序的思想 对比相邻两个元素的相对大小,如果当前第i个元素小于前一个元素则交换两元素的值,每遍历一轮数组元素的个数减一,直到所有交换操作完成,不在发生交换。 2,代码实现 #include <iostream> #include <algorithm> using namespace std; template<typename T> void b...原创 2019-08-18 15:03:09 · 425 阅读 · 0 评论 -
希尔排序
1,算法思想 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。 2,代码实现 #include <iostream> #include <algorithm> using namespace std; template<typename T>...原创 2019-08-18 15:22:05 · 270 阅读 · 0 评论