/*实验2.6:求集合(有序单链表表示)的并、交和差运算*/
#include<iostream>
#include<malloc.h>
using namespace std;
typedef char ElemType;
typedef struct LNode
{ElemType data;struct LNode *next;
}LinkList;
void DisplayList(LinkList *L)
{LinkList *p = L->next;while(p != NULL){cout << p->data <<" ";p = p->next;}cout << endl;
}
void CreateListR(LinkList *L,ElemType a[],int n)
{LinkList *s,*r;int i;L=(LinkList *)malloc(sizeof(LinkList));L->next=NULL;r=L;for(i=0;i<n;i++){s=(LinkList *)malloc(sizeof(LinkList));s->data=a[i];r->next=s;r=s;}r->next=NULL;
}
void Sort(LinkList *&head)
{LinkList *p=head->next,*q,*r;if(p!=NULL){r=p->next;p->next=NULL;p=r;while(p!=NULL){r=p->next;q=head;while(q->next!=NULL && q->next->data < p->data)q=q->next;p->next=q->next;q->next=p;p=r;}}
}
void Union(LinkList *ha,LinkList *hb,LinkList *&hc)   //求两个集合的并
{LinkList *pa=ha->next,*pb=hb->next,*s,*tc;hc=(LinkList *)malloc(sizeof(LinkList));tc=hc;while(pa!=NULL&&pb!=NULL){if(pa->data < pb->data){s=(LinkList *)malloc(sizeof(LinkList));s->data=pa->data;tc->next=s;tc=s;pa=pa->next;}else if(pa->data > pb->data){s=(LinkList *)malloc(sizeof(LinkList));s->data=pb->data;tc->next=s;tc=s;pb=pb->next;}else{s=(LinkList *)malloc(sizeof(LinkList));s->data=pa->data;tc->next=s;tc=s;pa=pa->next;pb=pb->next;}}if(pb!=NULL)pa=pb;while(pa!=NULL){s=(LinkList *)malloc(sizeof(LinkList));s->data=pa->data;tc->next=s;tc=s;pa=pa->next;}tc->next=NULL;
}
void InterList(LinkList *ha,LinkList *hb,LinkList *&hc)
{LinkList *pa=ha->next,*pb,*s,*tc;hc=(LinkList *)malloc(sizeof(LinkList));tc=hc;while(pa!=NULL){pb=hb->next;while(pb!=NULL&&pb->data < pa->data)pb=pb->next;if(pb!=NULL&&pb->data==pa->data){s=(LinkList *)malloc(sizeof(LinkList));s->data=pa->data;tc->next=s;tc=s;}pa=pa->next;}tc->next=NULL;
}
void Subs(LinkList *ha,LinkList *hb,LinkList *&hc)
{LinkList *pa=ha->next,*pb,*s,*tc;hc=(LinkList *)malloc(sizeof(LinkList));tc=hc;while(pa!=NULL){pb=hb->next;while(pb!=NULL&&pb->data < pa->data)pb=pb->next;if(!(pb!=NULL&&pb->data==pa->data)){s=(LinkList *)malloc(sizeof(LinkList));s->data=pa->data;tc->next=s;tc=s;}pa=pa->next;}tc->next=NULL;
}
int main()
{LinkList *ha,*hb,*hc;ElemType a[]={'c','a','e','h'};ElemType b[]={'f','h','b','g','d','a'};CreateListR(ha,a,4);CreateListR(hb,b,6);cout << " 原集合A:\n";//DisplayList(ha);cout << " 原集合B:";//DisplayList(hb);}

  

转载于:https://www.cnblogs.com/theast/archive/2013/05/08/3067059.html

两个有序单链表的并交差运算相关推荐

  1. 两个有序单链表的合并排序算法

    设计两个有序单链表的合并排序算法 ListList MergeList(LiskList La, LinkList Lb){Lnode *pa = La->next;Lnode *pb = Lb ...

  2. 链表题目---3 合并两个有序单链表 和 分割链表

    合并两个有序单链表 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *nex ...

  3. 合并两个有序单链表,使得合并后的链表仍然有序

    在<剑指offer>里有一道笔试面试题:合并两个有序单链表,使得合并后的链表仍然有序.书中巧妙的利用了递归方法实现了该函数功能. 显然,利用递归算法能够让代码看起来非常简洁且容易看懂,但如 ...

  4. C++头插法尾插法建立单链表,合并两个有序单链表

    A和B是两个单链表(带表头结点),其中元素递增有序.设计一个算法,将A和B归 并成一个按元素值非递减有序的链表 C,C由A 和B 中的结点组成. #include<iostream> #i ...

  5. 经典算法——合并两个有序单向链表

    1.题目要求 这是一道求职面试时经常要求手写或者机试的经典题目. 已知两个链表 head1 和 head2 各自有序,请把它们合并成一个链表依然有序.结果链表要包含 head1 和head2 的所有节 ...

  6. 两个无序单链表,排序后合并成一个有序链表

    两个无序单链表,排序后合并成一个有序链表 算法思想:用冒泡法,对链表1和2进行排序,对排序后的两个链表,从小到大进行循环,装入链表3中. #include<stdio.h> #includ ...

  7. 两个非递减有序单链表La和Lb合并成一个非递增有序链表Lc

    #include<iostream> #include <stdio.h> #include <stdlib.h> #include <string.h> ...

  8. LeetCode Merge k Sorted Lists(有序单链表数组的合并)

    题意:给出一个有序单链表数组,将其合并成一个有序单链表 思路:将其转化成两个单链表合并的问题,用递归方式来实现 代码如下: public class Solution {private ListNod ...

  9. LeetCode Convert Sorted List to Binary Search Tree(有序单链表转为平衡二叉树)

    题意:给出一个有序的单链表,将其转换成平衡二叉树 思路:因为是有序的,所以可以将其分成两部分,前部分作为左子树,后部分作为右子树 代码如下: class ListNode {int val;ListN ...

最新文章

  1. Linux软件包增量升级,Linux增量更新jar包内容
  2. vue init深度定制团队自己的Vue template
  3. 特奇怪的问题:centos5下mount.cifs 与apache2.2.3和vsftpd结合
  4. 深入浅出python机器学习_3.3.1_对数据集进行分析
  5. 用websploit获取管理员后台地址
  6. fiddler抓包1-抓小程序https包
  7. Android 集成高德地图——当前定位,添加图标,画路线,设置显示中心位置,比例,地图刷新位置监听,判断GPS开启,去打开GPS
  8. java中1和1.0_在Java中如何以0.1f增量在0.1f和1.0f之间进行迭代?
  9. 编程求以孩子兄弟表示法存储的森林的叶子结点数☆
  10. React的Element的创建和render
  11. html5 retina 1像素,7种方法解决移动端Retina屏幕1px边框问题
  12. Python编程基础题(2-求一元二次方程的解Ⅱ)
  13. Greenplum使用TPC-H测试过程及结果
  14. 在请求分页存储管理方案中,若某用户空间为16个页面,页长1KB,现有页表如下,则逻辑地址0A1F(H)所对应的物理地址为( )。
  15. ZigBee、WiFi、蓝牙的区别
  16. [程序人生] [世界杯] 程序员世界杯的熬夜调节套餐 - 茶叶篇
  17. java HmacSHA1 计算
  18. 新网银行:我们不止于一家互联网场景银行
  19. Apache ab -- 工具简介
  20. C语言 typedef 简介

热门文章

  1. w ndows连接USB不正常,Raspberry Pi Zero W 连接电脑 – 针对Windows 10 缺少RNDIS驱动
  2. php输出带的字符串吗,php输出含有“#”字符串的方法
  3. linux 文件拷贝并替换,Linux_cmd replace 文件替换使用说明,帮助信息: 复制代码 代码如 - phpStudy...
  4. 链接mysql_使用python链接mysql及redis(缓存型数据库)
  5. Python,Opencv cv2.Canny()边缘检测
  6. OpenCV中的特征匹配(Feature Matching)
  7. halcon与QT联合:(5.1)瓶盖检测以及QT界面搭建
  8. GitHub开源:一键生成前后端代码神器
  9. 学习《Linux设备模型浅析之设备篇》笔记(三)
  10. C语言实现bmp图像几何变换(移动,旋转,镜像,转置,缩放)