信管117116李可欣数据结构实验三

1、建立一个包含n个学生成绩信息的程序

(1)用顺序表实现

# include <iostream> 

# include <fstream> 

# include <string.h> 

#define MAX 100 

int i,n; 

using namespace std; 

 

struct Student{     

 charid[20];          

 charname[20];  

 intLnum;     

 intGnum;    

 intEnum;     

 float sum;  

 voidMenu(); 

 voidFind(); 

 voidRemoveItem(); 

 voidDisplay();  

 voidshow(); 

 voidAddItem(); 

 voidInput(); 

  

}Stu[MAX+1]; 

//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌主菜单﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌ 

void Menu(){ 

   

 cout<<"                                                            "<<endl; 

 cout<<"\t    学 生 成 绩 管 理 系 统\t\t"<<endl; 

 cout<<"                                                            "<<endl; 

 cout<<"\t\t1.录入\t\t"<<endl; 

 cout<<"\t\t2.显示\t\t"<<endl; 

 cout<<"\t\t3.查找\t\t"<<endl; 

 cout<<"\t\t4.插入\t\t"<<endl; 

 cout<<"\t\t5.删除\t\t"<<endl; 

 cout<<"\t\t0.退出\t\t "<<endl; 

  

  

 cout<<"\n\t\t\n\t\t请选择:"<<endl; 

 

 

 

 

 

//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌录入信息﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌ 

void Input() 

{   

 

cout<<"\t\t你要录入几位学生:"; 

cin>>n; 

for(i=1;i<=n;i++) 

 cout<<"第"<<i<<"位"; 

 cout<<"\t\t请输入学生姓名:"<<endl; cin>> Stu[i].name; 

 cout<<"\t\t请输入学生学号:"<<endl; cin>>Stu[i].id; 

 cout<<"\t\t请输入离散成绩:"<<endl; cin>>Stu[i].Lnum; 

 cout<<"\t\t请输入管理成绩:"<<endl; cin>>Stu[i].Gnum; 

 cout<<"\t\t请输入英语成绩:"<<endl; cin>>Stu[i].Enum; 

 Stu[i].sum=Stu[i].Lnum+Stu[i].Gnum+Stu[i].Enum; 

 

 

//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌显示所有信息﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌ 

void Display() 

cout<<"序号"<<"\t"<<"姓名"<<"\t\t"<<"学号"<<"\t"<<"离散"<<"\t"<<"管理"<<"\t"<<"英语"<<"\t"<<"总分"<<endl; 

for(i=1;i<=n;i++) 

 

cout<<i<<"\t"<<Stu[i].name<<"\t"<<Stu[i].id<<"\t"<<Stu[i].Lnum<<"\t"<<Stu[i].Gnum<<"\t"<<Stu[i].Enum<<"\t"<<Stu[i].sum<<"\t"<<"\n"; 

 

 

 

//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌选择信息﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌ 

 

void Student::show() 

cout<<"序号"<<"\t"<<"姓名"<<"\t\t"<<"学号"<<"\t"<<"离散"<<"\t"<<"管理"<<"\t"<<"英语"<<"\t"<<"总分"<<endl; 

cout<<i<<"\t"<<Stu[i].name<<"\t"<<Stu[i].id<<"\t"<<Stu[i].Lnum<<"\t"<<Stu[i].Gnum<<"\t"<<Stu[i].Enum<<"\t"<<Stu[i].sum<<"\t"<<"\n"; 

 

 

//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌查找信息﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌ 

void Find() 

 charna[20] ,I[10]; 

 intx,a,z; 

 cout<<"\n\t\t*********************************\n"; 

 cout<<"\t \t    1.按姓名 2.按学号3.按序号"; 

 cout<<"\n\t\t*********************************\n请选择:"; 

 cin>>x; 

  switch(x) 

  { 

     case 1:{ 

         cout<<"\t\t请输入要查找的姓名:";cin>>na; 

         bool flag=false; 

        for(i=1;i<=n;i++) 

        { 

           if(strcmp(Stu[i].name, na) == 0)  

           { 

            Stu[i].show(); 

            flag=true; 

           }    

         

         } 

        if(!flag){ 

        cout<<"无此人"; 

          

        } 

     

          

           }break; 

 

     

    case 2:{ 

         cout<<"\t\t请输入要查找的学号:";cin>>I; 

          bool flag=false; 

         for(i=1;i<=n;i++) 

        { 

            if(strcmp(Stu[i].id, I) == 0)  

           {  

            Stu[i].show(); 

           flag=true;} 

             

        } 

         if(!flag){ 

              cout<<"无此人";} 

           }break; 

    case 3:{ 

         cout<<"\t\t请输入要查找的序号:";cin>>i; 

         if(i<1||i>n) throw "position error"; 

         else  Stu[i].show(); 

           }break; 

 

  } 

  

 

 

//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌插入信息﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌ 

 

 voidAddItem() 

 { 

int i,j; 

n++; 

if(n>MAX) throw"overflow"; 

cout<<"which position do youwant to insert?"; 

cin>>i; 

if(i<1||i>n) throw"position"; 

for(j=n;j>=i;j--) 

Stu[j]=Stu[j-1]; 

 cout<<"第"<<i<<"位"; 

 cout<<"\t\t请输入学生姓名:"<<endl; cin>> Stu[i].name; 

 cout<<"\t\t请输入学生学号:"<<endl; cin>>Stu[i].id; 

 cout<<"\t\t请输入离散成绩:"<<endl; cin>>Stu[i].Lnum; 

 cout<<"\t\t请输入管理成绩:"<<endl; cin>>Stu[i].Gnum; 

 cout<<"\t\t请输入英语成绩:"<<endl; cin>>Stu[i].Enum; 

 Stu[i].sum=Stu[i].Lnum+Stu[i].Gnum+Stu[i].Enum; 

 cout<<"Thenew list is:"; 

 Display(); 

 } 

 //﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌删除信息﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌ 

 

 voidRemoveItem() 

 { 

 intj; 

 if(n==0) throw "underflow"; 

cout<<"which sequence number doyou want to delete?"; 

cin>>i; 

if(i<1||i>n) throw"position"; 

for(j=i+1;j<=n;j++) 

Stu[j-1]=Stu[j]; 

 

cout<<"The new list is:"; 

n--; 

 Display(); 

 } 

 

int main() 

int x,i=0; 

 boolquit=false; 

 while(!quit) 

 { 

 system("cls"); 

 Menu();   

 cin>>x; 

 switch(x) 

 { 

 case 0:quit=true;break; 

 case 1:Input();system("pause");break; 

 case 2:Display();system("pause");break; 

 case 3:Find();system("pause");break; 

 case 4:AddItem();system("pause");break; 

 case 5:RemoveItem();system("pause");break; 

 } 

 } 

 return 0; 

}






(2)用单链表实现

#ifndef LinkList_H

#define LinkList_H

 

template<class DataType>

struct Node

{

       DataTypedata;

       Node<DataType>* next;

};

 

template<class DataType>

class LinkList

{

       public:

              LinkList();

       LinkList(DataType a[],int n);

              ~LinkList();

       int Locate(DataType x);

              voidInsert(int i,DataType x);

       DataType Delete(int i);

              voidPrintList();

       private:

              Node<DataType>* first;

};

#endif

 

#include<iostream>

using namespace std;

#include "LinkList.h"

 

template<class DataType>

LinkList<DataType>::LinkList()

{

       first=newNode<DataType>;

       first->next=NULL;

}

 

template<class DataType>

LinkList<DataType>::LinkList(DataTypea[],int n)

{

       Node<DataType>* r, * s;

       first=newNode<DataType>;

       r=first;

       for(inti=0;i<n;i++)

       {

              s=newNode<DataType>;

              s->data=a[i];

              r->next=s;r=s;

       }

       r->next=NULL;

}

 

template<class DataType>

LinkList<DataType>::~LinkList()

{

       Node<DataType>* q=NULL;

       while(first!=NULL)

       {

              q=first;

              first=first->next;

              deleteq;

       }

}

 

template<class DataType>

void LinkList<DataType>::Insert(inti,DataType x)

{

       Node<DataType>*p =first, *s =NULL;

       intcount=0;

       while(p!=NULL&&count<i-1)

       {

              p=p->next;

              count++;

       }

       if(p==NULL)throw"位置";

       else{

              s=newNode<DataType>;s->data=x;

              s->next=p->next;p->next=s;

       }

}

 

template<class DataType>

DataTypeLinkList<DataType>::Delete(int i)

{

       Node<DataType>* p=first, * q=NULL;

       DataTypex;

       intcount=0;

       while(p!=NULL&&count<i-1)

       {

              p=p->next;

              count++;

       }

       if(p==NULL||p->next==NULL)

              throw"位置";

       else{

              q=p->next;x=q->data;

              p->next=q->next;

              deleteq;

              returnx;

       }

}

 

template<class DataType>

intLinkList<DataType>::Locate(DataType x)

{

       Node<DataType>* p=first->next;

       intcount=1;

       while(p!=NULL)

       {

              if(p->data==x)returncount;

              p=p->next;

              count++;

       }

       return0;

}

 

template<class DataType>

void LinkList<DataType>::PrintList()

{

       Node<DataType>* p=first->next;

       while(p!=NULL)

       {

              count<<p->data<<"";

              p=p->next;

       }

       cout<<endl;

}

 

#include<iostream>

using namespace std;

#include "LinkList.cpp"

 

void main()

{

       intr[5]={1,2,3,4,5};

       LinkList<int>L(r,5);

       cout<<"执行插入成绩操作前数据为:"<<endl;

       L.PrintList();

       try

       {

              L.Insert(2,3);

       }

       catch(char* s)

       {

              cout<<s<<endl;

       }

       cout<<"执行插入成绩操作后数据为:"<<endl;

   L.PrintList();

       cout<<"值为5的元素位置为:";

       cout<<L.Locate(5)<<endl;

       cout<<"执行删除成绩操作前数据为:"<<endl;

       L.PrintList();

       try

       {

              L.Delete(1);

       }

       catch(char* s)

       {

              cout<<s<<endl;

       }

       cout<<"执行删除成绩操作后数据为:"<<endl;

       L.PrintList();

}

(3)用双链表实现

#include<iostream>   

using namespace std; 

 

template <class T> 

class Node 

public: 

    Tdata; 

   Node<T> *prior; 

   Node<T> *next; 

}; 

 

