设有两个线性表A和B皆是单链表存储结构。同一个表中的元素各不相同,且递增有序。写一算法,构成一个新的

2020-07-20 科技 184阅读

这个问题就是剔除A中的B元素,最朴素的算法就是遍历A,逐个判断是否在B中,算法复杂度为O(n*m),若用二分查找的话,就是O(n*logm),显然效率低下。

考虑到A,B中元素都是有序的,对A中第一个元素,在B中找到第一个不比它小的元素,若两者相等,则该元素剔除,否则加入到c中;对A中下个元素,重复该过程,一直到A或B某一个比较完。算法复杂度为O(n+m)。

struct Node {
    int num;
    struct Node *pNext;
};
typedef struct Node *List;
List chaji( List a, List b)
{
    List c = NULL;
    
    while ( a != NULL && b!= NULL)
    {
        while ( a->num > b->num)
            b = b->pNnext;
        if ( a->num < b->num)
        {
            if (c == NULL) 
                c = malloc(sizeof(struct Node));
            else
            {   
                c->pNext = malloc(sizeof(struct Node));
                c = c->pNext;
            }
            c->num = a->num;
            c->pNext = NULL;
         }
         a = a->pNext;
     }
     
     return c;
}
声明:你问我答网所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系fangmu6661024@163.com