数据结构-第2章学习小结

第二章小结

一、本章内容的小结如图

二、心得体会

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 ;
    }
    
}
View Code

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

四、接下来的目标:

没事多打代码,这样才能真正学会链表;多抽点时间先预习后面的学习内容,好好学好接下来的章节。努力!加油!

原文地址:https://www.cnblogs.com/Madge/p/12637904.html