首页 > 编程知识 正文

线性表的合并代码,数据结构两个链表合并排序

时间:2023-05-06 00:37:20 阅读:159897 作者:235

两个链表的开头节点分别是La、Lb

另一方面,调查将Lb中La上没有的所有数据要素插入到La中的intlocateelem(list*head,int e )//链表中是否有数据域为e的节点,如果有,则返回1,否则为0 llocateee while(p ) ) if ) p-data==e ) return 1; } return 0; }voidinsertelem(list*head,int e )//插头法list*p=(list* ) malloc (sizeof ) list ) ); p-data=e; p-next=head-next; 头下一个=p; }voidunionlist(list*la,List *Lb ) /线性链表集成int e; List *p=Lb-next; while(p ) { e=p-data; if (! locateelem(la,e ) (insertelem ) la,e ); p=p-next; )二、可以重复将两个非递减线性链表La、Lb合并为一个新非递减线性表元素

算法思想: (1)制作空的链表Lc,(2)从La和Lb中依次提取较小的节点并插入到Lc表的最后,直到某一个成为空的表位置为止,(3) La或Lb中还留有要素的节点由于都是非降序链表,所以使用末尾插入法List *Lc; Lc=pc=La; 利用La的头节点作为//LC的头节点pa=La-next; pb=Lb-next; while(PAPB ) if ) pa-data=PB-data ) { pc-next=pa; pc=pc-next; //PC更新指向Lc的端节点pa=pa-next; } else{ pc-next=pb; pc=pc-next; pb=pb-next; } } pc-next=pa? pa:pb; //将剩下的要素插入到LC末尾的free(lb )中; 返回LC; (3)将二的要求改为将两个非递阶线性表合并为一个非递阶线性表算法思想时,只需将二中的编码改为对Lc进行插头法,即每次回头节点后的第一个位置插入La和Lb中的小元素,最后将剩下的元素依次LLC

四、将两个不重复的增量链接列表合并为一个不重复的增量链接列表与上面的二维码相似,但增加了相等的判断条件

list*linklist(list*la,List *Lb ) list*pa,*pb,*pc; List *Lc; Lc=pc=La; pa=La-next; pb=Lb-next; while(PAPB ) if ) pa-dataPb-data ) { pc-next=pa; pc=pc-next; pa=pa-next; }elseif(pa-dataPb-data ) { pc-next=pb; pc=pc-next; pb=pb-next; (else(/相等时为pa=pa-next; pb=pb-next; pc=pc-next; } } pc-next=pa? pa:pb; free(lb; 返回LC; }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。