第三周 项目3-求集合并集
来源:互联网 发布:mac制作win7安装盘教程 编辑:程序博客网 时间:2024/04/29 07:55
/*
*Copyright (c)2016,烟台大学计算机学院
*All rights reserved.
*文件名称:传写.cpp
*作者:李欣
*完成日期:2016年9月21日
*版本号:v1.0
*
*问题描述:假设有两个集合A和B分别用两个线性表LA和LB表示,即线性表中的数据元素即为集合中的成员。设计算法,用函数unionList(List LA,List LB,List &LC)函数实现该算法,求一个新的集合C=A∪B,即将两个集合的并集放在线性表LC中
*输入描述:各个集合
*输出描述:多个集合的并集
*/
main.cpp
#include "h.h"
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;
}
s.cpp
#include "h.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;
}
//初始化线性表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");
}
//求某个数据元素值GetElem(L,i,e)
bool GetElem(SqList *L,int i,ElemType &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
}
h.h
#ifndef LIST_H_INCLUDED
#define LIST_H_INCLUDED
#include<stdio.h>
#include<malloc.h>
#include<stdio.h>
#define MaxSize 50
typedef int ElemType;
typedef struct
{
ElemType data[MaxSize];
int length;
} SqList;
void unionList(SqList *LA, SqList *LB, SqList *&LC);
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 LocateElem(SqList *L, ElemType e);//按元素值查找LocateElem(L,e)
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
运行结果:
知识点总结:
运用了求集合的并集,其中还用到了算法库和多文件的发法
学习心得:
不管难不难,总是要一步步来的
- 第三周--【项目 - 求集合并集】
- 第三周项目--求集合并集
- 第三周—项目3 求集合并集
- 第三周项目3求集合并集
- 第三周-项目3-求两集合并集
- (第三周项目3)求集合并集
- 第三周项目3—求集合并集
- 第三周 项目3-求集合并集
- 第三周项目3—求集合并集
- 第三周 项目3-求集合并集
- 第三周项目3 求集合并集
- 第三周—项目3 - 求集合并集
- 第三周 项目3 - 求集合并集
- 第三周项目3-求集合并集
- 第三周项目3-求集合并集
- 第三周项目3-求集合并集
- 第三周项目3-求集合并集
- 第三周实践项目3--求集合并集
- 从源码入手理解Window和WindowManager
- JavaScript排序之归并排序
- App瘦身最佳实践(分析了微信、淘宝、微博图片文件的放法)
- RPC概念和应用
- RecyclerView的使用教程2
- 第三周 项目3-求集合并集
- kernel 不能找到xz格式的initramfs
- translate与REGEXP
- codeforces 501C (拓扑排序另类)
- Spark 2.0系列之SparkSession详解
- js回车键实现登录
- 从AVFrame中取出音频裸数据到一个buffer中
- 灵活布置、可二次开发的乌云公开漏洞及知识库搜索
- 血的教训···········复用那些事