template <class T> 

class DoubleLinkList { 

public: 

   DoubleLinkList(); 

   DoubleLinkList(T score[], int n); 

   ~DoubleLinkList(); 

   int Length();

   void insert(int i, T x);

    Tget(int i); 

   int locate(T x);

    TDelete(int i);

   void print();

private: 

   Node<T> *first;

   int length;

}; 

 

template <class T> 

DoubleLinkList<T>::DoubleLinkList(Tscore[], int n) 

   length = 0; 

   first = new Node<T>; 

   first->next = NULL; 

   first->prior = NULL; 

   for (int i = n-1; i>=0; i--) 

   { 

       Node<T> *s = new Node<T>; 

       s->data = score[i]; 

       s->next = first->next; 

       first->next = s; 

   } 

 

template <class T> 

DoubleLinkList<T>::~DoubleLinkList() 

   while (first->next != first->prior) 

   { 

      

       Node<T> *temp = first; 

       

       first->prior->next = first->next; 

       first->next->prior = first->prior; 

       

       first = first->next; 

      

       delete temp; 

   } 

   delete first; 

 

template<class T> 

int DoubleLinkList<T>::Length() 

   Node<T> *p; int count; 

    p= first->next; 

   count = 0; 

   while (p != NULL) 

   { 

       p = p->next; 

       count++; 

   } 

   return length; 

 

