您的位置:首页 > 理论基础 > 数据结构算法

递归 内存分配 指针

2012-10-20 22:41 183 查看
http://blog.csdn.net/changbaolong/article/details/6928140

最近写了一些代码,但从编程的角度看,遇到问题最多的就是递归、内存的动态分配以及指针的问题。下面作些简单的理解:

1、递归

这块内容是我比较薄弱的一块,谈下个人简单的理解,希望有人给予一些建议。

   首先,从递归的种类来说,可以分为四块:

       a)定义是递归的,如 n!=n*(n-1)!或1等;

       b)数据结构是递归的,如链表、树等;

       c)问题的解法是递归的,如汉诺塔等;

       d)回溯法或试探法可以选用递归法,如求解迷宫问题、图的深度优先遍历等。

   其次,第四块内容,也可以选择借助栈进行解决,但是用递归的方法更方便,也更容易理解。第四块内容,也可以归结到第三块内容,但是,其非常经典,所以就把他单独列出。

   关于第三块内容,重要的是对问题的分析要透彻,到底可以不可以用分治法,递归能不能求出所有的解。

2、内存的动态分配、指针

   c++中的内存动态分配是由操作符new和delete来完成的。用了很久,最近才发现,他们俩个亲兄弟对c++的贡献有多大。大家也看到了,我把内存的动态分配和指针放在一个地方来讲,因为二者之所以强大,是和他们一起使用离不开的。

   new一个对象,对象无论是全局变量还是局部变量,只要保存了对象的指针,并且未用delete删除该对象(当然更不能用其他方法删除),那么,在任何地方,都可以用该对象指针访问该对象;这样只需要操作对象指针就可以达到操作对象的目的,从而避免了传递对象、修改对象等操作产生的问题。但是要注意指针的使用,如果指针作为形参,并且在函数内部需要修改指针,那么该指针就要按引用的方式调用指针,否则,无法真正的修改指针。

   delete一个对象,系统就会自动调用该对象的析构函数,所以只需要在对象的析构函数中删除分配的内存即可,而不需要自己用free去删除自己分配的内存。这种方法可以有效地避免内存泄露。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  delete 数据结构 编程 c