第二章学习小结
数据结构第二章的学习结束了,了解了顺序表,单链表的建立,插入,删除,查找的算法,以及对它们时间复杂度,空间复杂度的分析。学会区分头指针,头结点和首元结点。
前插法,后插法创建单链表,相比之下,我觉得后插法比较好理解。双向链表就是那个表示被处理结点的前驱的后继(p->prior->next),结点的后继的前驱(p->next->prior)要区分开。
作业,说实话,一开始的时候,我真的很懵,书上的算法描述,我可以看的很明白,同时也感到很奇怪,甚至还一度认为那是可以敲上电脑进行编译运行的,不过在询问同学之后,我也开始清晰了。
有一个很大的问题就是,在做单链表那道题时,明明感觉很简单,就是做不出来一开始。因为我没有搞清楚LNode,LinkList两个的区别,后来慢慢从编译结果中摸索,看书,才明白LNode是结构体类型,LinkList是指针类型(我把两个搞混了,也可以说是看书不认真,还有之前基础没打好)然后LNode*也可以定义指针变量。弄清楚之后题就做出来了,当然还有一些细节要抠。
做实践题的时候,我一开始没有想到sort函数,但是我用了选择排序,也将数组排序了,就是后面的存入第三方数组那里我搞不清楚,用了for循环,但没做出来。后来也听老师讲了那个并集的那个想法,其实我脑子里是没有想清楚的,但也大概知道个方向,后来也是问了同学才知道要怎么做去实现,当然,因为我在用while 循环前,没有将,i,j重新置0,导致我一直做不对,还好老师提醒,不然真的不知道怎么改。现在我也知道用for循环怎么去实现那部分了。其实很简单,只是它的时间复杂度为O(m*n).
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
if(a[i]==b[j])
{
c[sum]=a[i];
sum++;
}
}
}
算法时间复杂度的考虑,我还不是很熟,想一想就立马说出口。如果是绕一点的算法,我可能要想好久。
困难:自己的指针部分没有学很好,还有结构体部分需要再回去翻翻C++。就是链表里的结点表示,双链表的前驱后继,我还要区分清楚一点,以及对算法时间复杂度的计算要熟练一点。还有就是我没有将那些很好的算法描述记住,下一次用到的话,就写不出来,所以就是要多看看书,把它记住了。
目标:把自己的作业,代码打好打对。将课程里的内容,课堂讲的内容能够很好的吸收,进行复习,将遗留问题解决。还有能够做好作业,并有另一种想法再去实现某一部分算法。