数据结构算法(一)--有序线性表的合并和交集

来源:互联网 发布:匹配滤波器 矩阵算法 编辑:程序博客网 时间:2024/06/05 14:32

  线性表这一章重要的算法:合并有序线性表--> 得到一个有序的线性表

算法思路:(这里假设排列顺序为从小到大)

1.从两个链表的第一个节点开始比较分出三种情况:

               a)A > B:B入新的链表,然后向后移动一个节点

               b)A < B:A入新的链表,然后向后移动一个节点

               c)A = B:A,B都向后移动一个节点,其他要求有其他操作

        2.判断谁还有元素,讲其赋值给新的链表;

      :如果你想求交集,很简单,分出的三种情况中赋值给新链表的时候别直接将其赋值给A或B链表,而是新创一个节点,将A或B的值复制给新节点,然后在让新链表指向新节点

具体实现:

一。有序线性表的合并

Status Union(LinkList &L1,LinkList &L2,LinkList &L3){    LNode *p1 = L1 -> next;    LNode *p2 = L2 -> next;    LNode *p3 = L3 = L1;    while(p1 != NULL && p2 != NULL)    {        if(p1 -> data >= p2 -> data)        {            p3 -> next = p2;            p3 = p2;            p2 = p2 -> next;        }        else        {            p3 -> next = p1;            p3 = p1;            p1 = p1 -> next;        }    }    if(p1 != NULL)    {        p3 -> next = p1;    }    else        p3 -> next = p2;    free(L2);    return OK;}


二。有序线性表的交集

Status Inter(LinkList &L1,LinkList &L2,LinkList &L3){    ElemType t;    LNode *p1 = L1 -> next;    LNode *p2 = L2 -> next;    LinkList p3 = L3;    while(p1 != NULL && p2 != NULL)    {        if(p1 -> data > p2 -> data)            p2 = p2 -> next;        else if(p1 -> data < p2 -> data)            p1 = p1 -> next;        else        {            LinkList p;            p = (LinkList)malloc(sizeof(LNode));            if(!p)                return ERROR;            p -> data = p1 -> data;            p -> next = NULL;            p3 -> next = p;            p3 = p;            p1 = p1 -> next;            p2 = p2 -> next;        }    }    return OK;}


阅读全文
1 0
原创粉丝点击