【数据结构】天勤 例2-3 (单链表归并操作)二、递减
【例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 (单链表归并操作)二、递减相关推荐
- 笔试面试常考数据结构-单链表常用操作编程实现
单链表是笔试以及面试手写代码中常考的数据结构之一.下面实现了单链表的常见操作:创建单链表.删除节点.打印单链表(包括正向打印以及逆向打印).反转单链表.找出单链表的倒数第K个节点.合并两个有序单链表等 ...
- java单链表输出_数据结构基础------1.线性表之单链表的创建与输出方法(Java版)...
基础知识: 线性表(linear list),是其组成元素间具有线性关系的一种线性结构. 线性表有 ①顺序存储结构(sequential storage structure) 顺序存储结构可以简单的理 ...
- 数据结构学习(1):单链表
#include<stdio.h> #include<stdlib.h> typedef struct Node { char data; Node *next; } Node ...
- 【数据结构】【C语言】------ 单链表
前言 大家好,我是Abert. 这篇文章和大家分享用C语言实现数据结构中的单链表. 单链表可以看作是"拆分开"的顺序表.在顺序表的基础上,单链表做了一些优化,但同时也丧失了一些顺序 ...
- java实现单链表常见操作,java面试题,java初级笔试题
写在最前面,我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家.扫码加微信好友进[程序员面试学习交流群],免费领取.也欢迎各位一起在群里探讨技术. 一. ...
- java实现单链表常见操作
一.概述: 本文主要总结单链表常见操作的实现,包括链表结点添加.删除:链表正向遍历和反向遍历.链表排序.判断链表是否有环.是否相交.获取某一结点等. 二.概念: 链表: 一种重要的数据结构,HashM ...
- 单链表创建及代码实现对单链表的操作
链表:链表是一个有序的列表:是以节点的方式存储的,是链式存储:其中每一个节点包含data域,next域,next域指向下一个节点:链表的各个节点不一定是连续存放的:链表分带有头节点的链表和没有头节点的 ...
- 【算法数据结构Java实现】Java实现单链表
1.背景 单链表是最基本的数据结构,仔细看了很久终于搞明白了,差不每个部分,每个链都是node的一个对象.需要两个参数定位:一个是index,表示对象的方位.另一个是node的对象. 2.代码 nod ...
- 【Java数据结构与算法】第二章 单链表及简单面试题
第二章 单链表 文章目录 第二章 单链表 一.单链表 1.基本介绍 2.思路 3.代码实现 二.简单面试题 1.求单链表中有效节点的个数 2.查找单链表中的倒数第k个节点(新浪面试题) 3.单链表的反 ...
- #数据结构:编写不带头结点单链表的建立、插入和删除算法
编写不带头结点单链表的建立.插入和删除操作算法. 一.问题描述 编写一个不带头节点的单链表 二.基本要求 1) 建立 2) 插入 3) 删除 三.算法思想 选用不带头结点的单链表,在第一个元素节点前插 ...
最新文章
- Opera浏览器无法观看土豆 优酷 新浪视频的解决办法!
- 从零开始打造自己的PHP框架――第2章
- AQO.NET实现数据操作封装
- 【clickhouse】clickhouse 配置 安装目录
- 用时间序列的方法处理数据
- 大地坐标系转换火星坐标系
- c++打开挑选图片对话框
- bookxnote,类MarginNote的pc笔记软件,可与anki联合使用
- 窗体内公用的数据表,在使用视图和行过滤时的有趣现象
- 小学二年级计算机课游戏,[小学二年级适合玩的课堂游戏] 适合小学生的课堂游戏...
- oracle引用css报错,Oracle CSSCAN工具使用
- linux cpufreq framework(3)_cpufreq core
- win10制作CentOS系统盘
- WebForm GridView分页
- 文件服务器 s3,AWS S3日志文件通过服务器上传到elk(示例代码)
- FoxitReader3.0注册码和foxit pdf creator key
- Macos上一款DVD刻录工具,您能够帮助大家快速的翻录各种DVD视频,还支持编辑视频、批量转换等功能
- 费波纳奇数c语言,费波纳奇数列
- Opencv --- 背景消除建模(BSM)
- css图标与文字同一列对齐与同一行对齐