template <class T> 

void DoubleLinkList<T>::insert(int i,T x) 

    Node<T>*p, *s; int count; 

    p= first; 

   count = 0; 

   while (p != NULL&&count<i - 1) 

   { 

       p = p->next; 

       count++; 

   } 

   if (p == NULL) throw"位置"; 

   else 

   { 

       s = new Node<T>; 

       s->data = x; 

       s->next = p->next; 

       p->next = s; 

   } 

 

template <class T> 

T DoubleLinkList<T>::get(int i) 

   Node<T> *p; int count; count = 1; 

    p= first->next; 

   while (p != NULL&&count<i) 

   { 

        p = p->next; count++; 

   } 

   if (p == NULL)throw"位置非法"; 

   else return p->data; 

 

template <class T> 

int DoubleLinkList<T>::locate(Tx) 

   Node<T> *p; int count; 

    p= first->next; count = 1; 

   while (p != NULL) 

    { 

       if (p->data == x) return count; 

       p = p->next; 

       count++; 

   } 

   return 0; 

 

template <class T> 

T DoubleLinkList<T>::Delete(inti) 

   Node<T> *p, *q; 

    p= first->next; int count, x; count = 1; 

   while (p != NULL&&count<i - 1) 

   { 

       p = p->next; count++; 

   } 

   if (p == NULL || p->next == NULL) throw"位置非法"; 

   else 

   { 

       q = p->next; 

       x = q->data; 

       if (p->next != NULL) 

       { 

           if (q->next != NULL) 

                q->next->prior = p; 

           else 

           { 

                p->next = NULL; 

                p->next = q->next; 

                delete q; 

                q = NULL; 

                return x; 

           } 

       } 

       p->next = q->next; 

       delete q; 

       q = NULL; 

       return x; 

   } 

 

