`
jaychang
  • 浏览: 731430 次
  • 性别: Icon_minigender_1
  • 来自: 嘉兴
社区版块
存档分类
最新评论

单链表实现集合并交差操作

 
阅读更多
#include<iostream>

using namespace std;

typedef struct Node{
  char data;
  Node *next;
}Node,*LinkList;

#define SIZE sizeof(Node)
#define FALSE 0
#define TRUE 1

//初始化集合
void InitLinkList(LinkList Head)
{
  char ch;Node *p=Head;
  Head->next=NULL;
  Head->data='\0';
  cin>>ch;
  while(ch!='#')
  {
     Node *newNode=(Node*)malloc(SIZE);
     newNode->data=ch;
     p->next=newNode;
     p=p->next;
     cin>>ch;
  }
  p->next=NULL;
}

//检查p1或p2所指向数据结点该不该加入到Head为起始的集合中^-^有点拗口,表达不是很好
int Check(char ch,LinkList Head)
{
  Node *temp=Head->next;
  int flag=TRUE;
  while(temp!=NULL)
  {
     if(temp->data==ch){//不需要将数据插入
        flag=FALSE;
        return flag;
     }
     temp=temp->next;
  }
  return flag;
}

//合并两个集合
LinkList Merge(LinkList Head1,LinkList Head2)
{
  LinkList Head=(Node*)malloc(SIZE);
  Head->data='\0';Head->next=NULL; 
  Node *p1=Head1->next;
  Node *p2=Head2->next;
  Node *p=Head;
  while(p1!=NULL&&p2!=NULL)
  {
     if(p1->data==p2->data)
     {
       if(Check(p1->data,Head)==TRUE)
       {
           Node *newNode=(Node*)malloc(SIZE);
           newNode->data=p1->data;
           p->next=newNode;
           p=newNode;
           p->next=NULL;
       }
   }
   else
   {
      if(Check(p1->data,Head)==TRUE)
      {
          Node *newNode=(Node*)malloc(SIZE);
          newNode->data=p1->data;
          p->next=newNode;
          p=newNode;
          p->next=NULL;
      }
      if(Check(p2->data,Head)==TRUE)
      {
          Node *newNode=(Node*)malloc(SIZE);
          newNode->data=p2->data;
          p->next=newNode;
          p=newNode;
          p->next=NULL;
       }
    }
    p1=p1->next;
    p2=p2->next;
  }
  while(p1!=NULL)
  {
      if(Check(p1->data,Head)==TRUE)
      {
         Node *newNode=(Node*)malloc(SIZE);
         newNode->data=p1->data;
         p->next=newNode;
         p=newNode;
         p->next=NULL;
      }
      p1=p1->next;
  }
  while(p2!=NULL)
  {
      if(Check(p2->data,Head)==TRUE)
     {
        Node *newNode=(Node*)malloc(SIZE);
        newNode->data=p2->data;
        p->next=newNode;
        p=newNode;
        p->next=NULL;
      }
      p2=p2->next;
  }
  return Head;
}

//集合A中的元素,B中是否存在
int IsExist(char data,LinkList Head)
{
  Node *p=Head->next;
  int flag=FALSE;
  while(p!=NULL)
  {
     if(p->data==data)
        return flag=TRUE;
     p=p->next;
  }
  return flag;
}

int IsExist2(char data,LinkList Head)
{
  Node *p=Head->next;
  int flag=FALSE;
  while(p!=NULL)
  {
     if(p->data==data)
        return flag;
     p=p->next;
  }
  return flag=TRUE;
}

//两个集合的差集
LinkList Deprive(LinkList Head1,LinkList Head2)
{
  LinkList Head=(Node*)malloc(SIZE);
  Node *p=Head;
  Node *p1=Head1->next;
  while(p1!=NULL)
  {
    if(IsExist2(p1->data,Head2)==1)
    {
        Node *newNode=(Node*)malloc(SIZE);
        newNode->data=p1->data;
        p->next=newNode;
        p=newNode;
        p->next=NULL;
     }
     p1=p1->next;
  }
  return Head;
}

//两个集合交集
LinkList Insection(LinkList Head1,LinkList Head2)
{
  Node *p1=Head1->next;
  //Node *p2=Head2->next;
  LinkList Head=(Node*)malloc(SIZE);
  Head->data='\0';Head->next=NULL;
  Node *p=Head;
  while(p1!=NULL)
  {
    if(IsExist(p1->data,Head2)==1)
    {
       Node *newNode=(Node*)malloc(SIZE);
       newNode->data=p1->data;
       p->next=newNode;
       p=newNode;
       p->next=NULL;
     }
     p1=p1->next;
  }
  return Head;
}

//打印集合元素
void PrintLinkList(LinkList Head)
{
  Node *p=Head->next;
  while(p!=NULL)
  {
     cout<<p->data;
     p=p->next;
  }
  cout<<"\n";
}

int main()
{
  char cmd;
  do{
      cout<<"输入两个集合的元素,输完一个集合的元素,按#结束\n";
      LinkList head1=(Node*)malloc(SIZE);
      LinkList head2=(Node*)malloc(SIZE);
      InitLinkList(head1);InitLinkList(head2);
      Node *Head1=Merge(head1,head2);
      cout<<"两个集合合集为\n";
      PrintLinkList(Head1);
      Node *Head2=Insection(head1,head2);
      cout<<"两个集合交集为\n";
      PrintLinkList(Head2);
      Node *Head3=Deprive(head1,head2);
      cout<<"两个集合差集为\n";
      PrintLinkList(Head3);
      cout<<"按y/Y继续,否则结束\n";
      cin>>cmd;
  }while(cmd=='y'||cmd=='Y');
  return 0;
}
 
分享到:
评论

相关推荐

    基于单链表实现集合的并交差运算实验报告.pdf

    总结来说,这个实验报告涉及了单链表的基础操作,包括创建、插入、输出、查询、删除等,以及使用单链表实现集合的并、交、差运算的概念。在实际应用中,这些基础操作是数据结构和算法学习的重要组成部分,对于理解...

    c语言实现集合并交差

    总之,C语言实现集合并交差是通过自定义单链表数据结构并编写相应的操作函数来完成的。这种方法不仅有助于理解数据结构和算法,还能在实际项目中灵活应用。在进行集合操作时,要特别注意内存管理,确保正确分配和...

    集合的并交差运算数据结构课程设计.docx

    集合的并交差运算数据结构课程设计 本文档主要介绍集合的并交差运算的数据结构课程设计,...我们使用顺序表来实现集合的并交差运算,并提供了一些基本操作。这些操作可以对顺序表进行初始化、插入、删除、遍历等操作。

    顺序表表示集合,实现集合的交、并、差运算

    - **AuB(A, B, C)**:实现集合A与集合B的并集操作,并将结果保存在集合C中。 - 首先将集合A的所有元素复制到集合C中。 - 然后遍历集合B的元素,如果该元素不在集合C中,则添加到集合C中。 - 如果集合C已满,则...

    数据结构实验-集合的并交差运算实验报告.doc

    数据结构实验-集合的并交差运算实验报告.doc

    基于顺序表实现集合的并交差运算实验报告.pdf

    【基于顺序表实现集合的并交差运算实验】 在计算机科学中,集合是包含唯一元素的数据结构。在本实验中,我们将使用顺序表(Sequential List)来实现集合的并、交和差运算。顺序表是一种线性表,其中元素按照它们在...

    数据结构严蔚敏C语言版实验1集合并交差

    严蔚敏版数据结构C语言,第一个实验集合并交差,用C-free编写的C++文件

    基于顺序表实现集合的并交差运算实验报告.docx

    【基于顺序表实现集合的并交差运算实验】 在计算机科学中,集合是存储和处理一组唯一元素的数据结构。在本实验中,我们将基于顺序表(Sequential List)来实现集合的并、交、差运算。顺序表是一种简单的线性数据...

    链表实现集合的并交差运算

    数据结构的实验,用链表实现对集合的相关运算。

    集合的并交差运算

    在计算机科学中,集合是数据结构的一种,用于存储无序且不重复的元素。集合的并、交和差运算在编程中广泛应用于数据处理和算法设计。...通过熟练掌握堆排序和集合操作,开发者可以优化代码性能,提升程序的效率。

    Java集合并交差运算[汇编].pdf

    本文件主要涉及的是如何使用Java语言实现单链表的基础操作以及集合的交、并和差运算。下面将详细阐述这些知识点。 首先,单链表是一种基本的数据结构,由一系列节点组成,每个节点包含数据域和指向下一个节点的引用...

    利用C语言线性表实现集合的交并差.cpp

    编制一个能演示执行集合的并、交、差运算的程序。 (1)设计集合的并、交、差运算函数(集合的元素不能重复) (2)编制测试函数测试集合运算 (3)提示:以有序链表表示集合

    集合交差并三种操作的C实现

    总的来说,C语言中实现集合的交差并操作主要依赖于链表数据结构和基础的算法。虽然这种方法的效率可能不如C++中的STL库,但在理解和实现基本数据结构和算法方面提供了很好的实践机会。通过优化数据结构(如使用二叉...

    【数据结构】集合的并、交和差运算

    以上是对"数据结构的集合的并、交和差运算"这一主题的详细解释,涵盖了理论概念、C++中的实现方式以及实际应用。通过理解这些基础知识,开发者可以更好地处理和操作数据,提高代码的效率和质量。

    数据结构实现的集合交并差运算

    该项目通过单链表实现了集合的基本操作和集合运算。单链表作为一种线性数据结构,在处理集合运算时具有较高的灵活性。通过上述的关键技术点分析,我们可以了解到如何使用单链表来有效地实现集合的交集、并集和差集...

    集合的并交差,集合合并,删除,判断子集,求补集

    集合运算是集合操作的基础,包括集合的并交差、集合合并、删除、判断子集、求补集等操作。在本文中,我们将详细介绍集合运算的实现方法,并提供相应的代码实现。 1. 集合的定义 在C语言中,我们可以使用结构体来...

    c++集合的并交差

    用c++语言实现集合的并、交、差、插入、删除运算

    数据结构C++实现集合交并差

    运用数据结构中的链表的相关的知识,实现集合的交并差,加深对链表的插入删除清空等操作的理解。

Global site tag (gtag.js) - Google Analytics