指针,经典算法的利器

本文探讨了C++中的指针作用,从静态结构下的二维数组输出比较,到动态结构下如何利用指针操作动态数组和链表。动态数组通过指针实现了空间的有效利用,避免了预估大小的问题。而在链表中,指针简化了插入元素的过程,无需大规模数据迁移。文章以实例阐述了指针在动态数据结构中的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引言

刚接触C++语言的时候,我本人曾经产生过困惑:指针的用途是什么?为什么我感觉他只是在书写上更复杂呢?

虽然不清楚别人有没有类似的问题,但是,对于一个只了解静态结构数组的人来说,有这样的疑惑完全不奇怪。

现在我认为,指针的独一无二之处在于他打开了动态结构的大门。


​一、静态结构下的指针

假如我们用输出一个矩阵中所有的entries:

以一个二维数组举例(a[m][n]):(有一些较短的代码手动输入,不打分号)

一般方法:int a[m][n]

                 for(i=0;i<m;i++)

                 for(j=0;j<n;j++)

                 cout<<a[i][j]     可见,一个简单的二重循环就可以完成按行输出的。

指针方法:我们创建一个指针数组,存放行指针,然后按照行输出数组,

 由此观之,在静态结构内,指针没有减少我们的工作,反而使得定义内容更加复杂!


二、动态结构下的指针

我们先谈谈动态数组,再从数组到链表,再谈谈插入算法的实现

1.动态数组

int *p;int n=0,b

p=new int [n]

do{cin>>b

p[n++]=b}while(未知控制条件)

动态数组就像一条贪吃蛇,每吞下一个元素就让自己变得更长,这就巧妙地起到了节约空间的效果。我不必要先估算上界,然后开一个巨大的数组,而是通过控制条件的自定义,在适当的时候结束空间申请,不需要担心爆空间。

2.链表

单链表就是一个结构体自引用组合,每个结构体变量内的成员既含有自己的数值,也含有一个next指针,指向下一个结构体变量,也就是链表的下一环。

这种强大的数据结构无疑建立在指针的基础上,没错吧~

以实现插入元素算法为例:

一般的一个数组,要先申请一个更大的数组,然后分两段转移原来的数据,最后插入新元素,这个过程影响了数组中所有的元素。

而链表只要把i-1号元素的next指针指向插入者,而把插入者的next指针指向i位,那就结束了~

代码实现:

 操作指针就是操作链表的顺序与内容,不用具体的门牌号,从而简化了流程。


the end

参考资料:信息学奥赛一本通(C++版)(第五版)

活动地址:优快云21天学习挑战赛

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值