青岛大学_王卓老师【数据结构与算法】Week02_06_类C语言有关操作补充1_学习笔记

本文介绍了C语言中顺序表的数据结构定义,包括静态和动态数组分配,以及如何使用malloc函数动态分配内存。同时,讲解了C++中的动态存储分配,如new运算符的使用以及如何通过new初始化对象。此外,还提到了C++中的参数传递原则。文章适合学习数据结构和算法的读者,特别是关注内存管理和C/C++编程的同学。
摘要由CSDN通过智能技术生成
本文是个人笔记,仅用于学习分享,素材来自青岛大学王卓老师的教学视频,如有侵权,请留言作删文处理。

王卓老师 数据结构与算法第 02 周第 06 个原视频链接

📚 Week02_06_类C语言有关操作补充1

📚 补充01:数据元素类型说明

顺序表类型定义

typedef	struct
{
	ElemType data[];
    int length;
}SqList;
// 顺序表类型

ElemType 代表顺序表 data[] 中数据元素类型。例如,

顺序表 data[] 中存放的是字符串,则 ElemType 可以替换成 char。

在多项式求和时,顺序表 data[] 中存放的是 float 类型的多项式系数,则 ElemType 可以替换成 float。

也可以在程序开头定义 ElemType 的类型,例如

typedef char ElemType;

typedef	struct
{
	ElemType data[];
    int length;
}SqList;
// 顺序表类型

如果顺序表 data[] 中数据元素类型是整型,则可以有

typedef int ElemType;

typedef	struct
{
	ElemType data[];
    int length;
}SqList;
// 顺序表类型

如果定义的顺序表 data[] 中数据元素类型是复杂类型,

例如,多项式求和中,顺序表 data[] 的数据元素不仅要存系数,还要存指数。

此时,可以将 顺序表 data[] 的数据元素类型定义成结构体类型,有

typedef int ElemType;

typedef	struct
{
	float p;
    int e;
}Polynomial;

typedef	struct
{
	Polynomial *elem;
    int length;
}SqList;
// 顺序表类型
📚 补充02:数组定义
数组静态分配
typedef	struct
{
	ElemType data[MaxSize];
    int length;
}SqList;
// 顺序表类型
数组动态分配
typedef	struct
{
	ElemType *data;
    int length;
}SqList;
// 顺序表类型

数组名 data 存放的是数组的第一个元素 data[0] 的地址,也就是数组的基地址,数组的首地址。

既然数组名 data 存放的是地址,则可以直接定义一个指针变量,存放数组的首地址。

可以用动态分配函数给数组动态分配内存。

SqList L;
L.data = (ElemType *)malloc(sizeof(ElemType)*MaxSize);
📚 补充03:C 语言的内存动态分配
SqList L;
L.data = (ElemType *)malloc(sizeof(ElemType)*MaxSize);
⭐ malloc (m) 函数

开辟 m 字节长度的地址空间,并返回这段空间的首地址。

⭐ sizeof (x) 运算

计算变量 x 的长度

x 既可以是变量,也可以是变量类型,计算变量类型所占用的字节数。

如果 ElemType 的类型是 char 类型,一个数据元素占用 1 个字节;

如果 ElemType 的类型是 int 类型,一个数据元素占用 4 个字节;

例如,多项式求和中,ElemType 的类型是复杂类型,包含一个系数变量和一个指数变量。

系数变量是 float 类型,指数变量是 int 类型,一个 ElemType 数据元素占用 8 个字节。

如果 MaxSize = 100,则malloc 函数在内存中申请 8 × 100 = 800 个字节。

❓800个字节空间如何分配?是分配成 200 个小空间,还是 100 个小空间?

🔖通过数据元素的类型 (ElemType *) 告诉计算机如何分配这 800 个字节空间。

如果 ElemType 的类型是 char 类型,计算机将 800 个字节成 800 个字节空间;

如果 ElemType 的类型是 int 类型,计算机将 800 个字节成 200个字节空间;

如果 ElemType 的类型是上述负责类型,计算机将 800 个字节成 100 个字节空间;

❓ (ElemType *) 中 * 是什么意思?

🔖 括号 ( ) 表示强制类型转换运算。

(int) 表示强制转换成 int 类型,(float) 表示强制转换成 float 类型。(int * ) 表示强制转换成 指向 int 类型的指针。

(ElemType *) 表示强制转换成 ElemType 数据类型的指针。

因为数组中第一个元素首地址是 ElemType 的指针,所以需要 (ElemType *) 进行强制转换。

通过

L.data = (ElemType *)malloc(sizeof(ElemType)*MaxSize);

这种方式,就可以获得 sizeof(ElemType)*MaxSize 这么大块的基地址,即第一个元素的基地址。

有了第一个元素基地址,就可以通过指针或是数组下标获取其他元素。

⭐ free § 函数

释放指针 p 所指变量的存储空间,即彻底删除一个变量。

⭐ 需要加载头文件 <stdlib.h>
📚 补充04:C++动态存储分配
new 类型名T (初值列表)
功能:申请用于存放 T 类型对象的内存空间,并依初值列表赋以初值结果值。
成功:T 类型的指针,指向新分配的内存
失败:0(NULL)

例如:

int *p1 = new int;

new 一个 int,从内存中动态分配一个 int 型的 4 个字节的空间,

new 出来的空间,最后得到该空间的地址,并赋值给指针变量 p1。

int *p1 = new int(10);

new 一个存储空间,并将该存储空间赋以初值 10,并将分配的存储空间的地址赋值给指针变量 p1。

指针变量 p1 指向新分配的空间的地址,指针变量 p1 存放的是新分配空间的地址。

delete 指针 p
功能:释放指针 p 所指向的内存。p 必须是 new 操作的返回值。
📚 补充05:C++ 中参数传递

📌 函数调用时,传送给形参表的实参必须与形参有三个一致:

⭐ 类型一致,

⭐ 个数一致

⭐ 顺序一致。

📌 参数传递有两种方式:

⭐ 传值方式:参数为整型,实型,字符型等。

⭐ 传地址:

➔ ➔ 参数为指针变量

➔ ➔ 参数为引用类型

➔ ➔ 参数为数组名

学习笔记最后有微信公众号:惟CPP,欢迎关注,一起交流学习进步~

  • 15
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值