template <class T> 

void DoubleLinkList<T>::print() 

   Node<T> *p; 

    p= first->next; 

   while (p->next != NULL) 

   { 

       cout << p->data << " "; 

       p = p->next; 

   } 

   cout << p->data << endl; 

 

void main() 

   int score[5] = { 66,77,88,99,55 }; 

   DoubleLinkList<int>student(score,5); 

   cout << "学生成绩" << endl; 

   student.print(); 

   cout << endl << "在位置3插入成绩44,插入后结果如下:" ; 

   student.insert(3,44); 

   student.print(); 

   cout<< endl << "在位置2删除成绩为:"<< student.Delete(2); 

   cout << "删除后结果如下:"; student.print(); 

   cout<< endl << "位置3的成绩为:"<< student.get(3); 

   cout<< endl << "成绩99所在位置为:"<< student.locate(99) ; 

}

(4)用静态链表实现

#include<iostream> 

#include<string> 

using namespace std; 

 

const int Maxsize = 100; 

template<typename T> 

class Node { 

public: 

    Tdata; 

int next; 

}; 

 

template <typename T>   

class SLL {   

public:   

   SLL();  

   SLL(T score[],int n);  

   virtual ~SLL();  

   void print(); 

    Tget(int i);

   int Locate(T x);

   void insert(int i, T x);

   void Delete(int i);

private:   

   Node<T> node[Maxsize]; 

   int first;   

   int avail; 

   int length;

}; 

 

template<typename T> 

SLL<T>::SLL(T score[],int n) 

   length = 0; 

   for(int i = 0; i<Maxsize; i++) 

   { 

       node[i].next=i+1; 

   } 

   node[Maxsize - 1].next = -1;   

   avail = 2;   

   first = 1;   

   node[first].next = -1;   

   for (int j = n-1; j >=0; j--)   

   {   

       if (avail == -1)   

       {   

           break;   

       }   

       int s = avail;   

       avail = node[avail].next; 

       node[s].data = score[j];

       node[s].next = node[first].next; 

       node[first].next = s;   

       length++;   

   }   

