数据结构的总结
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据与结构知识点总结
数据结构概述
定义
我们如何把现实中大量而复杂的问题以特定的数据类型(比如:结构体等)和特定
的存储结构(比如:数组,链表等)保存到主存储器(内存)中,以及在此基础上
为实现某个功能(比如:查找某个元素,删除某个元素,对所有元素进行排序)而
执行的相应操作,这个相应的操作也叫算法。
数据结构= 个体+ 个体的关系
算法= 对存储数据的操作
理解:如果数据都无法保存的话,如何对数据进行操作呢?这时候数据的存储是一个很关键的问题,那么我们就要通过特定的数据类型和特定的存储
结构保存到内存中。那么问题来了:
问题1:保存一个省的人事之间的关系就不能用链表或数组来实现,
因为那样不能得知哪个是老大老二,谁是领导和属下,所以
它无法体现,那么怎么办呢?
——利用用树来实现,做一个人事管理系统
问题2:如果是个交通图,开辟很多站点,那么我要在各站点间修路
每个站点相同,或者说给出两个站点,系统能给出两站点间
最短路径,那又该怎么办呢?
——利用图来实现,使各个点之间相关联
发现:把一个实际的问题如何保存在计算机里面,这是第一步要解决的问题。如果数据都不能保存,那还怎么对它操作呢?
那么该如何保存呢?
保存个体(特定的数据类型);
保存个体和个体之间的关系(特定的存储结构)。
算法:解题的方法和步骤
衡量算法的标准(前2条最关键)
1、时间复杂度:大概程序要执行的次数,而非执行的时间
2、空间复杂度:算法执行过程中大概所占用的最大内存
3、难易程度
4、健壮性:不能出现当给一个非法的数整个程序就挂了
数据结构的地位:
数据结构是软件中最核心的课程,几乎所有的编程语言都能找到数据结构的影子
程序= 数据的存储+ 数据的操作+ 可被计算机执行的语言
预备知识
指针
指针的重要性:C语言的灵魂
定义
地址:
内存单元的编号
从0开始的非负整数
范围:0—0FFFFFFFF【0-4G-1】
指针:
指针就是地址,地址就是指针
指针变量是专门存放内存单元地址的变量
指针本质是一个操作受限的非负数
分类:
1、基本类型的指针
eg:#include
int main(void)
{
int *p;//p是个变量名字,int *表示p只能存放整形变量的地址
inti=10;
int j;
p=&i;//p指向i
j=*p;//等价于j=i
printf("i=%d,j=%d,*p=%d\n",i,j,*p);//10
return 0;
}
eg:#include
void f(int *p)//int *是变量p的数据类型,形参的名字是p,而不是*p
{
*p=100;
}
int main(void)
{
inti=9;
f(&i);//实参必须为相关变量的地址
printf("i=%d\n",i);//100
return 0;
}
2、指针和数组的关系
eg:#include
int main(void)
{
int a[5]={1,2,3,4,5};//a==&a[0],它是常量值不能变
a[3]=*(a+3);//a[i]==*(a+i)
printf("%p\n",a+1);//%p是输出地址
printf("%p\n",a+2);
printf("%p\n",a+3);
printf("%d\n",*a+3);//等价于a[0]+3
return 0;
}
eg:#include
voidShow_Array(int *p,intlen)
{
inti=0;
p[0]=-1;//p[0]==*p;p[2]==*(p+2)==*(a+2)==a[2]
//p[i]就是主函数的a[i]
for(i=0;i { printf("%d\n",p[i]); } } int main(void) { int a[5]={1,2,3,4,5}; Show_Array(a,5);//a等价于&a[0] printf("%d\n",a[0]);//-1 return 0; }/*-1 2 3 4 5 -1*/ eg:#include int main(void) { double *p,*q,x=66.6; doublearr[3]={1.1,2.2,3.3}; p=&x;//x占8个字节(8位),一个字节一个地址 q=&arr[0]; printf("%p\n",q);//%p实际就是一16进制输出 q=&arr[1]; printf("%p\n",q); return 0; }//相差8个字节 无论指针变量指向谁,它本身只占4个字节。