传智播客C和C++与数据结构基础讲义
传智扫地僧
1 、数据结构概念
1 .1数据结构相关概念
1 .1 .1疑惑
1 、我学完了C语言可是现在感觉还是不出代码。
2、为什么会有各种各样的程序存在
3、程序的本质是什么
程序是为了具体问题而存在的程序需要围绕问题的解决进行设计同一个问题可以有多
种解决方案如何追求程序的“性价比” 是否有可量化的方法判别程序的好坏
1 .1 .2数据结构起源
计算机从解决数值计算问题到解决生活中的问题现实生活中的问题涉及不同个体间的
复杂联系需要在计算机程序中描述生活中个体间的联系数据结构主要研究非数值计算
程序问题中的操作对象以及它们之间的关系不是研究复杂的算法
1 .1 .3数据结构中的基本概念
数据-程序的操作对象用于描述客观事物(int a, int b,)数据的特点
可以输入到计算机可以被计算机程序处理数据是一个抽象的概念将其进行分类后得
到程序设计语言中的类型。如int float char数据元素组成数据的基本单位数据项一个数据元素由若干数据项组成数据对象-性质相
同的数据元素的集合 (比如数组链表)
1 /72
//友情提示来自结构体课堂代码
//声明一个结构体类型struct_MyTeacher //一种数据类型
{char n ame[32];char ti le[32];int age;char addr[128];
} int mai n21()
{struct_MyTeacher t1; //数据元素struct_MyTeacher tArray[30]; //数据对象memset(&t1,0, sizeof(t1));strcpy(t1.name, "name"); //数据项strcpy(t1 .addr, "addr"); //数据项strcpy(t1.ti le, "addr"); //数据项t1 .age=1;
数据元素之间不是独立的存在特定的关系这些关系即结构
数据结构指数据对象中数据元素之间的关系
女口数组中各个元素之间存在固定的线性关系
编一个“好”的程序之前必须分析待处理问题中各个对象的特性,关系。 以及对象之间的基本概念总结
2/72
1 .1 .4数据的逻辑结构
指数据元素之间的逻辑关系。即从逻辑关系上描述数据它与数据的存储无关是独立于计
算机的。逻辑结构可细分为4类
个对5*3/72
1 .1 .5数据的物理结构
1 .1 .6数据的运算
4/72
1 .2、算法
1 .2.1算法概念
算法是特定问题求解步骤的描述
在计算机中表现为指令的有限序列
算法是独立存在的一种解决问题的方法和思想。 对于算法而言语言并不重要重要的是思想。
122算法和数据结构区别
数据结构只是静态的描述了数据元素之间的关系
高效的程序需要在数据结构的基础上设计和选择算法
===程序=数据结构+算法
总结
算法是为了解决实际问题而设计的
数据结构是算法需要处理的问题载体
数据结构与算法相辅相成
1 .2.3算法特性
输入
算法具有o个或多个输入
输出
算法至少有1个或多个输出有穷性
算法在有限的步骤之后会自动结束而不会无限循环确定性
算法中的每一步都有确定的含义不会出现二义性可行性
算法的每一步都是可行的
5/72
1 .2.4算法效率的度量
6/72
}return ret;
}long sum3(i nt n)
{long ret=0;if(n>0)
{ret=(1 +n) *n/2;
}return ret;
}int mai n()
{printf("%d\n", sum1(100));prin tf("%d\n", sum2(100));prin tf("%d\n", sum3(100));return 0;
int fun c(i nt a[], in t le n)
{int i=0;i nt j=0;int s=0;for(i=0; i<le n; i++)n
{for(j=0; j<le n; j++) n
{s+=i*j; 〃 n*n
}
}return s;
}
〃 n*n
7/72
Aft S*C(4nt9| ffitCtn) i 0(znn■I 12 1 3I 1n—2 16
n■1 2 4 6
z 8 7 15n=5 孔1n• 10 200 JI 231u.WO 20000 301 20301
n-L<m 2000000 3001 1 2003001
n■血000 F200000000 30001 200030001
n■100*000 200000(X)000 300001 20000300001D■IjCOO.OOO 2000000000000 3000001 2000001000001
注意1判断一个算法的效率时往往只需要关注操作数量的最高次项其它次要项和常数项可以忽略。注意2:在没有特殊说明时我们所分析的算法的时间复杂度都是指最坏时间复杂度。
2、大0表示法
算法效率严重依赖于操作 (Operatio n)数量
在判断时首先关注操作数量的最高次项操作数量的估算可以作为时间复杂度的估算
0(5)=0(1)
0(2n+ 1)=0(2n)=0(n)
0( n2+n+ 1)=0(n2)
0(3 n3+1)=0(3 n3)=0(n 3)
常见时间复杂度tMnfcat酒Kt lit 正戒术as
12| 0(1) 常4L阶
2n-+-3 OS) 建忖吟
3nJ+2n+1 0(//) !帄方阶
51n^jn+20 O(1ogo) L»t*t阶
2n+弓n Io艮-5*19 0(/rio-gA) nlo-gn阶
■*'3n+4j 0(/Is) 立才阶
2" i0(2") 1
关系
0(1)<O(lo gw)<0(Jt)<O(nto gw)<O(n2}<0(,)<0(2')<0(制)<O(nK)
8/72
3、算法的空间复杂度
算法的空间复杂度通过计算算法的存储空间实现
S(n)=O(f(n))
其中 n为问题规模 f(n))为在问题规模为n时所占用存储空间的函数大0表示法同样适用于算法的空间复杂度当算法执行时所需要的空间是常数时空间复杂度为0(1)
空间与时间的策略
多数情况下算法执行时所用的时间更令人关注如果有必要可以通过增加空间复杂度来降低时间复杂度同理也可以通过增加时间复杂度来降低空间复杂度
练习1 :分析suml sum2 sum3函数的空间复杂度
0(4n+12) 0(8)=0(1)0(4)=0(1)
总结实现算法时需要分析具体问题对执行时间和空间的要求。
9/72
Sharktech最近洛杉矶和丹佛低价配置大部分都无货了,只有荷兰机房还有少量库存,商家又提供了两款洛杉矶特价独立服务器,价格不错,CPU/内存/硬盘都是高配,1-10Gbps带宽不限流量最低129美元/月起。鲨鱼机房(Sharktech)我们也叫它SK机房,是一家成立于2003年的老牌国外主机商,提供的产品包括独立服务器租用、VPS主机等,自营机房在美国洛杉矶、丹佛、芝加哥和荷兰阿姆斯特丹等,主...
提速啦简单介绍下提速啦 是成立于2012年的IDC老兵 长期以来是很多入门级IDC用户的必选商家 便宜 稳定 廉价 是你创业分销的不二之选,目前市场上很多的商家都是从提速啦拿货然后去分销的。提速啦最新物理机活动 爆炸便宜的香港CN2物理服务器 和 日本CN2物理服务器香港CTG E5 2650 16G内存 20M CN2带宽 1T硬盘 150元/月日本CN2 E5 2650 16G内存 20M C...
很久没有分享PhotonVPS的消息,最近看到商家VPS主机套餐有一些更新所以分享下。这是一家成立于2008年的国外VPS服务商,Psychz机房旗下的站点,主要提供VPS和独立服务器等,数据中心包括美国洛杉矶、达拉斯、芝加哥、阿什本等。目前,商家针对Cloud VPS提供8折优惠码,优惠后最低2G内存套餐每月4美元起。下面列出几款主机配置信息。CPU:1core内存:2GB硬盘:30GB NVm...