目录
前言
最近又看了一下数据结构,总结了数据结构中需要了解的知识点。
1.指针
1.指针的定义和赋值
程序中一般通过变量名来对内存单元进行存取操作。其实程序经过编译后已经将变量名转成变量的地址。系统根据程序中定义的变量类型,在内存中分配存储空间。程序编译后,变量名就不起作用了,采用地址取值。按照变量地址直接取值的方式称为直接存取方式,或者直接访问方式。
除了直接访问的方式存取之外,C++中还有一种专门存地址的变量可以简介的访问变量。这个变量也就是指针变量。
简单的来说,变量的地址就是该变量的指针。存放地址的变量称为指针变量。
指针变量的声明方式如下:
数据类型 * 变量名;
例如:在下面的代码中,指针变量i_pointer指向的地址的数据类型是int。指针变量j_pointer指向的地址的数据类型是char。
int *i_pointer;
char *j_pointer;
指针变量有两种赋值方法:
既可以在定义时候初始化,例如:
int i;
int j;
int * i_pointer = &i;
int * j_pointer = &j;
也可以在非定义的时候初始化,例如:
int i;
char j;
int * i_pointer;
char * j_pointer;
i_pointer = &i;
j_pointer = &j;
需要注意的是不能使用一个整数给一个指针变量赋值。
2.指针运算
指针运算符有两个:&和*。
运算符&用于返回其操作对象的内存地址,其操作对象通常为一个变量名。例如:
ptr = & total;
运算符*用于返回其操作数所指向的对象的值。
指针可以进行p+n和p-n操作,分别表示的是指针指向后面(前面)n个元素。
相同类型的指针变量类型之间可以互相赋值,表示两个指针变量指向内存中的同一个地址。
两个指向同一类型的指针变量可以进行==、>、<等关系运算,其实就是地址的比较。
指针之间可以进行相减比较,结果为两个指针之间相差的元素个数。
3.指针和数组
C++中,数组元素的指针就是数组元素的地址。
例如在下面的代码中:
int a[10];
int * p;
p = &a[0];
和下面的代码是等价的。
int a[10];
int * p;
p = a;
除此之外,数组名还可以作为参数传递。当将数组名传递给函数的时候,实际上所传递的事数组的首地址。在大量数据传递的时候,指针的效率要比传递数据效率要高得多。
2.动态存储分配
C++中使用new和delete运算符来实现动态存储分配。
动态存储分配步骤如下:
1.定义一指针变量
2.采用new申请一片内存空间,并将其首地址赋值给指针变量。
3.使用delete删除动态分配的存储空间。
1.使用new获得动态内存空间
格式如下:
指针变量 = new 类型;
例如我们可以声明指针变量的时候赋初始值:
int * a;
a = new int(10);
也可以使用new关键字给数组赋值。
int * a;
a = new int[10];
由于动态分配的内存空间是堆内存或者自由存储区,通常数量是有限的。因此如果在程序中不断的分配堆内存就有可能将其耗尽。这个时候,系统无法再对new提出的堆内存分配请求给予满足,此时new会返回空指针NULL.所以我们分配之后,我们要判断下是否分配成功。
2.使用delete释放动态内存空间
C++中使用new申请的动态存储,必须使用delete释放。这样做的目的是把闲置不用的堆内存归还给系统,可以使其重新分配。
使用delete释放内存空间的语法格式为:
delete 指针变量;
例如:
int * a;
a = new int;
...
delete a;
释放数组占用的内存空间语法格式为:
delete[] 指针变量名;
例如:
int * a;
a = new int[10];
...
delete[]a;
3.什么是数据结构
1.数据结构的研究内容
数据结构在计算机科学中是一门综合性的专业基础课。数据结构的研究不仅涉及计算机硬件(特别是编码理论、存储装置和存取方法等)的研究范围,而且和计算机软件的研究有着密切的关系,无论是编译程序还是操作系统都涉及数据元素在存储器中的分配问题。在研究信息检索时也必须考虑如何组织数据,以使查找和存取数据元素更为方便。因此,可以认为数据结构是介于数学、计算机硬件和软件三者之间的一门核心课程。
2.数据结构的基本概念和术语
1.数据
数据是客观事物的符号表示,是所有能输入到计算机中并被计算机程序处理的符号的总称。
2.数据元素
数据元素书数据的基本单位。
3.数据项
数据项是组成数据元素的、有独立含义的、不可分割的最小单位。
4.数据对象
数据对象是性质相同的数据元素的集合,是数据的一个子集。
5.数据结构
数据结构是相互之间存在一种或者多种特定关系的数据元素的集合。数据结构包括逻辑结构和物理结构。
数据的逻辑结构是从逻辑关系上描述数据,与数据的存储无关,是独立于计算机的。数据的逻辑结构有两个元素:一是数据元素,二是关系。数据元素的逻辑关系分类如下:
数据的存储结构指的是数据对象在计算机中的存储表示,也叫物理结构。数据的物理结构包括顺序存储结构和链式存储结构。
6.数据类型
数据类型是一个值的集合和定义在这个值集上的一组操作的总称。
7.抽象数据类型
抽象数据类型是由用户定义的、表示应用问题的数学模型,以及定义在这个模型上的一组操作的总称。
8.算法的时间复杂度
一个算法的执行时间大致上等于其所有语句执行时间的总和,而语句的执行时间则为该语句的重复执行次数和执行一次所需时间的乘积。
一条语句的重复执行次数称为语句频度。
算法的时间复杂度是衡量算法运行效率的一种指标,表示随着问题规模的增加,算法执行所需时间的增长速度。通常使用大O符号(O)来表示时间复杂度。
9.算法的空间复杂度
算法的空间复杂度是衡量算法在执行过程中所需的内存空间大小的指标,通常使用大O符号(O)来表示。
空间复杂度描述了算法所需的额外内存空间与输入数据规模之间的关系,即在最坏情况下,算法执行所需的额外内存空间与输入数据的大小之间的增长关系。