第三周项目3

来源:互联网 发布:铁路运输数据 编辑:程序博客网 时间:2024/06/05 19:26

/*  

*Copyright  (c)2017,烟台大学计算机与控制工程学院      

*All rights reservrd.      

*文件名称 :test.cpp      

*作者:杜昕晔  

*完成时间:2017年9月7日      

*版本号:v1.0      

*问题描述:求集合并集

问题及代码:

#include "list.h"#include <stdio.h>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);    }}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;  }  void DispList(SqList *L)       //输出线性表DispList(L)  {      int i;      if (ListEmpty(L))          return;      for (i=0; i<L->length; i++)          printf("%d ",L->data[i]);      printf("\n");  } bool ListEmpty(SqList *L)      //判定是否为空表ListEmpty(L)  {      return(L->length==0);  }  int ListLength(SqList *L)      //求线性表的长度ListLength(L)  {      return(L->length);  }  bool GetElem(SqList *L,int i,ElemType &e)      //求某个数据元素值GetElem(L,i,e)  {      if (i<1 || i>L->length)          return false;      e=L->data[i-1];      return true;  }  int LocateElem(SqList *L, ElemType e)      //按元素值查找LocateElem(L,e)  {      int i=0;      while (i<L->length && L->data[i]!=e) i++;      if (i>=L->length)          return 0;      else          return i+1;  }  void InitList(SqList *&L)           //初始化线性表  {      L=(SqList *)malloc(sizeof(SqList));      L->length=0;  }  bool ListInsert(SqList *&L,int i,ElemType e)  {      int j;      if(i<1||i>L->length+1)          return false;      i--;      for(j=L->length;j>i;j--)          L->data[j]=L->data[j-1];      L->data[i]=e;      L->length++;      return true;  }  bool ListDelete(SqList *&L,int i,ElemType &e)  {      int j;      if(i<1||i>L->length)          return false;      i--;      e=L->data[i];      for(j=i;j<L->length-1;j++)          L->data[j]=L->data[j+1];      L->length--;      return true;  }  void DestroyList(SqList *&L)  {      free(L);  }  //用main写测试代码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;}

运行结果:


学习心得:

巩固了顺序表的运算的代码,进一步了解了其使用方法。