传智播客C和C++与大数据结构基础讲义Word文档下载推荐.docx
- 文档编号:14841126
- 上传时间:2022-10-25
- 格式:DOCX
- 页数:76
- 大小:5.95MB
传智播客C和C++与大数据结构基础讲义Word文档下载推荐.docx
《传智播客C和C++与大数据结构基础讲义Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《传智播客C和C++与大数据结构基础讲义Word文档下载推荐.docx(76页珍藏版)》请在冰豆网上搜索。
一个数据元素由假如干数据项组成
数据对象–性质一样的数据元素的集合〔比如:
数组,链表〕
//友情提示,来自结构体课堂代码
//声明一个结构体类型
struct_MyTeacher//一种数据类型
{
charname[32];
chartile[32];
intage;
charaddr[128];
};
intmain21()
struct_MyTeachert1;
//数据元素
struct_MyTeachertArray[30];
//数据对象
memset(&
t1,0,sizeof(t1));
strcpy(t1.name,"
name"
);
//数据项
strcpy(t1.addr,"
addr"
strcpy(t1.tile,"
t1.age=1;
}
数据元素之间不是独立的,存在特定的关系,这些关系即结构
数据结构指数据对象中数据元素之间的关系
数组中各个元素之间存在固定的线性关系
编写一个“好〞的程序之前,必须分析待处理问题中各个对象的特性,以与对象之间的关系。
根本概念总结:
指数据元素之间的逻辑关系。
即从逻辑关系上描述数据,它与数据的存储无关,是独立于计算机的。
逻辑结构可细分为4类:
1.2、算法
算法是特定问题求解步骤的描述
在计算机中表现为指令的有限序列
算法是独立存在的一种解决问题的方法和思想。
对于算法而言,语言并不重要,重要的是思想。
数据结构只是静态的描述了数据元素之间的关系
高效的程序需要在数据结构的根底上设计和选择算法
===→程序=数据结构+算法
总结:
算法是为了解决实际问题而设计的
数据结构是算法需要处理的问题载体
数据结构与算法相辅相成
输入
算法具有0个或多个输入
输出
算法至少有1个或多个输出
有穷性
算法在有限的步骤之后会自动完毕而不会无限循环
确定性
算法中的每一步都有确定的含义,不会出现二义性
可行性
算法的每一步都是可行的
1、事后统计法
比拟不同算法对同一组输入数据的运行处理时间
缺陷
为了获得不同算法的运行时间必须编写相应程序
运行时间严重依赖硬件以与运行时的环境因素
算法的测试数据的选取相当困难
事后统计法虽然直观,但是实施困难且缺陷多
算法效率的度量
事前分析估算
依据统计的方法对算法效率进展估算
影响算法效率的主要因素
算法采用的策略和方法
问题的输入规模
编译器所产生的代码
计算机执行速度
//算法最终编译成具体的计算机指令
//每一个指令,在具体的计算机上运行速度固定
//通过具体的n的步骤,就可以推导出算法的复杂度
longsum1(intn)
longret=0;
int*array=(int*)malloc(n*sizeof(int));
inti=0;
for(i=0;
i<
n;
i++)
{
array[i]=i+1;
}
ret+=array[i];
free(array);
returnret;
longsum2(intn)
for(i=1;
=n;
ret+=i;
longsum3(intn)
if(n>
0)
ret=(1+n)*n/2;
intmain()
printf("
%d\n"
sum1(100));
sum2(100));
sum3(100));
return0;
intfunc(inta[],intlen)
intj=0;
ints=0;
len;
i++)n
for(j=0;
j<
j++)n
s+=i*j;
//n*n
returns;
//n*n
注意1:
判断一个算法的效率时,往往只需要关注操作数量的最高次项,其它次要项和常数项可以忽略。
注意2:
在没有特殊说明时,我们所分析的算法的时间复杂度都是指最坏时间复杂度。
2、大O表示法
算法效率严重依赖于操作(Operation)数量
在判断时首先关注操作数量的最高次项
操作数量的估算可以作为时间复杂度的估算
O(5)=O
(1)
O(2n+1)=O(2n)=O(n)
O(n2+n+1)=O(n2)
O(3n3+1)=O(3n3)=O(n3)
常见时间复杂度
关系
3、算法的空间复杂度
算法的空间复杂度通过计算算法的存储空间实现
S(n)=O(f(n))
其中,n为问题规模,f(n))为在问题规模为n时所占用存储空间的函数
大O表示法同样适用于算法的空间复杂度
当算法执行时所需要的空间是常数时,空间复杂度为O
(1)
空间与时间的策略
多数情况下,算法执行时所用的时间更令人关注
如果有必要,可以通过增加空间复杂度来降低时间复杂度
同理,也可以通过增加时间复杂度来降低空间复杂度
练习1:
分析sum1sum2sum3函数的空间复杂度
O(4n+12)O(8)=O
(1)O(4)=O
(1)
实现算法时,需要分析具体问题,对执行时间和空间的要求。
练习2:
时间换空间
/*
问题:
在一个由自然数1-1000中某些数字所组成的数组中,每个数字可能出现零次或者屡次。
设计一个算法,找出出现次数最多的数字。
*/
方法1:
排序,然后找出出现次数最多的数字
方法2:
voidsearch(inta[],intlen)
intsp[1000]={0};
intmax=0;
intindex=a[i]-1;
sp[index]++;
1000;
if(max<
sp[i])
max=sp[i];
if(max==sp[i])
i+1);
intarray[]={1,1,3,4,5,6,6,6,2,3};
search(array,sizeof(array)/sizeof(*array));
把每个数字出现的次数的中间结果,缓存下来;
在缓存的结果中求最大值。
2、线性表
线性表(List)是零个或多个数据元素的集合
线性表中的数据元素之间是有顺序的
线性表中的数据元素个数是有限的
线性表中的数据元素的类型必须一样
线性表是具有一样类型的n〔≥0〕个数据元素的有限序列
〔a1,a2,…,an〕
ai是表项,n是表长度。
a0为线性表的第一个元素,只有一个后继
an为线性表的最后一个元素,只有一个前驱
除a0和an外的其它元素ai,既有前驱,又有后继线性表能够逐项访问和顺序存取
下面的关系中可以用线性表描述的是
A.班级中同学的友谊关系N:
N
B.公司中的上下级关系1:
C.冬天图书馆排队占座关系
D.花名册上名字之间的关系1:
:
1
创建线性表
销毁线性表
清空线性表
将元素插入线性表
将元素从线性表中删除
获取线性表中某个位置的元素
获取线性表的长度
线性表在程序中表现为一种特殊的数据类型
线性表的操作在程序中的表现为一组函数
C语言描述=====》线性表的设计与实现
ADT抽象层《[数据结构(C语言版)].严蔚敏_吴伟民.扫描版.pdf》p44页
人生财富库积累
#ifndef_WBM_LIST_H_
#define_WBM_LIST_H_
typedefvoidList;
typedefvoidListNode;
//创建并且返回一个空的线性表
List*List_Create();
//销毁一个线性表list
voidList_Destroy(List*list);
//将一个线性表list中的所有元素清空,线性表回到创建时的初始状态
voidList_Clear(List*list);
//返回一个线性表list中的所有元素个数
intList_Length(List*list);
//向一个线性表list的pos位置处插入新元素node
intList_Insert(List*list,ListNode*node,intpos);
//获取一个线性表list的pos位置处的元素
ListNode*List_Get(List*list,intpos);
//删除一个线性表list的pos位置处的元素返回值为被删除的元素,NULL表示删除失败
ListNode*List_Delete(List*list,intpos);
#endif
注意:
(重点:
别离思想)
插入元素算法
判断线性表是否合法
判断插入位置是否合法
把最后一个元素到插入位置的元素后移一个位置
将新元素插入
线性表长度加1
获取元素操作
判断位置是否合法
直接通过数组下标的方式获取元素
删除元素算法
判断删除位置是否合法
将元素取出
将删除位置后的元素分别向前移动一个位置
线性表长度减1
链表顺序存储插入算法和删除算法
优点:
无需为线性表中的逻辑关系增加额外的空间
可以快速的获取表中合法位置的元素
缺点:
插入和删除
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 传智播客 C+ 数据结构 基础 讲义
![提示](https://static.bdocx.com/images/bang_tan.gif)