首页 > 两个有序单链表的并交差运算

两个有序单链表的并交差运算

/*实验2.6:求集合(有序单链表表示)的并、交和差运算*/
#include
#include
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;idata=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:
";//DisplayList(ha);cout << " 原集合B:";//DisplayList(hb);}

  

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

更多相关:

  • 题目:合并两个排序的链表 输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。 示例1: 输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4 限制: 0 <= 链表长度 <= 1000 解题: /*** Definition for singly-linked li...

  • 题目:反转链表 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 限制: 0 <= 节点个数 <= 5000 解题: 方法一:双指针 我们可以申请两个指针,第一个指针叫 new_next,最...

  • LRU算法(Least Recently Used) 算是我们经常遇到的一种淘汰算法,其中内存管理模块进行内存页回收时有用到,针对不经常使用的内存页,LRU淘汰策略能够将该内存页回收给操作系统。 属于 我们操作系统设计中的 时间局部性原理,最长时间未被访问的数据优先淘汰,当内存中已存在的数据再次被访问时,则进行热度的提升。 本文为...

  • 题目描述 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 示例: 给定 1->2->3->4, 你应该返回 2->1->4->3. 方法一(递归): 将配对交换过程拆解为多个以两个元素为一对的子问题 …n(k-1) -> n(k)->n(k+1)...

  • 已知两个已排序链表头节点指针headA与headB,将这两个链表合并,合并后仍为 有序的,返回合并后的头节点。 主要步骤如下: 创建一个临时的头节点,头节点每次指向headA 或者 headB较小的节点当headA->data 比headB->data小的时候,headA的当前节点加入临时头节点,同时headA指针向后移动;否则h...

  • 学习计划 MyPlan11 主题:Python描述统计、简单统计图形 时间:8.5-8.11周内完成 参考资料:新书《谁说菜鸟不会数据分析python篇》 各位星友们,在这个星球里每个人都要逼迫自己学习未知的领域或知识点,每天进步一点点,积累的时间久了 ,菜鸟也能起飞。 完成情况: 在pandas中,使用describe函数进行描述统...

  • 利用SocketServer模块来实现网络客户端与服务器并发连接非阻塞通信。 首先,先了解下SocketServer模块中可供使用的类: BaseServer:包含服务器的核心功能与混合(mix-in)类挂钩;这个类只用于派生,所以不会生成这个类的实例;可以考虑使用TCPServer和UDPServer。 TCPServer/UDPS...

  • 题目:序列化二叉树 请实现两个函数,分别用来序列化和反序列化二叉树。 示例:  你可以将以下二叉树:     1    /   2   3      /     4   5 序列化为 "[1,2,3,null,null,4,5]" 解题: /*** Definition for a binary tree no...

  • sd.js  import $global from "./global"; import $g from "./sg"; import $ from "jquery"; import {Message, Loading} from "element-ui";//引入饿了么相关组件 import {Base64} from "js-...

  •     原生sd.js----------------------------------------------------------------  const API_ROOT_URL = "http://www.api.com";const $d= {_postList_url: API_ROOT_URL + "/api...