传智播客C和C++与大数据结构基础讲义Word文档下载推荐.docx

上传人:b****3 文档编号:14841126 上传时间:2022-10-25 格式:DOCX 页数:76 大小:5.95MB
下载 相关 举报
传智播客C和C++与大数据结构基础讲义Word文档下载推荐.docx_第1页
第1页 / 共76页
传智播客C和C++与大数据结构基础讲义Word文档下载推荐.docx_第2页
第2页 / 共76页
传智播客C和C++与大数据结构基础讲义Word文档下载推荐.docx_第3页
第3页 / 共76页
传智播客C和C++与大数据结构基础讲义Word文档下载推荐.docx_第4页
第4页 / 共76页
传智播客C和C++与大数据结构基础讲义Word文档下载推荐.docx_第5页
第5页 / 共76页
点击查看更多>>
下载资源
资源描述

传智播客C和C++与大数据结构基础讲义Word文档下载推荐.docx

《传智播客C和C++与大数据结构基础讲义Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《传智播客C和C++与大数据结构基础讲义Word文档下载推荐.docx(76页珍藏版)》请在冰豆网上搜索。

传智播客C和C++与大数据结构基础讲义Word文档下载推荐.docx

一个数据元素由假如干数据项组成

数据对象–性质一样的数据元素的集合〔比如:

数组,链表〕

//友情提示,来自结构体课堂代码

//声明一个结构体类型

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模板 > 商务科技

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1