单链表求集合交并
来源:互联网 发布:阿里云短信验证码模板 编辑:程序博客网 时间:2024/04/26 14:27
#include<iostream>#include<malloc.h>using namespace std;typedef int DataType;/*定义链表数据结构*/typedef struct node{DataType data;struct node * next;}LNode,* LinkList;int main(){/*函数声明*/LinkList Tail_Create_LinkList();/*尾插法-创建链表*/int length(LinkList H);/*求单链表长度*/LinkList Locate_LinkList_Value(LinkList H,DataType x);/*查找单链表中数值为x的节点*/LinkList Locate_LinkList_Pos(LinkList H,int i);/*查找单链表中的第i个节点*/void Insert_LinkList(LinkList H,int i,DataType x);/*在链表第i个元素前插入值x*/void Show(LinkList H);/*输出链表*/LinkList CCopy_LinkList(LinkList H);/*单链表的复制*/void Inter_sec(LinkList A,LinkList B);/*求交集*/void Merge_sec(LinkList A,LinkList B);/*求并集*/void Destory_LinkList(LinkList * H);/*销毁单链表*/LinkList A=Tail_Create_LinkList();LinkList B=Tail_Create_LinkList();cout<<"\n\n两链表的交集为:";Inter_sec(CCopy_LinkList(A),CCopy_LinkList(B));cout<<"\n\n两链表的并集为:";Merge_sec(CCopy_LinkList(A),CCopy_LinkList(B));/*销毁单链表*/Destory_LinkList(&A);Destory_LinkList(&B);return 0;}/*尾插法-创建链表*/LinkList Tail_Create_LinkList(){/*建一个空表*/LinkList H;H=(LinkList)malloc(sizeof(LNode));if(!H){cout<<"申请空间失败!";return 0;}H->next=NULL;cout<<"输入单链表元素(负数结束):";LinkList p,r;p=r=(LinkList)malloc(sizeof(LNode));//利用malloc ( )函数向系统申请分配一个节点cin>>p->data;//输入节点的值p->next=NULL;//将新节点的指针置为空while(p->data>=0){//输入节点的数值大于0if(!H->next)H->next=p;//空表,接入表头elser->next=p;r=p;p=(LinkList)malloc(sizeof(LNode));//下一个新节点cin>>p->data;p->next=NULL;}return H;//返回链表的头指针}/*求单链表长度*/int length(LinkList H){LinkList p=H;int count=-1;//H带头结点,从-1开始while(p){p=p->next;count++;}return count;}/*查找单链表中数值为x的节点*/LinkList Locate_LinkList_Value(LinkList H,DataType x){LinkList p=H->next;while(p && p->data!=x){p=p->next;}return p;}/*查找单链表中的第i个节点*/LinkList Locate_LinkList_Pos(LinkList H,int i){LinkList p=H;int j=0;while(p && j<i){//查找第i个节点p=p->next;j++;}if(j!=i || !p){cout<<"参数i错或单链表不存在!";return 0;}return p;}/*在链表第i个元素前插入值x*/void Insert_LinkList(LinkList H,int i,DataType x){LinkList p,q;p=Locate_LinkList_Pos(H,i-1);//寻找第i-1个节点if(!p){cout<<"插入位置有误!";return;}q=(LinkList)malloc(sizeof(LNode));if(!q){cout<<"申请空间失败!";return;}q->data=x;q->next=p->next;//新节点插在第i-1个节点的后面p->next=q;}/*输出链表*/void Show(LinkList H){LinkList p=H->next;//取得链表第一个元素的指针while(p){//只要是非空表cout<<p->data<<" ";//输出链表节点的值p=p->next;//跟踪链表增长}}/*单链表的复制*/LinkList CCopy_LinkList(LinkList H){LinkList G;G=(LinkList)malloc(sizeof(LNode));if(!G){cout<<"申请空间失败!";return 0;}G->next=NULL;LinkList p,r,h=H->next;r=(LinkList)malloc(sizeof(LNode));//利用malloc ( )函数向系统申请分配一个节点while(h){p=(LinkList)malloc(sizeof(LNode));//下一个新节点p->data=h->data;p->next=NULL;if(!G->next)G->next=p;//空表,接入表头elser->next=p;//非空,接入表尾r=p;h=h->next;//再取链表的下一个节点}return G;}/*集合A与B的交集*/void Inter_sec(LinkList A,LinkList B){LinkList H=A;LinkList p=H->next;while(p){if(!Locate_LinkList_Value(B,p->data)){//集合B中没有xH->next=p->next;free(p);//删除该结点,考察下一个结点p=H->next;}else{H=p;p=p->next;//考察下一个结点}}Show(A);}/*求集合A与B的并集*/void Merge_sec(LinkList A,LinkList B){LinkList p=B->next;while(p){if(!Locate_LinkList_Value(A,p->data)){//集合A中没有xInsert_LinkList(A,1,p->data);//将集合A中没有的元素加入到集合A中}p=p->next;}Show(A);}/*销毁单链表*/void Destory_LinkList(LinkList * H){/*销毁后单链表的头指针变为空指针,所以要将头指针的地址作为形参*/LinkList p,q;p=* H;while(p){//释放单链表的所有节点q=p;p=p->next;free(q);}* H=NULL;}
0 0
- 单链表求集合交并
- java 集合交并补
- 【JAVA】集合交并补
- 集合的交并运算
- 两个集合的交并差
- 集合的交并差链式表示
- 数据结构实验 第一单元 集合交并
- 两个集合的交并集等
- 集合的交并差用HashSet实现
- 一个工具类-----集合的交并差
- c++实现集合的交并差集
- Fxxking dataStructure_ 集合的交并差运算
- 单链表ADT实现集合交并补
- 顺序表集合的交并差操作
- C++集合的模板类 交并集
- 数据结构之顺序表(集合的交并差)
- set集合实现交并差操作;Iiterator实现无序遍历
- JAVA对集合的操作(交并差)
- 单链表的逆置
- IOS之ipad和iphone之间的xib的适配所有的屏幕
- padding和layout_margin的区别
- Linux下从源码编译安装软件中3个命令之间的关系
- 栈模板的链表实现(包含头结点),实现了栈的压入,栈的弹出,返回栈顶元素,排序等操作
- 单链表求集合交并
- Flask学习笔记01--安装Flask
- 经济学入门概念及原理-1
- IOS的后台任务
- 蓝懿ios 简易机算计 技术内容和心得
- 顺序栈——C++实现
- 【笔试】57、确定一个字符串的所有字符是否都不同
- Python Scapy(2.3.1)文档学习(七):故常排除
- 什么是软件测试,软件测试的目的?