[视频链接](https://www.bilibili.com/watchlater/#/av53135620/p4
一、基本类型
1. 数据类型
int float char short
等
2. 指针型
指针型:存放变量地址的变量类型
int *p1 = &A;//为什么定义一个int型指针变量?因为指针不是通用的,指针只能指向和所指针定义的同类型的变量
char *p2 = &B;
float *p3 = &C;
NULL 是不指向任何地址的特殊标记,其值为0.初始化指针的时候常用,如 int *p4 = NULL;
3. 构造类型
-
数组:把相同类型的变量排成一列所构成的变量集
int A【100】;//长度为100,存储范围0~99
-
结构体:将不同类型变量组合在一起来解决问题
结构体声明并没有创建一个实体对象,它只是描述了一种数据类型,勾勒出数据该如何存储,类似于int char等,因此我们也叫它模板结构体的两种定义方法
typedef struct {
int a;
float b;
char c;
}structNodeA;//封号不能少,结构体声明相当于一个语句
//结构体内部有一个指向本身的指针
typedef struct structNodeB{
int a;
double b;
char c;
struct structNodeB *d;//
}structNodeB;
typedef是什么意思?
4. void
在考研数据结构中,主要用来定义没有返回值的函数
break 和 continue 的区别?
只能在循环体内和switch语句体内使用break
Break结束整个循环,continue结束当前循环,跳到下一步循环
二、函数
返回值类型 函数名(参数定义列表){
};
调用方法:函数名(参数列表);
int add(int a,int b){
return a+b:
}
answer = add(1,2);
void F(){
//只需要这个函数的功能
}
调用:F();
int result = 0;
void getResult(int r){
++r;
}
getResult(result);
result的值不会发生变化
‼️过程:result的值赋给r,然后r进行自增操作,改变的是r的值而不是result的值
如果想对result(而不是r)直接进行操作,我们应该使用参数的引用型符号&,可以实现 函数对传入的变量进行改变,并且在函数执行之后,在变量中直接得到改变后的结果,需要把其对应的参数定义成引用型
int result = 0;
void getResult(int &r){
++r;
}
getResult(result);
‼️换句话说,如果想用函数直接对某一个变量进行操作,而不是对这个变量的复制品进行操作,需要把变量对应的参数定义成引用型
上述引用型是针对基本类型变量的,如果传入的参数是一个指针,并且要对指针本身进行操作,也就是我们要定义一个指针类型的引用型参数
int *p = NULL;
void getA(int *&p){
...
p = q;
...
}
getA(p);
三、数据结构
1. 逻辑结构:对元素间的关系的描述
- 没关系 集合
- 一对一 线性表 线性结构 元素排列成线
- 一对多 树 树形结构 分支
- 多对多 图 图形结构
2. 存储结构
- 顺序结构
- 链式结构
typedef struct LNode(){ int data; struct LNode *next; }LNode; LNode *L;//定义一个叫L的指针 L = (LNode *)malloc(sizeof(LNode)); //节点空间动态分配:malloc根据指定定义一个合适大小的存储空间,并且返回这个空间的地址 // 为结构类型为LNode的分配存储空间
```
箭头符号?
随机存取 random access(应该翻译成任意存取)
顺序存储结构支持随机存取,可以瞬间推算出任意一个节点的地址