template<class T>   

SLL<T>::~SLL()   

{   

 

template<typename T> 

void SLL<T>::print() 

   int s = node[first].next; 

   for (int i = 1; i <= length; i++) 

   { 

       cout << node[s].data << " "; 

       s = node[s].next; 

   } 

}    

 

template<typename T> 

T SLL<T>::get(int i) 

   if(i<=0 || i>length) throw"位置非法"; 

   int p = first; 

   for(int j = 0; j<i; j++) 

   { 

       p=node[p].next; 

   } 

   return node[p].data; 

 

template<typename T> 

int SLL<T>::Locate(T x) 

   int count=0; 

   int p = first; 

   while(node[p].next != -1) 

   { 

       p=node[p].next; 

       if(node[p].data == x) return count+1; 

       count++; 

   } 

   return -1; 

 

template<typename T> 

void SLL<T>::insert(int i, T x) 

   if(i<0||i>length) throw"位置非法"; 

   int p = first; 

   for(int j = 1; j<i; j++) 

   {   p=node[p].next;    /*或者p=node[p].next*/} 

   int s = node[avail].next; 

   node[avail].data = x;   

   node[avail].next = node[p].next;   

   node[p].next = avail;   

   avail = s;   

   length++; 

 

template<typename T> 

void SLL<T>::Delete(int i) 

   if(i<0||i>length+1) throw"位置非法"; 

   int p = first; 

   for(int j = 1;j<=i; j++) 

   {    p=node[p].next;  } 

   int q = node[p].next;   

    Te = node[p].data;   

   node[p].next = node[q].next;   

   node[q].next = avail;   

   avail = q;   

   length--; 

 

void main()   

{   

   float score[6]={55,68,97,84,76,60};   

   SLL<float> student(score,6);   

   cout<<"              学生离散数学成绩"<<endl;   

   student.print();   

   cout<<endl<<endl<<"在位置3插入成绩88,结果如下:"<<endl;   

   student.insert(3,88);   

   student.print();   

   cout<<endl<<endl<<"在位置4删除成绩   删除后结果如下:"<<endl; 

   student.Delete(3); 

   student.print();   

   cout<<endl<<endl<<"位置2的成绩为:"<<student.get(2)<<endl;   

   cout<<endl<<endl<<"成绩60所在位置为:"<<student.Locate(60)<<endl;   

}

(5)用间接寻址实现

#include<iostream>   

using namespace std;   

const int Maxsize = 100;   

template<class T>   

struct Node 

 {   

    Tdata;   

   Node<T> *next;   

};   

   

template<class T>   

class D{   

   public:   

       D(); 

      D(T score[],int n); 

       virtual ~D(); 

       void print();

       T get(int i); 

       int locate(T x); 

       void insert(int i,T x);

       T Delete(int i);

       bool changeList(int i, T x); 

   private:   

       Node<T> *first;  

       int length; 

       Node<T> *address[Maxsize]; 

};   

   

template<class T>   

D<T>::D()   

{   

   first=new Node<T>;   

   first->next=NULL;   

}   

   

template<class T>   

D<T>::D(T score[],int n)   

{   

   if (n > Maxsize) throw("溢出");   

   Node<T> *s;   

   first = new Node<T>;first->next=NULL; 

   for(int i=n-1;i>=0;i--)     

   {     

       s=new Node<T>;s->data=score[i];  

       s->next=first->next;first->next=s; 

   }   

}   

template<class T>   

D<T>::~D()         

{   

   Node<T> *q;   

   while(first!=NULL)   

   {   

       q=first;   

       first=first->next;   

       delete q;   

   }   

}     

   

template<class T>       

void D<T>::insert(int i,T x)     

