第二章小结
一、本章内容的小结如图
二、心得体会
1.完成作业或实践:
一开始自己没办法打出完整的代码,总会漏了这漏了那的,总要在慕课或者课本看看学习得怎么打,然后打完整个代码运行后还是有问题但是又找不出就找同学帮忙,挺有帮助的。多打代码多借鉴的多对比自己与别人的代码,话慢慢的就熟悉了一点套路,感觉会好很多。
然后觉得,打代码,最重要的还是理解题意,花多点时间也值得,不然就是做无用功。比如实践1的7-1“零多项式应输出0 0”我就没理解好导致代码出错
实践2,7-1的心得是交集的话,跟数学还是有点区别的,输出的结果还是非降序可以重复的,比如5 5 -1/5 5 6 -1 输出结果是5 5 而不是5。
实践2,7-2的要求合并后新表不含重复元素,我的合并代码如下,想知道还能怎么简化
void MergeList(LinkList La, LinkList Lb , LinkList &Lc) { //pa,pb指向待比较结点,初始化为指向首元结点 LNode *pa = La->next ; LNode *pb = Lb->next ; LNode *pc = Lc ;//利用尾插法,pc指向待建的单链表的最后一个结点,初始化指向头结点 while(pa && pb) {//当p或q为空时退出循环 if( pc->data==pa->data || pc->data==pb->data) {//三种情况下要更新pa、pb( pc->data==pa->data、pc->data==pb->data、pc->data==pa->data==pb->data) if(pc->data==pa->data) pa = pa->next ; if(pc->data==pb->data) pb = pb->next ; continue ; } //给pc增加新结点 pc->next = new LNode ; pc = pc->next ; pc->next = NULL ; if(pa->data <= pb->data) {//pc结点值为pa->data if(pa->data == pb->data) pb = pb->next ;// pa->data == pb->data时pa、pb都要更新 pc->data = pa->data ; pa = pa->next ; } //if(pa->data > pb->data) else {//pc新结点值为pb->data pc->data = pb->data ; pb = pb->next ; } } while(pb!=NULL) {//复制pb剩下的结点到pc if(pb->data==pc->data) {// pb->data==pc->data时更新到下一个pb pb = pb->next ; continue ; } pc->next = new LNode ; pc = pc->next ; pc->next = NULL ; pc->data = pb->data ; pb = pb->next ; } while(pa!=NULL) {//复制pa剩下的结点到pc if(pa->data==pc->data) {//pa->data==pc->data时更新到下一个pa pa = pa->next ; continue ; } pc->next = new LNode ; pc = pc->next ; pc->next = NULL ; pc->data = pa->data ; pa = pa->next ; } }
2.小组讨论:
1)我的两个小组成员是真的棒(觉得自己运气爆棚),要好好向她们学习。
第一次小组合作打代码觉得自己还是没有做好作为组长的职责,有点不够格的感觉,还要再接再厉,提高自己的题目分析、代码逻辑、代码编写还有小组合作能力。还有打字速度(笑泣.jpg)
第二次小组合作自我感觉心态上比第一次好很多,而且合作过程比较有条不紊,我们感觉自己的代码很好,然而之后才知道有一个致命错误就是创建链表函数,还好老师给了我们个机会(感谢.jpg)。
果然理解题目比什么都重要(再次敲小黑板)。这次的题目让我对链表、结构体有更深刻的认识
2)第一次小组合作老师推荐的代码中,插入函数写的真的好简洁(大拇指.jpg)
学到了“在循环体中return表示从被调函数返回到主调函数继续执行 ,return后函数就结束了后面的语句不再执行”
void InsertList(LinkList &L,int x) { LNode *p = L ; while( p->next!= NULL) { //return表示从被调函数返回到主调函数继续执行 ,return后函数就结束了后面的语句不再执行 if(p->next->data == x ) return ;//p指向结点的下一个结点等于x if(p->next->data > x ) break ;//p指向结点的下一个结点大于x p = p->next ; } //插入结点s,其data域值为x LNode *s = new LNode ; s->data = x ; s->next = p->next ;//当L为空链表时,p->next == NULL p->next = s ; }
3)两次小组互评发现好多人都没有在程序退出前回收空间,这一点要好好记住,自己下次一点不能忘
void DestroyList(LinkList L) {//回收空间 LNode *p = L ; LNode *r ; while(p) { r = p->next ; delete(p) ; p = r ; } }
三、分享
双链表、循环链表讲的比较少,所以找了一篇相关的博文,有兴趣可以看看:https://blog.csdn.net/u014799564/article/details/102920365
四、接下来的目标:
没事多打代码,这样才能真正学会链表;多抽点时间先预习后面的学习内容,好好学好接下来的章节。努力!加油!