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都会不断的进行更新 所以不用像面向对象一样使用函数的时候进行更新数据

相关推荐
M78佐菲2 小时前
ARM学习笔记(1)
linux·arm开发·笔记·嵌入式硬件·学习
无敌贵点大王5 小时前
RTThread学习记录11——RT-Thread 设备模型吃透:UART/ADC/PWM/PIN 到底有什么区别?
c语言·stm32·学习·链表
是翎6 小时前
深度长文|2026产品经理AI实践手册
人工智能·深度学习·学习·自然语言处理·数据挖掘
Linux-lucky6 小时前
32-38-Linux学习之旅之MySQL综合
linux·运维·学习·mysql·ubuntu
知识分享小能手7 小时前
C++ 学习教程,从入门到精通,C++ 入门知识 — 完整知识点(1)
开发语言·c++·学习
AI职业加油站10 小时前
数据要素价值释放年:大数据治理工程师,站上职业新风口
人工智能·学习·职场和发展·数据分析·职场发展
啄缘之间11 小时前
1.【SVA】什么是SVA?
经验分享·学习·测试用例·verilog·sva
sunoo-22911 小时前
【嵌入式裸机开发Day04】i.MX6ULL 蜂鸣器驱动详解:从引脚地址查找到代码实现全流程
arm开发·单片机·嵌入式硬件·学习·串口·裸机
Purple Coder11 小时前
stm32
学习
边境悍匪12 小时前
蜗牛学苑 Java 智能体学习 Day45|Knife4j+SpringBoot3、书城项目整合 MyBatis 思维导图复盘
java·开发语言·vue.js·学习·spring