第一节课复习了c语言的一些知识,并简单介绍了数据结构这门课程。
1、引用和函数调用:
1.1引用:对一个数据建立一个“引用”,他的作用是为一个变量起一个别名。这是C++对C语言的一个重要补充。
用法很简单:
int a = 5;
int &b = a;
b是a别名,b与a代表的是同一个变量,占内存中同一个存储单元,具有同一地址。
注意事项:
- 声明一个引用,同时必须初始化,及声明它代表哪一个变量。(作为函数参数时不需要初始化)
- 在声明一个引用后,不能再作为另一变量的引用。
3。不能建立引用数组。
1.2函数调用:
其实还是通过函数来理解了一下引用
void Myswap1(int a,int b)
{int c = a;a = b;b = c;
}void Myswap2(int &a,int &b)
{int c = a;a = b;b = c;
}void Myswap3(int *pa,int *pb)
{int c = *pa;*pa = *pb;*pb = c;
}
这三个函数很简单,第一个只传了值进来,不改变全局变量;而第三个也很熟悉,就是传递了地址,方便操作。依旧是“值传递”的方式,只不过传递的是变量的地址而已;那二就彻底改变了这些东西,引用作为函数参数,传入的实参就是变量,而不是数值,真正意义上的“变量传递”。
2、数组和指针:
这一块讲得比较简单,就是基本知识。
主要内容:
1、函数传数组就是传了个指针,这个大家都知道,所以传的时候你写arr[],里面写多少,或者不写,都是没关系的,那你后面一定要放一个变量来把数组长度传进来。
2、还有就是,定义:int arr[5],你访问越界是不会报错的,但是逻辑上肯定就没有道理了。那用typedef int INTARR[3];访问越界,在vs上会报错,要注意。
3、再说一下指针和数组名字到底有什么区别?这本来就是两个东西,可能大家没注意罢了。
第一:指针可以自增,数组名不行,因为是常量啊。
第二:地址不同,虽然名字[n],都可以这样用,但是数组名地址就是第一个元素地址。指针地址就是那个指针的地址,指针里存的才是第一个元素地址。
第三:sizeof(),空间不一样,数组是占数组那么大空间。指针是四个字节。
本来就是俩东西,这么多不同都是本质不同的体现。
3、结构体:
也是讲的基本操作,基本就是这个东西:
typedef struct Date
{int Year;int Month;int Day;struct Date *pDate;
}Date, *pDate;
1、内部无指向自己的指针才可以第一行先不起名字。
2、内部不能定义自己的,如果能的话那空间不就无限了么。很简单的逻辑
指针我不习惯,还是写Date *比较顺眼
3、有同学没注意:访问结构体里的东西怎么访问?
Date.这种形式,或者有指向这个节点的指针p可以p->这种形式,别写错了。
4、还有就是结构体能直接这么赋值:
Date d1 = {2018,9,11};
我竟然不知道,以前还傻乎乎的一个一个赋值呢。
5、还有,想写一下结构体有什么优点。。
这一块可能写的就不好了,因为不是老师讲的。。
比如学生成绩,如果不用结构体,我们一个学生可能有十几个信息,那定义变量和操作就很烦琐了,数据结构有一种松散的感觉。用一个结构体来表示更好,无论是程序的可读性还是可移植性还是可维护性,都得到提升。还有就是函数调用的时候,传入相当多的参数,又想操作或者返回,那是很麻烦的事。现在只传入一个结构体就好了,操作极其简单。总结一下就是好操作,中看中用,有机地组织了对象的属性。以修改结构体成员变量的方法代替了函数(入口参数)的重新定义。
基本就这样吧。
6、还有就是它了:typedef int INTARR[3];这样直接定义了一个数据类型,长度为3的数组,然后直接这样用就可以了:
INTARR arr1;
回忆完C语言储备知识,然后讲了数据结构的基本概念
数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象以及他们之间的关系和操作等的学科。
数据:是对客观事物的符号表示,在计算机中指能输入到计算机中并被处理的符号总称。
数据元素:数据的基本单位
数据项:数据的不可分割的最小单位
数据对象:性质相同的数据元素的集合。
举例:动物是数据,某只动物是数据元素,猫狗是数据对象,颜色可以是数据项。
数据元素之间存在某种关系,这种关系成为结构。
四种基本结构:
集合:除了同属一个集合无其他关系。
线性结构:一对一的关系
树形结构:一对多的关系
图状结构:多对多的关系