回锅DS-3:基本操作与指针体验

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sxhelijian/article/details/85774719

(本系列出自一位在工作后“回锅数据结构”且坚持写学习反思的网友。他用邮件发给我,征得他的同意,我在我的博客中当“原创”连载发出来。和我的关联是,他的学习路线中,的确有我提供的方法的影子。)

贺老师,现在在看您的数据结构教程视频,系统的学习数据结构。

1.知识迁移的能力锻炼好,这也许就是那些所谓学啥都快的原因吧。数据结构B=(D,R),D是数据元素的集合,R是D上二元关系的集合,讲完后接着就是实践-城市表的逻辑结构表示:City=(D,R),D={},R={}。这种方式就是让人不能懒惰。
  精华的东西却又看似很简单。
  把基础操作实现了,形成算法库。
  不要只看,要思考加工,c语言中的typedef struct和Java中的class一样。
  数组和顺序表、链表不一样。它们二者基于数组实现。
  要养成学完就要用上的习惯,虽然函数里只是简单的一句话在代码中直接写也行,但是要养成这种函数堆砌的习惯。

2.线性表的基本操作学完以后,就是应用。第一个应用删除线性表中所有值为x的元素。自己首先想到的是i=LocateElem(L,e);ListDelete(L,i,e);但是第一次删除后自己就不知道咋办了,想着用递归,这是自己的思考过程,完全是很混乱的过程。
  视频中的解法while(i=LocateElem(L,e)>0)ListDelete(L,i,e);
  while条件循环。for次数循环。善于用while。
  多个指针移动,这一遍更精细了,具体怎么移动,如何操作,操作后每个指针如何移动。
  以前操作在脑海里都是模模糊糊的,这次能不能清清晰晰的。讲到哪一块,学懂哪一块,可以有疑问,但是不能被疑问疑惑。
  一说next,都是指针,以前一说那个结点,直接就用字母标上了,以为字母就是结点。现在明白一说那个结点,这个字母代表的是指针,指向这个结点的指针。
  一个指针指向一个结点,指针和结点是共生的,伴随出现的。并不是只有一个指针存活。申请完空间返回一个指针,这个指针指向这个结点,就像java中的引用一样。所以不要疑惑,申请了一个指针,怎么可以指向一个结点呢。多少年来,原来学的一直是错的,多少知识都是被自己模模糊糊的学了。结点包括指针,这是一个整体,而不是自己以前认为的头指针、头结点是分离的,没有关系的。
  学完只是一个开始,要用得上,找到用武之地。
  算法不要怕麻烦,要画出一个清晰的路线。
  对于拆分单链表的应用,自己的想法能粗略的实现(首先根据L定义了三个相邻的变量),但是初始化条件不能保证成立,而且结束条件不能很好的进行判断。贺老师的解法,开始定义比较少的变量,这样利于判断结束条件,其他变量的初始化在循环体中定义。
   1.找到循环体
   2.初始化需要初始化的变量(循环体外初始化的变量应该尽可能少吧?),其他的放到循环体里初始化
   3.确定结束条件。要用纸和笔画出一个清晰的思路,别无他法。

猜你喜欢

转载自blog.csdn.net/sxhelijian/article/details/85774719