{     

   Node<T>*p,*s;int count;     

   p=first;count=0;     

   while(p!=NULL&&count<i-1)     

   {     

        p=p->next;     

       count++;     

   }     

   if(p==NULL)throw"位置非法";   

   s=new Node<T>;s->data=x;   

   s->next=p->next;   

   p->next=s;   

   length++;   

}   

   

template<class T>       

T D<T>::Delete(int i)   

{   

    Node<T> *q,*p; T x; int count;     

   p=first;count=0;

   while(p!=NULL&&count<i-1) 

   {   

       p=p->next;   

       count++;     

   }   

   if(p==NULL||p->next==NULL)throw"位置";

   else{   

       q=p->next;x=q->data;

       p->next=q->next;     

       delete q;     

       return x;   

   }   

}     

     

template<class T>       

T D<T>::get(int i)     

{   

   Node<T>*p;int count;   

   p=first->next;count=1;   

   while(p!=NULL&&count<i)   

   {p=p->next;count++;}   

   if(p==NULL)throw"位置非法";   

   else return p->data;   

}     

     

template<class T>       

int D<T>::locate(T x)     

       {     

           Node<T>*p;int count =1;     

           p=first->next;     

           while(p!=NULL)     

           {     

                if(p->data==x)returncount;     

                p=p->next;     

                count++;     

           }     

           return 0;     

       }     

     

template<class T>       

void D<T>::print()     

       {     

           Node<T>*p;     

           p=first->next;     

           while(p!=NULL)     

           {cout<<p->data<<" ";;     

           p=p->next;     

           }     

       }   

   

void main()     

{   

   float score[8] = {88,89.5,89,79.5,96.5,76,100,88.5 };     

   D<float>student(score, 8);     

   cout << " 学生的所有成绩如下 " << endl;     

   student.print();    

   cout << endl << "删除在位置6的成绩如下 :" << student.Delete(6) <<" , "<<"删除后结果如下:"<< endl;     

   student.print();     

   cout <<  endl <<"在位置7插入成绩99,插入后结果如下:" << endl;     

   student.insert(7,99);     

   student.print();     

   cout << endl   <<"位置5的成绩为:" << student.get(5)<< endl;     

   cout << endl  <<"成绩100所在位置为:" <<student.locate(100) << endl;     

}

2、实现两个集合的相等判定、并、交和差运算

#include<stdio.h>

#include<stdlib.h>

 

int unionSets(int *A, int *B, int lenA, intlenB)

 {

   int i, j;

   int flag, index = lenB;

   int *buffer = (int*)malloc(sizeof(int) * (lenA + lenB));

   for (i = 0; i < lenB; i++) {

       buffer[i] = B[i];

    }

   for (i = 0; i < lenA; i++) {

       flag = 1;

       for (j = 0; j < lenB; j++) {

           if (A[i] == B[j]) {

                flag = 0;

           }

       }

       if (flag) {

           buffer[index] = A[i];

           index++;

       }

    }

   printf("并集:{ ");

   for (i = 0; i < index; i++) {

       printf("%d ", buffer[i]);

    }

   printf("}\n");

}

 

int intersection(int *A, int *B, int lenA,int lenB)

{

   int i, j;

   int flag, index = 0, len = lenA > lenB ? lenA : lenB;

   int *buffer = (int*)malloc(sizeof(int) * len);

   for (i = 0; i < lenA; i++) {

       flag = 0;

       for (j = 0; j < lenB; j++) {

           if (A[i] == B[j]) {

                flag = 1;

           }

       }

       for (j = 0; j < index; j++) {

           if (A[i] == buffer[j]) {

                flag = 0;

           }

       }

       if (flag) {

           buffer[index] = A[i];

           index++;

       }

    }

   printf("交集:{ ");

   for (i = 0; i < index; i++) {

       printf("%d ", buffer[i]);

    }

   printf("}\n");

 

}

 

