zoukankan      html  css  js  c++  java
  • 第3周实践项目3 求集合并集

    main.cpp

    #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);
        }
    }
    //用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;
    }
    
    list.h

    #ifndef LIST_H_INCLUDED
    #define LIST_H_INCLUDED
    
    #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)#endif // LIST_H_INCLUDED
    #endif
    
    list.cpp
    #include <stdio.h>
    #include <malloc.h>
    #include "list.h"
    //用数组创建线性表
    void CreateList(SqList *&L, ElemType a[], int n)
    {
        int i;
        L=(SqList *)malloc(sizeof(SqList));//注意c语言的开辟动态内存的格式
        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);//为空时返回1
    }
    
    //求线性表的长度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("
    ");
    }
    
    //求某个数据元素值GetElem(L,i,e)
    bool GetElem(SqList *L,int i,ElemType &e)//引用,e
    {
        if (i<1 || i>L->length)  return false;
        e=L->data[i-1];
        return true;
    }
    
    //按元素值查找LocateElem(L,e)
    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;
    }
    
    //插入数据元素ListInsert(L,i,e)
    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
    }
    
    //删除数据元素ListDelete(L,i,e)
    bool ListDelete(SqList *&L,int i,ElemType &e)
    {
        int j;
        if (i<1 || i>L->length)  //参数错误时返回false
            return false;
        i--;        //将顺序表逻辑序号转化为物理序号
        e=L->data[i];
        for (j=i; j<L->length-1; j++) //将data[i..n-1]元素前移
            L->data[j]=L->data[j+1];
        L->length--;              //顺序表长度减1
        return true;              //成功删除返回true
    }
    



  • 相关阅读:
    Java蛇形数组的简单实现代码
    Android Studio生成javadoc出错的解决办法
    AngularJS指令嵌套时link函数执行顺序的问题
    [转]如果我有jQuery背景,我应该如何切换到AngularJS的思维模式?
    扩展ViewFlow避免和ViewPager滑动冲突,同时支持无限循环,并完美和CircleFlowIndicator结合
    人机交互的新方向:智能聊天机器人
    利用python自动清除Android工程中的多余资源
    巧用svn create patch(打补丁)方案解决定制版需求
    【Android开发坑系列】之经常被忽略的背景图片内存泄露
    【Android开发坑系列】之try-catch
  • 原文地址:https://www.cnblogs.com/sxy201658506207/p/7586270.html
Copyright © 2011-2022 走看看