欢迎光临散文网 会员登陆 & 注册

王卓数据结构---类C语言有关操作补充1

2021-09-16 18:26 作者:晚安留在砰砰里  | 我要投稿

补充:元素类型说明

顺序表类型定义

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;

补充:数组的定义

数组中名字存放的是数组当中的首元素,第一个元素,放的是第一个元素的地址,首地址,也叫基地址  data【0】。既然是放的是地址,我们也可以定义一个指针变量,存放数组第一个元素的地址。

这个数组有多大呢?

我们可以用内存动态分配的函数来给他分配内存。

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);

获得了数组中大片空间的基地址呀就是第一个数据元素的地址,知道了第一个就可以计算后面的了。可以用指针操作也可以用数组的下标来操作。

需要加载头文件<stblib.h>

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


int*p1 = new int;

new int表示从内存中动态的分配一块空间,这块空间多大呢?放的是int型。这块空间得到的是地址,所以必须赋值给一个指针变量。

int*p1=new int(10);

也可以直接赋一个初值,表示new了一块空间这块空间存储了10。把新的空间赋值给p1。

不用的空间可以释放掉,C语言用的是free,而C++用的是delete:

例如:delete p1;

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

传值方式是传递变量的值。

传递以后只把值赋值到形参当中,形参发生改变,实参的值是不改变的。

传地址是传递地址。

实参形参共用同一片空间。改变实参的值形参也会改变。

注:C++中比C中多一种方式,C中可以传递数组名和指针变量。数组名中存放的是基地址。C++中多了一种引用的类型,也是传递的地址。

王卓数据结构---类C语言有关操作补充1的评论 (共 条)

分享到微博请遵守国家法律