链表操作一【合并链表】【严蔚敏】
来源:互联网 发布:linux 解压war包 编辑:程序博客网 时间:2024/06/05 19:17
struct SqList { ElemType *elem; // 存储空间基址 int length; // 当前长度 int listsize; // 当前分配的存储容量(以sizeof(ElemType)为单位) };
void MergeList(SqList La,SqList Lb,SqList &Lc) // 算法2.2 { // 已知线性表La和Lb中的数据元素按值非递减排列。 // 归并La和Lb得到新的线性表Lc,Lc的数据元素也按值非递减排列 int i=1,j=1,k=0; int La_len,Lb_len; ElemType ai,bj; InitList(Lc); // 创建空表Lc La_len=ListLength(La); Lb_len=ListLength(Lb); while(i<=La_len&&j<=Lb_len) // 表La和表Lb均非空 { GetElem(La,i,ai); GetElem(Lb,j,bj); if(ai<=bj) { ListInsert(Lc,++k,ai); ++i; } else { ListInsert(Lc,++k,bj); ++j; } } while(i<=La_len) // 表La非空且表Lb空 { GetElem(La,i++,ai); ListInsert(Lc,++k,ai); } while(j<=Lb_len) // 表Lb非空且表La空 { GetElem(Lb,j++,bj); ListInsert(Lc,++k,bj); } }
void MergeList(SqList La,SqList Lb,SqList &Lc) // 算法2.7 { // 已知顺序线性表La和Lb的元素按值非递减排列。 // 归并La和Lb得到新的顺序线性表Lc,Lc的元素也按值非递减排列 ElemType *pa,*pa_last,*pb,*pb_last,*pc; pa=La.elem; pb=Lb.elem; Lc.listsize=Lc.length=La.length+Lb.length;//不用InitList()创建空表Lc pc=Lc.elem=(ElemType *)malloc(Lc.listsize*sizeof(ElemType)); if(!Lc.elem) // 存储分配失败 exit(OVERFLOW); pa_last=La.elem+La.length-1; pb_last=Lb.elem+Lb.length-1; while(pa<=pa_last&&pb<=pb_last) // 表La和表Lb均非空 { // 归并 if(*pa<=*pb) *pc++=*pa++; else *pc++=*pb++; } while(pa<=pa_last) // 表La非空且表Lb空 *pc++=*pa++; // 插入La的剩余元素 while(pb<=pb_last) // 表Lb非空且表La空 *pc++=*pb++; // 插入Lb的剩余元素 }
void MergeList(SqList La,SqList Lb,SqList &Lc) { // 另一种合并线性表的方法(根据算法2.7下的要求修改算法2.7) ElemType *pa,*pa_last,*pb,*pb_last,*pc; pa=La.elem; pb=Lb.elem; Lc.listsize=La.length+Lb.length; // 此句与算法2.7不同 pc=Lc.elem=(ElemType *)malloc(Lc.listsize*sizeof(ElemType)); if(!Lc.elem) exit(OVERFLOW); pa_last=La.elem+La.length-1; pb_last=Lb.elem+Lb.length-1; while(pa<=pa_last&&pb<=pb_last) // 表La和表Lb均非空 switch(comp(*pa,*pb)) // 此句与算法2.7不同 { case 0: pb++; case 1: *pc++=*pa++; break; case -1: *pc++=*pb++; } while(pa<=pa_last) // 表La非空且表Lb空 *pc++=*pa++; while(pb<=pb_last) // 表Lb非空且表La空 *pc++=*pb++; Lc.length=pc-Lc.elem; // 加此句 }
void MergeList(LinkList La,LinkList &Lb,LinkList &Lc)// 算法2.12 { // 已知单链线性表La和Lb的元素按值非递减排列。 // 归并La和Lb得到新的单链线性表Lc,Lc的元素也按值非递减排列 LinkList pa=La->next,pb=Lb->next,pc; Lc=pc=La; // 用La的头结点作为Lc的头结点 while(pa&&pb) if(pa->data<=pb->data) { pc->next=pa; pc=pa; pa=pa->next; } else { pc->next=pb; pc=pb; pb=pb->next; } pc->next=pa?pa:pb; // 插入剩余段 free(Lb); // 释放Lb的头结点 Lb=NULL; }
0 0
- 链表操作一【合并链表】【严蔚敏】
- 合并链表操作
- 链表基本操作—逆置 合并
- 有序链表的合并操作
- 表操作-合并列
- 链表常见操作:有序链表合并去重
- 链表常用操作 (定义,创建,反转,合并,交叉)
- 合并两个已有序(升序)链表的操作!
- 创建循环双链表,并进行两个链表合并操作
- 每日一题之合并有序链表,合并后任有序
- 每日一题(7) - 合并两个有序链表
- 合并两个有序链表——题集(一)
- 每日一题——链表合并
- 有序链表合并&有序数组合并
- 定长顺序表--合并操作
- 数据结构--顺序表合并操作
- 有序链表合并
- C++合并链表
- Unity之Tango运动跟踪(二)
- js数据结构与算法----栈与队列
- 图片上传(Base64)
- hibernate中的cascade属性
- 常见的一些C#开源框架或者开源项目
- 链表操作一【合并链表】【严蔚敏】
- 天数计算
- win10系统下配置免安装MySQL【可以生成data文件夹,亲测】
- 最短路-Dijkstra算法
- java连接Oracle数据库
- 题目1385:重建二叉树
- hibernate中的inverse属性
- 54.性能调优之调节数据本地化等待时长
- DCM与PLL