以二叉树的建立为例,小谈C/C++里的二级指针、一级指针(真~小~谈,很水的)

用二级指针作为形参建立二叉树 今天在写二叉树的建立时,遇见了指针作为参数的bug。经过查找,进一步的理解了二级指针。 二级指针,也就是指针的指针,作用主要是为了改变指针本身的数据,在这里,可以把指针本身看成一个变量,既然是变量,那就肯定可以修改其内容,所以可以借助一个二级指针来改变指针本身的数据。 用指针作为形参,类似二叉树先序遍递归历的方法,建立二叉树。写了如下代码。 typedef struct node { 阅读详情

指针,是C的精髓,但是起码对我来说,实在是很容易搞混弄错的一种存在。以二叉树的几个基本操作为例,来稍微说下指针的含义,做个笔记给以后的自己看

 (好吧,还以为markdown跟html差不多,试了几个还是挺多区别的,很多功能都木有)

废话少说,先看代码:
typedef struct BiTNode  
{    
    char data;    
    struct BiTNode *lchild, *rchild;      //左右孩子    
}BiTNode,*BiTree; 

void CreateBiTree(BiTree &root)    //二级指针作为函数参数    
{    
    char ch; //要插入的数据   
    cin>>ch;   //文件头<iostream> 或用scanf读入(cstdio) 
    if(ch=='#')  
        root= NULL;  
    else  
    {  
        root=new BiTNode;
        (root)->data = ch;  
        printf("请输入%c的左孩子:",ch);  
        CreateBiTree(root->lchild);  
        printf("请输入%c的右孩子:",ch);  
        CreateBiTree(root->rchild);  
    }  
}  
void CreateBiTree(BiTree &root) ,对二叉树的操作与对其他结构体(链表等)类似,即初始化和销毁要用到二级指针,插入、删除、遍历、清空等用一级指针即可。旦&和*的含义会影响到接下来的操作,需要做对应修改。
上面这段传入的形参是以root为一个BiTree(即指向节点BiNode的指针), 传入了BiTree的地址。由于root为指针,所以是可以为空(==NULL)的,new操作时把一个新的节点的地址传回了root。要取root的元素,应用->而不是.  因为它是指针,不是节点。root->lchild是一个指向左孩子(某个节点)的指针,与root等级相同,可以作为形参再次递归调用。(好啰嗦,不可能还看不明白吧。。)
再看这一段:

可以这么理解,要createBiTree,传入的形参是一个二级指针,可以是**root,此时**root是一个BiNode节点,*root是一个指向BiNode的指针,root是一个指向“指向BiNode的指针”的指针,即二级指针。
C++指针实现二叉树 以洛谷[P1305] 新二叉树为例二叉树是什么东西,先序遍历是什么,这些网上都有,这里就不说了。数组实现也好做,但是复杂一点的用数组怕是要凉,用set啊map呀等STL容器怕是要慢。所以还是指针实现好。但是玩儿指针需要一定的语法基础,看周围大佬居然无一人会用指针建树。先聊一聊指针。若已掌握,请略过此段。以int型为例。若建立指向某个变量的指针,操作如下:int a = 0; int* p = &a... 阅读详情

相关推荐

台积电技术研发实力

台积电技术研发实力 台积电在半导体行业的地位毋庸置疑。他们究竟有多强大,大部分读者了解得可能非常片面。从最新公布的2019年财报里,看看台积电的真正实力。 一、台积电在市场上的地位 根据公司财报,台积公司在先进制程技术、特殊制程技术,以及先进封装技术的发展上持续领先全球集成电路制造服务领域,2019年的市场占有率为52%。台积公司总体营收以地区划分(主要依据客户营运总部所在地),来自北美市场的营收占台积公司总体营收的60%、日本与中国大陆以外的亚太市场占9%、中国大陆市场占20%、欧洲、中东及非洲市场占6

吴建明wujianming_110117 1900

二级指针和二叉树创建的问题

二叉树创建为什么要用到到二级指针的问题

Xb_74jfDGg83的博客 486

Java开发者必看:如何快速对接七大主流快递API(附完整代码示例)

本文为Java开发者提供了快速对接顺丰、京东、DHL等七大主流快递API的实战指南。文章深入剖析了不同API的认证、通信协议与参数差异,并提供了高可用的HTTP客户端配置、通用签名工具、SOAP请求处理以及可扩展的领域模型与适配层设计等完整代码示例,帮助开发者构建统一、健壮的物流集成框架,显著提升开发效率。

tech5的博客 727

二级指针的使用——二叉树的创建

二叉树的创建 typedef struct node { char data; struct node *lchild, *rchild; }Node,*pNode;创建形式一:int buildTree(pNode &T) { char data; cin >> data; if (data == '#') T = NULL; else{ T = (pNode)mall

zouyenan的专栏 1410

论文阅读------Exposure Fusion: A Simple and Practical Alternative to High Dynamic Range Photography

Mertens T, Kautz J, Van Reeth F. Exposure fusion: A simple and practical alternative to high dynamic range photography[C]//Computer graphics forum. Oxford, UK: Blackwell Publishing Ltd, 2009, 28(1): 161-171. 摘要 本文提出了一种将包围曝光的序列融合到高质量图像中的技术,而无需先转换为高动态范围(HD.

qq_25283239的博客 3395

从DeepMimic到虚拟偶像:用动作捕捉数据训练AI跳舞的完整流程(附Blender插件配置)

本文详细介绍了如何利用DeepMimic的深度强化学习框架,将动作捕捉数据转化为虚拟偶像或游戏角色的舞蹈动作。从核心的模仿学习理念、PyBullet环境搭建、策略网络与奖励函数设计,到数据处理、训练技巧(如参考状态初始化),最后讲解了如何将训练好的AI模型集成到Blender和Unity等工具中,实现从数据到实时驱动角色的完整流程。

weixin_29054399的博客 501

二叉树为什么用二级指针来构造的原因

我觉得二叉树的构造是最难理解的,其他的还好说。先说说我对构造二叉树的理解吧。从某种角度来说,二叉树也是一种单链表,上一个结点记录下一个结点的地址。他们的区别就在于二叉树的上一个结点可能记录多个下一结点的地址(最多2个),而单链表是只记录一个。单链表是这样定义的: 二叉树是这样定义的: struct Node struct Node {

The poor student 8776

【DRAM存储器五十一】LPDDR5介绍--DFE与Pre-Emphasis

简述LPDDR5的DFE和预加重应用设置

highman110的博客 703

使用一级/二级指针创建二叉树(两种角度详解二叉树建立及二级指针)

目录二级指针是什么???二叉树的创建 二级指针是什么??? 可以先通过以下代码感知一下二级指针是什么? int main(){ int arr[5] = {1, 2, 3, 4, 5}; int* parr = &arr[0]; //也可以直接写数组名arr int* *pparr = &parr; //二级指针,指针的指针,一般希望修改函数中的指针时会用到 printf("%d\n", *(arr + 3)); //arr[3] print

gary101818的博客 2360

假新闻检测论文分享(30)MMDFND: Multi-modal Multi-Domain Fake News Detection

现有的假新闻检测方法通常集中在单一领域的新闻上,如健康或政治。然而,社交媒体上的新闻往往来自多个领域,这给单一领域的假新闻检测方法带来了两个主要挑战:数据稀缺性:处理较小、单一领域的新闻数据集时,由于训练数据的稀缺,模型的有效性显著下降。跨领域检测的准确性下降:单一领域的假新闻检测方法在跨领域新闻数据集上的准确性大幅降低。缓解领域间模态语义偏差:通过DPLE网络提取跨领域和领域特定的知识,缓解了不同领域间文本和图像的语义差异。

weixin_41964296的博客 668

cursor AI代码编辑器IDE对接deepseek模型api;字节ai编辑器trae

参考: https://www.cursor.com/ https://platform.deepseek.com/https://www.cursor.com/下载安装后,注册账号登录即可 再高级里选择设置 再模型这注册模型: 模型名称一定要填正确,url地址填好,最后填上秘钥验证

weixin_42357472的博客 1万+

二级指针实现二叉树的构造以二叉树的三种递归遍历具体代码实现

二级指针实现二叉树的构造 首先二级指针作为函数参数的作用:在函数外部定义一个指针p,在函数内给指针赋值,函数结束后对指针p生效,那么我们就需要二级指针。不懂没有关系,继续往下看~加油! 在如上的A指向B、B指向C的指向关系中,如果A、B、C都是变量,即C是普通变量,B是一级指针变量,其中存放着C的地址,A是二级指针变量,其中存放着B的地址,则这3个变量分别在内存中占据各自的存储单元,它们之间的...

我是没有梦想的小白 556

9篇3章7节:基于 R 语言的 FAERS 数据提取与合并

本文主要探讨了 FAERS 数据提取与合并的操作流程。首先,通过程序化方法从本地存储的 FAERS ASCII 文件中提取指定季度或范围内的单药报告数据,并可通过参数设置控制数据存储位置、处理方式、计算资源分配以及报告者职业类别等。随后,通过批量读取的方式对多个季度的 DRUG 文件进行循环处理,并将其合并为一个综合数据框。

MD Code 1261

构建线索二叉树的思考——指针的引用与二级指针

其实在算法执行过程中,两个指针的 作用不同,p是用于对节点进行操作的,在传参过程中传递节点的地址即TBTNode *p就可以了,而pre是用于记录当前节点p的前驱节点的,在整个递归过程中是唯一存在的,不是且不能随着一个函数的调用的返回而复原,如果不使用引用,那么在递归调用过程将随着当前递归调用的函数结束而返回上次指向的节点,pre将永远不能移动,我们为了让其在函数递归的过程中传递的永远都是这个指针而不是递归栈中函数复制参数创造的临时的pre所以我们要通过引用保证其唯一性。

m0_62409781的博客 439

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

数据结构--二级指针实现二叉树的先序建立和遍历

1.代码 #include"00_state.h" //二叉排序树的节点结构定义 struct BinTreeNode { char data; struct BinTreeNode *lchild, *rchild; }; typedef struct BinTreeNode BinTreeNode; typedef struct BinTreeNode * BinTreePtr; /* *先序建立二叉树 *ABC##DE#G##F### *ab##c## *输入时候每次输入上

qq_43534244的博客 651

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

二叉树建立过程中遇到的二维指针问题

问题参考严蔚敏版数据结构 问题描述: 如果采用书上伪代码使用&T,那么在T=NUll那编译器会进行报错,我采用的软件是visual studio2022 这样也不行 红色波浪线表示出错,上面图片报错信息:没有与这些操作数匹配的"*“运算符,操作类型为**BiTNode。下面图片报错没有与这些操作数匹配的”="运算符,操作类型为BitNTree=int; 原因分析:&符号代表取地址,意味着L现在是一个 ...

GUANHANG2002的博客 597

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

二叉树创建的两种方法(一级指针和二级指针)

二叉树的创建

weixin_63785984的博客 798

关于二叉树的创建(二级指针法和一级指针法)

新手一枚,有问题请指正。 这几天在学习二叉树,单单是创建这里就很迷惑,为什么要用二级指针这一说法,这个问题我谈一下我的看法与感受,其中一些看法是关于我当时在写的时候的困惑点(我是参照《大话数据结构》这本书来学习的,正在学习c++,可能有些语法还不够熟练,请指正) 首先定义结构 typedef struct TreeNode{ int data; struct TreeNode * Lchild; struct TreeNode * Rchild; }tnode; typedef struct

weixin_43905172的博客 1799

彻底理解链表中为何使用二级指针或者一级指针的引用

在用c/c++写数据结构程序时,链表和二叉树中经常需要用到二级指针或者一级指针的引用,那么什么时候用什么时候不用呢? 先看一个简单的c++链表操作程序: (虽然风格有点像c,不过这个是cpp文件,不要在意这些细节) [cpp]view plaincopy /* code:Linklist author:tashaxing

踏莎行的博客 1万+

C/C++中二级指针的理解

以前在学习数据结构的时候一直没弄懂函数参数里面传递 ** p 以及使用 &amp;的含义,这里摘抄了一小段文章方便理解。不懂的时候再看看这几段代码。 指针参数是如何传递内存的? 如果函数的参数是一个指针,不要指望用该指针去申请动态内存。见如下例子: void GetMemory(char *ip, int num) {  ip = (char *)malloc(sizeof(char...

雷利风行 376

销毁二叉树

/*遍历是将节点数据元素找出来,同样利用便利的思想,也可以将节点指向的内存空间释放掉。这里需要注意的问题时,释放的先后问题,根节点必须在左子树和右子树的后面释放,因此,利用后续遍历的方法可以释放掉二叉树中多有节点的存储空间。*/ void BTreeSetNull(BTree *tree) { if(tree==NULL) { return; } BTreeSetNull(tree->left); BTreeSetNu

进阶的小宋 2431

C/C++二级指针的三种模型(一)

C/C++二级指针的三种模型的三种模型之一是,先给出来,下次在进行具体研究 void printfArr(char **arrayPtr, int nLength) { int i = 0; for (; i { printf("%s\n", arrayPtr[i]); } } void sortArrayStr(char **arrayPtr, int n

HelloNiGeSB的博客 3071

c语言 二叉树创建二级指针字符串,二叉树 二级指针

vec_reduce_add 功能说明 对所有输入数据求和。 数据采用二叉树方式,两两相加。 假设源操作数为256个float16的数据[data0,data1,data2...data255],两个repeat可以计算完,计算过程如下。 [data0,data1,data2..vec_reduce_add 功能说明 对所有输入数据求和。 数据采用二叉树方式,两两相加。 假设源操作数为256个fl...

weixin_42550750的博客 284

C++学习总结_为什么要使用指针

一、为什么要使用指针?c或c++在操作大型数据和类使可以通过指针直接访问内存地址访问数据,从而达到直接操纵数据的效果。这样效率很高,而且在很大程度上节省了变量赋值等一系列冗繁的代码片段。二、指针的三大用途1、处理堆中存放的大型数据2、快速访问类的成员数据和函数3、以别名的形式向函数传递参数三、数据在内存中的存放形式(主要有六种)先介绍两种最主要的两种1、栈区:由编译器自动分配且释放,该区一般存放函数的参数值和局部变量2、堆区:一般由程序员分配和释放,程序员不释放,程序结束后由操作系统自动回收、释放。

Dean_Deng的专栏 6157
上一篇: 想做这样一个签到划卡型的小程序
下一篇: C/C++的编译过程中到底发生了什么?
十方魔
博客等级 码龄10年 202粉丝 93原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值