C语言通过顺序表来实现集合的运算

2025-10-28 12:29:37

1、主要的功能:

C语言通过顺序表来实现集合的运算

2、顺序表的构建:

C语言通过顺序表来实现集合的运算

3、构建一个主函数,并通过switch语句来实现功能选择:

C语言通过顺序表来实现集合的运算

4、由上一步可知,定义了三个集合:La , Lb , Lc ;类型为 SqList 的结构体:

5、菜单功能函数编写:

C语言通过顺序表来实现集合的运算

6、集合初始化函数的编写:

C语言通过顺序表来实现集合的运算

7、集合元素(排序/输出)函数编写:

C语言通过顺序表来实现集合的运算

8、集合A和集合B的并集函数编写:

C语言通过顺序表来实现集合的运算

9、完整代码:

#include <stdio.h>

#include <stdlib.h>

//符号常量定义

//返回值符号常量

//顺序表符号常量

#define OK         1

#define ERROR      0

#define OVERFLOW  -2

#define  INIT_SIZE      100

#define  LIST_INCREMENT 10

//数据类型定义

typedef  int  Status;

typedef  int  ElemType;

//数据存放从0号位置开始

typedef struct        //顺序表的(定义)类型

{

    ElemType  *elem;

    int       length;

    int       listsize;

}SqList;

Status InitSqList(SqList &L) //初始化顺序表函数 

{

L.elem = (ElemType *)malloc(INIT_SIZE * sizeof(ElemType));

if(L.elem == NULL)

       exit(OVERFLOW);

       L.length = 0;

       L.listsize = INIT_SIZE;

       return OK;

}

Status InputData2Set(SqList &L) //顺序表的信息录入函数 

{

    int n;

    int i;

    printf("集合数据个数:");

    scanf("%d", &n);

    if(n <= 0)

    {

       printf("\n数据个数错误!\n");

       return ERROR;

    }

    if(n > L.listsize)

    {

         L.elem = (ElemType *)realloc(L.elem, n * sizeof(ElemType));

         if(L.elem == NULL)

         return ERROR;

         L.listsize = n;

     }

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

    {

        printf("第 %d 个数据:", i + 1);

        scanf("%d", L.elem + i);    //&L.elem[i]

    }

       L.length = n;

       return OK;

}

void SortSqList(SqList L) 

{

    int i, j;

    for(i = 0; i < L.length; i++)

        for(j = i + 1; j < L.length; j++)

            if(L.elem[i] > L.elem[j])

            {

                 L.elem[i] = L.elem[i] + L.elem[j];

                 L.elem[j] = L.elem[i] - L.elem[j];

                 L.elem[i] = L.elem[i] - L.elem[j];

             }

}

void OutputSetData(SqList L) 

{

     int i;

     printf("\n集合的数据个数:%d!\n", L.length);

     if(L.length == 0)

           return;

     SortSqList(L);

     printf("\n集合中的数据为:");

     for(i = 0; i < L.length; i++)

           printf(" %d ", L.elem[i]);

     printf("\n\n");

}

void combine(SqList La,SqList Lb,SqList &Lc)

{

     int i,j;

     Lc.length = 0;

     for(i=0;i<La.length;++i)

     {

          for(j=0;j<=Lc.length;++j)

               if(La.elem[i] == Lc.elem[j])

                   break;

          if(j >= Lc.length)

          {

              Lc.elem[Lc.length] = La.elem[i];

              ++Lc.length;

           }

     }

     for(i=0;i<Lb.length;++i)

     {

            for(j=0;j<=Lc.length;++j)

                  if(Lb.elem[i] == Lc.elem[j])

                          break;

             if(j >= Lc.length)

             {

                    Lc.elem[Lc.length] = Lb.elem[i];

                    ++Lc.length;

             }

      }

     Lc.listsize = Lc.length;

}

 void showmenu()           

{  

      printf("\n**********************************************************\n");

      printf("\t\t1  集合A数据输入\n\n");

      printf("\t\t2  集合B数据输入\n\n");

      printf("\t\t3  集合A数据显示\n\n");

      printf("\t\t4  集合B数据显示\n\n");

      printf("\t\t5  集合A和集合B的并集\n\n");

      printf("\t\t6  集合A和集合B的交集\n\n");

      printf("\t\t7  集合A和集合B的差集\n\n");

      printf("\t\t0  退出系统\n\n");

      printf("**********************************************************\n");

      printf("\n");

int main()

{

      SqList La, Lb, Lc;

      if((InitSqList(La) == OK) && (InitSqList(Lb) == OK) && (InitSqList(Lc)        == OK))

             printf("\n顺序表初始化成功!\n");

      else

     {

             printf("\n顺序表初始化shibai!\n");

             return 1;

     }

     int choice = -1;

     while(choice != 0)

     {

           system("cls");

           fflush(stdin);

           showmenu();

           printf("\t\t功能选择:");

           scanf("%d", &choice);

           switch(choice)

           {

                 case 1:{

                       if(La.length > 0)

                       {       

                               printf("\n集合中存在数据,直接覆盖原来的数据,之后重新输入新数据!");

                               La.length = 0;

                        }

                        if(InputData2Set(La) == OK)

                               printf("\n集合A中数据输入成功!\n");

                        else

                               printf("\n集合A中数据输入失败!\n");

                        system("pause");

                        break;}

                  case 2:{

                       if(Lb.length > 0)

                       {

                                printf("\n集合中存在数据,直接覆盖原来的数据,之后重新输入新数据!");

                                Lb.length = 0;

                       }

                       if(InputData2Set(Lb) == OK)

                                printf("\n集合B中数据输入成功!\n");

                       else

                                printf("\n集合B中数据输入失败!\n");

                       system("pause");

                       break;}

                case 3:{

                        OutputSetData(La);

                        system("pause");

                        break;}

                 case 4:{

                         OutputSetData(Lb);

                         system("pause");

                         break;}

                 case 5:{

                        combine(La,Lb,Lc);

                        OutputSetData(Lc);

                        system("pause");

                        break;} 

                  case 0:

                        exit(0);

                  default:printf("\n功能选择错误,请重新选择!");

            }

     }

     return 1;

}

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