线性表(三)--链式结构实践 (C语言实现)

怎么说呢,这一节是对上一节的补充,毕竟上一节只对定义以及概念进行了讲解,可能还会有些不太熟练,这一节之后,相信会对链式结构有更深入的理解,至少lyjgod是这样的。真的很感谢耿国华老师的课程,受益匪浅。

那么,要讲些什么呢,来试着求一求两个集合的差
由集合运算的规则可知,集合的差 A-B 中包含所有属于集合 A 而不 属于集合 B 的元素。 因此,这需要我们逐个读取集合 A 的链表 LA 中每个元素,在集合 B 的链表 LB 中进行查找,若存在 相同的元素,则从链表 LA 中将其删除。

也就是说,可以进行这样的操作:
1、指针 pre 指向单链表 LA, 指针 p 指向单链表 LA 的首元结点;
2、指针 q 指向单链表 LB 的首元结点;随后逐一访问单链表 LB 中结点,将 其与单链表 LA 中 p 指针指向的结点进行比较,如果两者相同,则删除 p 所 指向的结点,直到读完表 LB 为止。

那么来贴出代码:

void Difference(LinkList La,LinkList Lb)
{
    Node *pre,*p,*q,*r;
    pre=La;p=La->next;
    while(p!=Null)//这是按链表去除集合A中的元素
    {
        q=Lb->next;
        while(q!Null&&q->date!=p->date)//遍历集合B,观察是否在B中存在与该A元素相同的元素
           q=q->next;//如果没有则继续遍历B集合,如果有则已经跳出while循环
        if(q!=Null)//存在满足要求的结点,进行删除的操作
        {
            r=p;
            pre->next=p->next;
            p=p->next;
            free(r);
        }
        else//不存在满足要求的结点,继续遍历A集合
        {
            pre=p;
            p=p->next;
        }
   }
}

那么至此,我们已经将链式结构的基础学习完毕了,总结一下把。
进行链式操作。我们要注意以下几点:
1、访问单链表中第i个结点或者是值为e的结点时,必须从头开始,这个我在之前也提到过。
2、千万要注意头结点和尾节点的设置,不然,是要出事情滴。
3、在操作单链表的时候,要注意前后结点的关系,在进行插入删除操作的同时要注意前后结点指针的保留。

学完了链式结构。。。莫名很开心。

PS:本人比图片帅气得多,只是烘托气氛!!