int complementary(int *A, int *B, int lenA,int lenB)

{

   int i, j;

   int flag, index = 0;

   int *buffer = (int*)malloc(sizeof(int)*lenA);

   for (i = 0; i < lenA; i++) {

       flag = 1;

       for (j = 0; j < lenB; j++) {

           if (A[i] == B[j]) {

                flag = 0;

           }

       }

       if (flag) {

           buffer[index] = A[i];

           index++;

       }

    }

   printf("相对补:{ ");

   for (i = 0; i < index; i++) {

       printf("%d ", buffer[i]);

    }

   printf("}\n");

}

 

int SymDifference(int *A, int *B, int lenA,int lenB)

{

   int i, j;

   int flag, index = 0;

   int *buffer = (int*)malloc(sizeof(int)*lenA);

   for (i = 0; i < lenA; i++) {

       flag = 1;

       for (j = 0; j < lenB; j++) {

           if (A[i] == B[j]) {

                flag = 0;

           }

       }

       if (flag) {

           buffer[index] = A[i];

           index++;

       }

    }

   for (i = 0; i < lenB; i++) {

       flag = 1;

       for (j = 0; j < lenA; j++) {

           if (B[i] == A[j]) {

                flag = 0;

           }

       }

       if (flag) {

           buffer[index] = B[i];

           index++;

       }

    }

   printf("对称差:{ ");

   for (i = 0; i < index; i++) {

       printf("%d ", buffer[i]);

    }

   printf("}\n");

}

 

int equalSets(int *A, int *B, int lenA, intlenB)

{

   int top = 0, i, j, temp;

   int *buffer = (int*)malloc(sizeof(int) * lenA);

   if (lenA != lenB) {

       printf("\nA与B相等\n");

       return 0;

    }

   for (i = 0; i < lenA; i++) {

       for (j = i + 1; j < lenA; j++) {

           if (A[i] < A[j]) {

                temp = A[i];

                A[i] = A[j];

                A[j] = temp;

           }

       }

    }

   for (i = 0; i < lenB; i++) {

       for (j = i + 1; j < lenB; j++) {

           if (B[i] < B[j]) {

                temp = B[i];

                B[i] = B[j];

                B[j] = temp;

           }

       }

    }

   for (i = 0; i < lenA; i++) {

       if (A[i] != B[i]) {

           printf("\nA与B不相等\n");

           return 0;

       }

    }

   printf("相等\n");

}

 

int powerSets(int *A, int lenA)

{

   int i, j;

   int tag, index;

   printf("幂集:{ { 空集 }, ");

   for (tag = 1; tag <= lenA; tag++) {

       for (index = 0; index < lenA - tag + 1; index++) {

           printf("{ ");

           for (i = index,j=0; j < tag; i++,j++) {

                printf("%d ", A[i]);

           }

           printf("},");

       }

    }

   printf("}\n");

}

 

int main()

{

   int *A, *B;

   int lenA, lenB;

   int i;

   printf("输入A,B的元素个数:  ");

   scanf("%d%d", &lenA, &lenB);

 

    A= (int*)malloc(sizeof(int) * lenA);

    B= (int*)malloc(sizeof(int) * lenB);

   printf("输入A的元素\n");

   for (i = 0; i < lenA; i++) {

       scanf("%d", &A[i]);

    }

   getchar();

   printf("输入B的元素\n");

   for (i = 0; i < lenB; i++) {

       scanf("%d", &B[i]);

    }

   equalSets(A, B, lenA, lenB);

   unionSets(A, B, lenA, lenB);

   intersection(A, B, lenA, lenB);

   printf("A对B的");

   complementary(A, B, lenA, lenB);

   printf("B对A的");

   complementary(B, A, lenA, lenB);

   SymDifference(A, B, lenA, lenB);

   printf("A的");

   powerSets(A, lenA);

   printf("B的");

   powerSets(B, lenB);

   system("pause");

   return 0;

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值