数据结构的总结

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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个字节。

相关文档
最新文档