第三周【项目3

来源:互联网 发布:淘宝店铺上下架时间 编辑:程序博客网 时间:2024/06/05 09:28

/*  *Copyright (c)2017,烟台大学计算机与控制工程学院  *All rights reserved.  *文件名称:  *作    者:李佳骏 *完成日期:2017年9月20日  *版 本 号:v1.0  *问题描述:建设“顺序表”算法库   *输入描述:函数输入*程序输出:函数输出*/  


问题及描述假设有两个集合 A 和 B 分别用两个线性表 LA 和 LB 表示,即线性表中的数据元素即为集合中的成员。设计算法,用函数unionList(List LA, List LB, List &LC )函数实现该算法,求一个新的集合C=A∪B,即将两个集合的并集放在线性表LC中。

#include<stdio.h>       #include<malloc.h>       #define MaxSize 50       typedef int ElemType;      typedef struct      {          ElemType data[MaxSize];         int length;      } SqList;      void CreateList(SqList *&L, ElemType a[], int n);//用数组创建线性表       void InitList(SqList *&L);//初始化线性表InitList(L)       void DestroyList(SqList *&L);//销毁线性表DestroyList(L)       bool ListEmpty(SqList *L);//判定是否为空表ListEmpty(L)       int ListLength(SqList *L);//求线性表的长度ListLength(L)       void DispList(SqList *L);//输出线性表DispList(L)       bool GetElem(SqList *L,int i,ElemType &e);//求某个数据元素值GetElem(L,i,e)       int LocateElem(SqList *L, ElemType e);//按元素值查找LocateElem(L,e)       bool ListInsert(SqList *&L,int i,ElemType e);//插入数据元素ListInsert(L,i,e)       bool ListDelete(SqList *&L,int i,ElemType &e);//删除数据元素ListDelete(L,i,e)      void unionList(SqList *LA, SqList *LB, SqList *&LC);//合并    void CreateList(SqList *&L, ElemType a[], int n)      {          int i;          L=(SqList *)malloc(sizeof(SqList));          for (i=0; i<n; i++)             L->data[i]=a[i];         L->length=n;      }            //初始化线性表InitList(L)       void InitList(SqList *&L)   //引用型指针       {          L=(SqList *)malloc(sizeof(SqList));  //分配存放线性表的空间           L->length=0;      }            //销毁线性表DestroyList(L)       void DestroyList(SqList *&L)      {          free(L);      }           //判定是否为空表ListEmpty(L)       bool ListEmpty(SqList *L)      {          return(L->length==0);      }            //求线性表的长度ListLength(L)       int ListLength(SqList *L)      {          return(L->length);      }            //输出线性表DispList(L)       void DispList(SqList *L)      {          int i;          if (ListEmpty(L)) return;          for (i=0; i<L->length; i++)              printf("%d ",L->data[i]);          printf("\n");      }      bool GetElem(SqList *L,int i,ElemType &e)      {          if (i<1 || i>L->length)  return false;          e=L->data[i-1];          return true;      }                bool ListInsert(SqList *&L,int i,ElemType e)      {          int j;          if (i<1 || i>L->length+1)              return false;   //参数错误时返回false           i--;            //将顺序表逻辑序号转化为物理序号           for (j=L->length; j>i; j--) //将data[i..n]元素后移一个位置               L->data[j]=L->data[j-1];          L->data[i]=e;           //插入元素e           L->length++;            //顺序表长度增1           return true;            //成功插入返回true       }      int LocateElem(SqList *L, ElemType e)      {         int i=0;          while (i<L->length && L->data[i]!=e) i++;          if (i>=L->length)  return 0;          else  return i+1;      }      void unionList(SqList *LA, SqList *LB, SqList *&LC)    {        int lena,i;        ElemType e;        InitList(LC);        for (i=1; i<=ListLength(LA); i++) //将LA的所有元素插入到Lc中        {            GetElem(LA,i,e);            ListInsert(LC,i,e);        }        lena=ListLength(LA);         //求线性表LA的长度        for (i=1; i<=ListLength(LB); i++)        {            GetElem(LB,i,e);         //取LB中第i个数据元素赋给e            if (!LocateElem(LA,e)) //LA中不存在和e相同者,插入到LC中                ListInsert(LC,++lena,e);        }    }    int main()    {        SqList *sq_a, *sq_b, *sq_c;        ElemType a[6]= {5,8,7,2,4,9};        CreateList(sq_a, a, 6);        printf("LA: ");        DispList(sq_a);            ElemType b[6]= {2,3,8,6,0};        CreateList(sq_b, b, 5);        printf("LB: ");        DispList(sq_b);        unionList(sq_a, sq_b, sq_c);        printf("LC: ");        DispList(sq_c);        return 0;    } 
运行及截图


原创粉丝点击