`
ackerman
  • 浏览: 72717 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

带头结点有序单链表的合并

 
阅读更多

typedef int Item;
typedef struct node
{
        Item item;
        struct node *next;
}Node,*List;

void merge1(List la, List lb, List *lc)
{
        Node *pa,*pb,*pc;
        pa=la->next;
        pb=lb->next;
        pc=(*lc)=la;
        while(pa && pb){
                if(pa->item <= pb->item){
                        pc->next=pa;
                        pc=pa;
                        pa=pa->next;
                }else{
                        pc->next=pb;
                        pc=pb;
                        pb=pb->next;
                }
        }
        pc->next=pa?pa:pb;
        free(lb);
}

/*two non-headnode list merge*/
List __merge(List la, List lb)
{
        List lc;
        if(la==NULL)
                return lb;
        if(lb==NULL)
                return la;
        if(la->item <= lb->item){
                lc=la;
                lc->next=__merge(la->next,lb);
        }else{
                lc=lb;
                lc->next=__merge(la,lb->next);
        }

   return lc;
}
List merge2(List la, List lb)
{
        if(la->next==NULL){
                free(la);
                return lb;
        }
        if(lb->next==NULL){
                free(lb);
                return la;
        }
        List lc=malloc(sizeof(Node));
        lc->next=__merge(la->next,lb->next);
        free(la);
        free(lb);
        return lc;
}
 
分享到:
评论

相关推荐

    设ha和hb分别是指向两个带头结点:两个有序链表的合并

    设ha和hb分别是指向两个带头结点的非递减(递增)有序单链表的头指针。要求设计一个算法,将这两个有序链表合并成一个非递增(递减)有序的单链表。要求结果链表仍使用原来两个链表的存储空间,不另外占用其它存储...

    设ha和hb分别是两个带头结点的非递减有序单链表的表头指针

    设ha和hb分别是两个带头结点的非递减有序单链表的表头指针,试设计一个算法,将这两个有序链表合并成一个非递减有序的单链表。要求结果链表仍使用原来两个链表的存储空间,不另外占用其他的存储空间。表中允许有重复...

    陈越、何钦铭-数据结构作业2:顺序链表合并

    本题要求实现一个函数,将两个...L1和L2是给定的带头结点的单链表,其结点存储的数据是递增有序的;函数Merge要将L1和L2合并为一个非递减的整数序列。应直接使用原序列中的结点,返回归并后的带头结点的链表头指针。

    数据结构实验——单链表

    2、掌握单链表的插入、删除、查找、求表长以及有序单链表的合并算法的实现 二、实现内容 1、单链表基本操作的实现 在带头结点的单链表h中第i个数据元素之前插入一个数据元素x ,首先需要在单链表中寻找到第i-1个结点...

    链表,建立链表、遍历链表、排序、去重、反转。。。。

    利用算法5建立两个非递减有序单向链表,然后合并成一个非递减链表。 (7).利用算法1建立的链表,删除链表中的重复元素。 (8).利用算法1建立的链表,实现将其分解成两个链表,其中一个全部为奇数,另一个全部为偶数...

    实验二 单向链表的有关操作.cpp

    1.随机产生或键盘输入一组元素,建立一个带头结点的单向链表(无序)。 2.遍历单向链表。 3.把单向链表中元素逆置(不允许申请新的结点空间)。 4.在单向链表中删除所有的偶数元素结点。 5.编写在非递减...

    线性表 实验报告.docx

    参考实验指导书“实验题 5:删除有序单链表中所有大于 mink 且小于 maxk的元素”。 选题7:(中等)删除单链表中多余元素。 完成习题集中的算法并编程实现:2.20。参考课件“chap002线性表习题讲解.ppt”2.20。 已知...

    单链表的操作实验.zip

    (一)单链表的定义及基本操作 (1)用带表头的链表存放输入的数据,每读入一个数,按升序顺序插入到链表中,链表中允许两个结点有相同...请写出并在计算机上实现将这两个链表合并为一个带头结点的有序循环链表的算法。

    将两个链表的合并实验报告

    合并两个链表:设A与B分别为两个带有头结点的有序循环链表(所谓有序是指链接点按数据域值大小链接,本题不妨设按数据域值从小到大排列),list1和list2...请写出将这两个链表合并为一个带头结点的有序循环链表的算法。

    链表的操作(数据结构课程设计)

    设有两个带头结点的有序单循环链表A、B,将其合并为一个带头结点的新的有序单循环链表C, 原来的有序单循环链表A、B仍然保持不变。 实现要求: ⑴ 建立有序单循环链表模块,数据从键盘输入且是任意顺序,进行排序使...

    数据结构实验——链表

    (2)将两个循环单链表合并为一个循环单链表,其头指针为LA。 六)单链表应用 建立一个带头结点的线性链表,用以存放输入的二进制数,链表中每个结点的data域存放一个二进制位,并在此链表上实现对二进制数加1的运算...

    数据结构应用题.docx

    写一算法,将带头结点的有序单链表A和B合并成一新的有序表C。 (注:不破坏A和B的原有结构) 答:Merge(Linklist A, Linklist B, Linklist &C ) void Merge(Linklist A, Linklist B, Linklist &C) { C=(Linklist)...

    数据结构实验

    构造两个带有表头结点的有序单链表La、Lb,编写程序实现将La、Lb合并成一个有序单链表Lc。 合并思想是:程序需要3个指针:pa、pb、pc,其中pa,pb分别指向La表与Lb表中当前待比较插入的结点,pc 指向Lc表中当前最后...

    《数据结构 1800题》

    有序表 D. 单链表 二、判断题 1. 数据元素是数据的最小单位。( ) 【北京邮电大学 1998 一、1(2分)】【青岛大学 2000 一、1 (1分)】 【上海交通大学 1998 一、1】 【山东师范大学 2001 一、1 (2分)】 2. ...

    南理工初试试题

    2.(8分)设在一个带头结点的双向链表中,所有结点的数据元素按值递增顺序排列,写一算法,删除表中所有大于min,小于max的元素(若存在)。双链表的定义如下: typedef struct DLnode{ int data; DLnode *pre, *...

    数据结构报告c++代码+截图

    1、随机产生或键盘输入一组元素,建立一个带头结点的单向链表(无序)。 2、遍历单向链表(显示)。 3、把单向链表中元素逆置(不允许申请新的结点空间)。 4、在单向链表中删除所有的偶数元素(值为偶数)结点。 5...

Global site tag (gtag.js) - Google Analytics