数据结构上机实践第三周项目3- 求集合并集
【项目 - 求集合并集】
假设有两个集合 A 和 B 分别用两个线性表 LA 和 LB 表示,即线性表中的数据元素即为集合中的成员。设计算法,用函数unionList(List LA, List LB, List &LC )函数实现该算法,求一个新的集合C=A∪B,即将两个集合的并集放在线性表LC中。
首先还是要建立一个工程,并将之前建立好的算法库作为头文件包进去。文件视角如下:
list.cpp源代码如下:
//*Copyright (c)2017,烟台大学计算机与控制工程学院*
//*All rights reservrd.*
//*文件名称 :list.h*
//*作者:田长航*
//*完成时间:2017年9月21日*
//*版本号:v1.0*
//*问题描述:用于存放各类实现函数*
//*输入描述:无*
//*程序输出:无*
#include <stdio.h>
#include <malloc.h>
#include "list.h"//用数组创建线性表
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; //参数错误时返回falsei--; //将顺序表逻辑序号转化为物理序号for (j=L->length; j>i; j--) //将data[i..n]元素后移一个位置L->data[j]=L->data[j-1];L->data[i]=e; //插入元素eL->length++; //顺序表长度增1return true; //成功插入返回true
}//删除数据元素ListDelete(L,i,e)
bool ListDelete(SqList *&L,int i,ElemType &e)
{int j;if (i<1 || i>L->length) //参数错误时返回falsereturn 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--; //顺序表长度减1return true; //成功删除返回true
}
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个数据元素赋给eif (!LocateElem(LA,e)) //LA中不存在和e相同者,插入到LC中ListInsert(LC,++lena,e);}
}
main.cpp源代码如下:
//*Copyright (c)2017,烟台大学计算机与控制工程学院*
//*All rights reservrd.*
//*文件名称 :main.cpp*
//*作者:田长航*
//*完成时间:2017年9月21日*
//*版本号:v1.0*
//*问题描述:用于存放实现测试函数*
//*输入描述:无*
//*程序输出:无*
#include <stdio.h>
#include <malloc.h>
#include "list.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;
}
list.h源代码如下:
//*Copyright (c)2017,烟台大学计算机与控制工程学院*
//*All rights reservrd.*
//*文件名称 :list.h*
//*作者:田长航*
//*完成时间:2017年9月21日*
//*版本号:v1.0*
//*问题描述:用于存放线性表结构体定义以及函数声明*
//*输入描述:无*
//*程序输出:无*
#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
void unionList(SqList *, SqList *, SqList *&);
#endif
运行结果如下:
数据结构上机实践第三周项目3- 求集合并集相关推荐
- 数据结构上机实践第三周项目2 - 建设“顺序表”算法库
[项目2 - 建设"顺序表"算法库] 领会"0207将算法变程序"部分建议的方法,建设自己的专业基础设施算法库.这一周,建的是顺序表的算法库. 算法库包括两 ...
- 数据结构上机实践第三周项目4(2)—顺序表应用
[项目 - 顺序表应用] 定义一个采用顺序结构存储的线性表,设计算法将所在奇数移到所有偶数的前面,要求算法的时间复杂度为O(n),空间复杂度为O(1). 项目中用到的算法库为list.cpp和list ...
- 数据结构上机实践第三周项目1
本次实践目的:实现顺序表基本运算有算法依据"最小化"的原则进行测试.目的是要测试"建立线性表"的算法CreateList,为查看建表的结果,需要实现" ...
- 数据结构上机实践第八周项目9-广义表算法库及应用
广义表算法库及应用 为了丰富算法库,以应对各类工程的需要,本次实践将进行广义表算法库的建立以及应用. 项目要求一: 建立广义表算法库,包括: ① 头文glist.h,定义数据类型,声明函数: ② ...
- 数据结构上机实践第八周项目6- 猴子选大王(数组版)
猴子选大王(数组版) 在之前的项目中,实现了猴子选大王的项目要求,本次实践,将再次实现这个项目,但是运用数组的方法,做到一题多解,集思广益. 项目要求如下:一群猴子,编号是1,2,3 -m,这群猴子( ...
- 数据结构上机实践第八周项目2- 建立链串的算法库
建立链串的算法库 一般每一种数据结构都不会局限于在连续空间内的存取,那我们的串自然也不反常,本次实践将建立链串的算法库,应用于有需求的工程当中,提高程序的容错性. 本次实践依然会用到多文件组织工程的建 ...
- 数据结构上机实践第七周项目1 - 自建算法库——顺序环形队列
自建算法库--顺序环形队列 本次实践将建立顺序环形队列的算法库,用于之后的工程中 实现源代码如下: 1.squeue.h /* copyright (t) 2017,烟台大学计算机学院 *All ri ...
- 数据结构上机实践第11周项目1 - 图基本算法库
图基本算法库 本次实践将建立图的基本算法库,用以丰富算法库,灵活应对更多样的工程,所谓"技多不压身",算法亦如此. 本次实践将运用多文件组织工程的建立,点击此处参考.(编译 ...
- 数据结构上机实践第十周项目2 - 用二叉树求解代数表达式
用二叉树求解代数表达式 本次实践所用到的二叉树算法库点击此处参考 编译环境(VC++6.0) 项目要求如下: 用二叉树来表示代数表达式,树的每一个分支节点代表一个运算符,每一个叶子节点代表一个运算数( ...
最新文章
- 从零开始入门 K8s | 应用编排与管理:Job DaemonSet
- android 添加子view,Android基于Window.ID_ANDROID_CONTENT给定id添加子View
- 【洞见】关于PMP个人认识和理解
- 为什么你的引用字体颜色那么淡? CSDN排版、图片尺寸、字体颜色、字体等
- Nginx的TCP运行时健康检查
- 如何使用go打出hell word
- 零侵入性:一个注解,优雅的实现循环重试功能
- Kafka笔记1(初步认识)
- python中eval函数作用
- 纪念我的第一次面试——华为研发类面试
- 上位机控制PWM占空比
- 英文论文写作必备网站
- apollo 阿波罗使用
- IDEA-局部变量、成员变量
- 瞬时转速 matlab,基于瞬时转速的发动机故障诊断研究
- python熊猫入门
- 什么是分布式事务(CAP原则、BASE理论、2PC|3PC协议、XA|AT等模式)
- ROS通信机制(一) —— 话题(topic)与msg文件
- [C++学习] effective c++ 笔记 pass by value ,pass by reference
- 我来回答,害怕别人赚钱到底是一种什么样的心理