【例2-3】 A和B是两个单链表(带表头结点),其中元素递减有序。
设计一个算法,将A和B归并成一个按元素值递减有序的链表C,C由A和B中的结点元素组成

//核心代码块
void merge(LNode *A,LNode *B,LNode *&C){LNode *p = A->next;LNode *q = B->next;LNode *s;C = A;C->next = NULL;free(B);while(p!=NULL && q!=NULL){if(p->data <= q->data){s = p;p = p->next;s->next = C->next;C->next = s;}else{s = q;q = q->next;s->next = C->next;C->next = s;}}while(p!=NULL){s = p;p = p->next;s->next = C->next;C->next = s;}while(q!=NULL){s = q;q = q->next;s->next = C->next;C->next = s;}
}
//完整程序
#include <stdio.h>
#include <stdlib.h>typedef struct LNode{int data;struct LNode *next;
}LNode,*LinkList;void init(LinkList &L){L = (LNode *)malloc(sizeof(LNode));L->next = NULL;
}void show(LinkList &L){LNode *p;p = L->next;while(p!=NULL){printf("%d ",p->data);p=p->next;}printf("\n");
}void CreateListHead(LinkList &L){int n,e;L = (LNode *)malloc(sizeof(LNode));L->next = NULL;printf("以下使用前插法创建单链表\n输入要输入元素的个数\n");scanf("%d",&n);printf("逆序输入%d个元素\n",n);for(int i=0;i<n;i++){LNode *temp = (LNode *)malloc(sizeof(LNode));scanf("%d",&e);temp->data = e;temp->next = L->next;L->next = temp;}
}void merge(LNode *A,LNode *B,LNode *&C){LNode *p = A->next;LNode *q = B->next;LNode *s;C = A;C->next = NULL;free(B);while(p!=NULL && q!=NULL){if(p->data <= q->data){s = p;p = p->next;s->next = C->next;C->next = s;}else{s = q;q = q->next;s->next = C->next;C->next = s;}}while(p!=NULL){s = p;p = p->next;s->next = C->next;C->next = s;}while(q!=NULL){s = q;q = q->next;s->next = C->next;C->next = s;}
}int main(){LNode *A,*B,*C;init(A);init(B);init(C);CreateListHead(A);CreateListHead(B);merge(A,B,C);printf("\n以下为链表A和链表B归并成一个按元素值递减有序的链表C\n");show(C);return 0;
}

【数据结构】天勤 例2-3 (单链表归并操作)二、递减相关推荐

  1. 笔试面试常考数据结构-单链表常用操作编程实现

    单链表是笔试以及面试手写代码中常考的数据结构之一.下面实现了单链表的常见操作:创建单链表.删除节点.打印单链表(包括正向打印以及逆向打印).反转单链表.找出单链表的倒数第K个节点.合并两个有序单链表等 ...

  2. java单链表输出_数据结构基础------1.线性表之单链表的创建与输出方法(Java版)...

    基础知识: 线性表(linear list),是其组成元素间具有线性关系的一种线性结构. 线性表有 ①顺序存储结构(sequential storage structure) 顺序存储结构可以简单的理 ...

  3. 数据结构学习(1):单链表

    #include<stdio.h> #include<stdlib.h> typedef struct Node { char data; Node *next; } Node ...

  4. 【数据结构】【C语言】------ 单链表

    前言 大家好,我是Abert. 这篇文章和大家分享用C语言实现数据结构中的单链表. 单链表可以看作是"拆分开"的顺序表.在顺序表的基础上,单链表做了一些优化,但同时也丧失了一些顺序 ...

  5. java实现单链表常见操作,java面试题,java初级笔试题

    写在最前面,我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家.扫码加微信好友进[程序员面试学习交流群],免费领取.也欢迎各位一起在群里探讨技术. 一. ...

  6. java实现单链表常见操作

    一.概述: 本文主要总结单链表常见操作的实现,包括链表结点添加.删除:链表正向遍历和反向遍历.链表排序.判断链表是否有环.是否相交.获取某一结点等. 二.概念: 链表: 一种重要的数据结构,HashM ...

  7. 单链表创建及代码实现对单链表的操作

    链表:链表是一个有序的列表:是以节点的方式存储的,是链式存储:其中每一个节点包含data域,next域,next域指向下一个节点:链表的各个节点不一定是连续存放的:链表分带有头节点的链表和没有头节点的 ...

  8. 【算法数据结构Java实现】Java实现单链表

    1.背景 单链表是最基本的数据结构,仔细看了很久终于搞明白了,差不每个部分,每个链都是node的一个对象.需要两个参数定位:一个是index,表示对象的方位.另一个是node的对象. 2.代码 nod ...

  9. 【Java数据结构与算法】第二章 单链表及简单面试题

    第二章 单链表 文章目录 第二章 单链表 一.单链表 1.基本介绍 2.思路 3.代码实现 二.简单面试题 1.求单链表中有效节点的个数 2.查找单链表中的倒数第k个节点(新浪面试题) 3.单链表的反 ...

  10. #数据结构:编写不带头结点单链表的建立、插入和删除算法

    编写不带头结点单链表的建立.插入和删除操作算法. 一.问题描述 编写一个不带头节点的单链表 二.基本要求 1) 建立 2) 插入 3) 删除 三.算法思想 选用不带头结点的单链表,在第一个元素节点前插 ...

最新文章

  1. Opera浏览器无法观看土豆 优酷 新浪视频的解决办法!
  2. 从零开始打造自己的PHP框架――第2章
  3. AQO.NET实现数据操作封装
  4. 【clickhouse】clickhouse 配置 安装目录
  5. 用时间序列的方法处理数据
  6. 大地坐标系转换火星坐标系
  7. c++打开挑选图片对话框
  8. bookxnote,类MarginNote的pc笔记软件,可与anki联合使用
  9. 窗体内公用的数据表,在使用视图和行过滤时的有趣现象
  10. 小学二年级计算机课游戏,[小学二年级适合玩的课堂游戏] 适合小学生的课堂游戏...
  11. oracle引用css报错,Oracle CSSCAN工具使用
  12. linux cpufreq framework(3)_cpufreq core
  13. win10制作CentOS系统盘
  14. WebForm GridView分页
  15. 文件服务器 s3,AWS S3日志文件通过服务器上传到elk(示例代码)
  16. FoxitReader3.0注册码和foxit pdf creator key
  17. Macos上一款DVD刻录工具,您能够帮助大家快速的翻录各种DVD视频,还支持编辑视频、批量转换等功能
  18. 费波纳奇数c语言,费波纳奇数列
  19. Opencv --- 背景消除建模(BSM)
  20. css图标与文字同一列对齐与同一行对齐

热门文章

  1. “开闭原则”实现图书售卖简单实现
  2. 孪生网络图像相似度_文本蕴含之孪生网络(Siamese Network)
  3. 推荐10个 Chrome 插件
  4. 什么是CAPL编程语言
  5. OpenGL教程 学习笔记
  6. 软件工程 部分术语英文缩写
  7. 资深制作人谈游戏策划如何入行
  8. 在线SVG在线编辑器
  9. linux块设备驱动简述(Linux驱动开发篇)
  10. linux c 获取终端输出到文件,LINUX C获取命令行输出结果