c++算法学习-5

day14

指针

1.指针变量

取地址操作符(&)

点F10开始调试 然后点调试 窗口 内存

在展示的时候 如果是2进制就太长了 所以按照16进制进行的展开
指针变量


拆解指针类型

cpp 复制代码
{
char ch="w";
char *ch=&ch;
}

解引用操作符


如果⼀个指针变量的值是 NULL 时,表示这个指针变量没有指向有效的空间,所以⼀个指针变
量的值是 NULL 的时候,是不能解引用操作的

2.指针类型的意义

指针的解引用

16进制中占2进制的4个 所以16进制对应2进制的32字节是8个


指针+-整数


void* 指针

cpp 复制代码
在指针类型中有⼀种特殊的类型是 void * 类型的,可以理解为⽆具体类型的指针(或者叫泛型指
针),这种类型的指针可以⽤来接受任意类型地址。但是也有局限性, void* 类型的指针不能直接进
⾏指针的+-整数和解引⽤的运算。

3.指针访问数组

4.--------动态内存管理


new /delete
new进行的返回地址

cpp 复制代码
C++中通过 new 和 delete 操作符进⾏动态内存管理。
• new 负责申请内存, new 操作符返回的是申请到的内存空间的起始地址,需要指针存放。
◦ new 申请⼀个变量的空间, new[] 申请⼀个数组的空间
• delete 负责释放(回收)内存
◦ delete 负责释放⼀个变量的空间, delete[] 释放⼀个数组的空间
• new 和 delete 配对, new[] 和 delete[] 配对使⽤

new 不是只能给内置类型开辟空间,也可以给⾃定义类型开辟空间。
new double啥的也一样

使用指针实现链表

1.什么是数据结构

⼀般在算法竞赛中的链表为了追求效率问题,会使用数组来模拟实现,在工程中链表⼀般是使用指针来实现的。两种方式最好都能掌握。

cpp 复制代码
数据结构是计算机的内存中存储和组织数据的⽅式。
数据结构关注如何以最有效的⽅式组织和存储数据,以便于在计算机程序中进⾏操作和处理。

2.链表的概念

3.链表的结构

先创建一个数据域:int data Node是一个自己命名的名字

还有一个指针域:使用* note获得一个的地址 返回的类型是struct next 所以是struct Node * next 在c++里面struct可以省略

4.链表的分类

5. --------动态申请链表节点和链表构建

像这个是局部的 所以一旦超过内存的范围就会被删除 所以需要使用动态申请

如果用的地址 可以用->指向所要指的成员

进行节点的链接(p2是地址 所以不用&p2)

cpp 复制代码
动态申请节点并初始化
Node* createNode(int data) 
{
   Node* newNode = new Node;
   newNode->data = data;
   newNode->next = nullptr;
   return newNode;
}

6.单链表元素的打印

当cur不等于null或者nullptr(空值)的时候就可以打印data 并且根据节点的next进入到另一个节点上

7. 单链表的头部插入元素

当实参传入形参的时候 形参的改变不会改变实参 所以需要传入实参的地址才可以


printList(phead);

分两种情况 一个是空的 另一种是有数据的

这样无论有没有数据都可以:

8.单链表的尾部插入元素

9. 单链表头部删除元素

phead做开始是1 当Node* tmp=phead 那么tmp就是存放的phead的地址 也就是1的地址

下面当phead=phead.next 这个时候phead是2

用delete tmp进行的删除1的这个 因为tmp是1的地址

10. 单链表尾部删除元素

当删除最后的节点的时候 要注意上一个节点的next是NULL了

当1的next的next不是空的时候 那么继续进行下一个 进入了2

当2的下一个3的下一个是空的时候 就不进入下一个了

那么2的下一个进行删除 并且让2的next=NULL

11. 释放链表的所有节点

cpp 复制代码
当链表不再需要的时候,申请的节点资源最好能释放掉,否则可能带来内存泄漏的⻛险。所有我们再
提供⼀个函数,释放链表的所有节点。其实这个就很简单了,我们调⽤⼀个删除元素的函数,直到把
链表删除为空链表就释放了所有的节点。

12. 面向对象(类或结构体)的方式实现链表

过程:用的函数

在面向过程的数据的时候使用的函数 所以在进行传入数据的时候需要把原来的数据进行传入

但是在面向对象的时候 因为使用的是列表 所以所有的数据都在里面 同时在调用里面的功能的时候phead都会不断的进行更新 所以不用像面向对象一样使用函数的时候进行更新数据

相关推荐
油丶酸萝卜别吃4 小时前
前端转全栈学习路线
前端·学习
GlueNa2SiO38 小时前
第十八章 Linux故障排查与恢复
linux·服务器·笔记·学习
weixin_431600448 小时前
NestJS 入门(3):Guard 如何挡住未登录请求?
前端·后端·学习·nest.js
带娃的IT创业者8 小时前
DeepTutor:当 Agent-Native 架构撞上个性化学习的临界点
学习·架构·ai agent·大模型应用·个性化学习·教育技术·agent-native架构
xian_wwq9 小时前
【学习笔记】Context Engineering,AI Agent 真正的内存管理-4/16
笔记·学习·context
寒月小酒10 小时前
AnythingLLM 学习
学习
大模型码小白13 小时前
【AI】一文讲清 RAG:从大模型局限到企业级知识库落地流程
人工智能·深度学习·学习
AI探索先锋13 小时前
A* 路径规划:四种算法的进化史-学习
学习·算法
辣知14 小时前
辣知·化智20 九千年文明记录
学习
GlueNa2SiO314 小时前
06-Docker存储与数据持久化
笔记·学习·docker