王卓数据结构---类C语言有关操作补充1
补充:元素类型说明
顺序表类型定义
typedef struct{
ElemType data[]; //用来存放顺序表中的数据元素的数组
int length; //整型变量用来存放顺序表当中元素的个数
}SqList;//顺序表类型
注:ElemType是用来存放元素的类型,例如:存放A B C D,可以用char。
如果不想这样修改,也可以提前定义一下。
typedef char ElemType;
typedef int ElemType;
如果数据元素是个复杂类型,存储多项式不仅存放系数还要存放指数,可以定义一个结构类型。
typedef struct{
float p;
int e;
}Polynomial
typedef struct{
Polynomial*elem;
int length;
}Sqlist;
补充:数组的定义

这个数组有多大呢?
我们可以用内存动态分配的函数来给他分配内存。
Sqlist L;//用顺序表类型定义了一个变量L,
L有两个成员:L.data用来存放顺序表中的元素
L.length用来存放当前数据表中元素的个数
L.data=(ElemType*)malloc(sizeof(ElemType)*MaxSize);
补充:C语言的内存动态分配
依旧是上面的例子
紫色部分则是分配内存的,malloc(m)它的参数要求是一个整数,也就是分配这一块空间的字节数。
sizeof(ElemType)*MaxSize分配了多少字节数呢?MaxSize可能是100,1000.这取决于你的需要。假如一个元素需要占8个字节,Max Size是100,直接8*100=800。
注:这里面的*不是指针,是乘法。
这样计算很麻烦,所以使用了sizeof(x),它的参数可以是变量也可以是类型。计算这个变量和类型所需要的字节数。如果元素类型是char就可以计算出一个字符1个字节,如果是int就可以计算出一个字符4个字节。例如上面的复杂类型,float 4个字节,int 4个字节。这样一个元素需要8字节。可不再需要自己计算。8*100=800这个函数的结果就是从内存中找到800个字节空间。
800个字节怎么划分呢?
通过前面的类型来划分
L.data=(ElemType*)malloc(sizeof(ElemType)*MaxSize);
如果类型是char 800个空间分为800块
如果类型是int 800个空间分为200块
划分成什么类型看存储的元素是什么类型:(ElemType*)。
注:(ElemType*) *的意思的分配好的结果是个指针,放到数组当中,因为数组中放的是地址。
(ElemType*)。()的意思是强制转换
L.data=(ElemType*)malloc(sizeof(ElemType)*MaxSize);
获得了数组中大片空间的基地址呀就是第一个数据元素的地址,知道了第一个就可以计算后面的了。可以用指针操作也可以用数组的下标来操作。

补充:C++的动态存储分配


int*p1 = new int;
new int表示从内存中动态的分配一块空间,这块空间多大呢?放的是int型。这块空间得到的是地址,所以必须赋值给一个指针变量。
int*p1=new int(10);
也可以直接赋一个初值,表示new了一块空间这块空间存储了10。把新的空间赋值给p1。
不用的空间可以释放掉,C语言用的是free,而C++用的是delete:

补充:C++中的参数传递

传值方式是传递变量的值。
传递以后只把值赋值到形参当中,形参发生改变,实参的值是不改变的。
传地址是传递地址。
实参形参共用同一片空间。改变实参的值形参也会改变。
注:C++中比C中多一种方式,C中可以传递数组名和指针变量。数组名中存放的是基地址。C++中多了一种引用的类型,也是传递的地址。