采用递增有序的顺序表表示集合,求解两个集合的交、并集
来源:互联网 发布:p相片软件下载 编辑:程序博客网 时间:2024/06/05 18:08
采用递增有序的顺序表表示集合,求解两个集合的交、并集
(1)定义顺序表的存储结构;
(2)实现存储递增有序集合的顺序表的建立、求交集运算;
// main.cpp
// 数据结构作业
//
// Created by 周 on 16/10/7.
// Copyright © 2016年 周. All rights reserved.
//
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#define LIST_INIT_SZIE 100
//顺序表的存储结构
typedef struct{
int *elem;
int length;
}SqList;
//构造一个空的线性表
int InitList(SqList &l)
{
l.elem=(int *)malloc(LIST_INIT_SZIE *sizeof(int));
if(!l.elem)return -1;
l.length =0;
return 0;
}
//用e返回L中第i个数据元素的值
void GetElem(SqList l,int i,int &e)
{
e=l.elem[i];
}
//打印顺序表l中的元素
void DispalyElem(SqList l)
{
for(int i=0;i<l.length;i++)
printf("%d ",l.elem[i]);
printf("\n");
}
//插入操作,在l中第i个位置之前插入新的元素e;
int ListInsert(SqList &l,int i,int e)
{
if(i<1 || i>l.length+1)return -1;
int *q = &(l.elem[i-1]);
for(int *p = &(l.elem[l.length-1]);p>=q;--p)
*(p+1) = *p;
*q=e;
++l.length;
return 0;
}
//删除操作,在线性表l中删除第i个元素并用e返回其值;
int ListDelete(SqList &l,int i,int e)
{
if(i<1 || i>l.length+1)return -1;
int *p = &(l.elem[i-1]);
e=*p;
int *q=l.elem+l.length-1;
for(++p;p<=q;++p)
*(p-1)=*p;
--l.length;
return 0;
}
//查找操作,在线性表l中查找与e相同的第一个元素,并返回其下标
int LocateElem(SqList l,int e)
{
int i;
for(i=0;i<l.length;i++)
if(l.elem[i]==e)
return i+1;
return 0;
}
/*------------函数功能:求两个线性表的交集------------*/
void Intersection(SqList A,SqList B,SqList &C)
{
printf("求线性表的交集\n");
int i,j,k=0;
for(i=0;i<A.length;i++)
{
j=0;
while(j<B.length && B.elem[j]!=A.elem[i])
j++;
if(j<B.length)
{
C.elem[k++]=A.elem[i];
}
}
C.length=k;
}
/*------------函数功能:求两个线性表的并集------------*/
void MergeList(SqList A,SqList B,SqList &C)
{
printf("求线性表的并集\n");
int res=InitList(C);
int i=0,j=0,k=0;//?
int ai,bi;
while((i<=A.length-1)&&(j<=B.length-1))
{
GetElem(A,i,ai);
GetElem(B,j,bi);
if(ai<=bi)
{
C.elem[k++]=A.elem[i++];
}
else
{
C.elem[k++]=B.elem[j++];
}
}
while(i<=A.length-1)
{
GetElem(A,i,ai);
C.elem[k++]=A.elem[i++];
}
while(j<=B.length-1)
{
GetElem(B,j,bi);
C.elem[k++]=B.elem[j++];
}
C.length=k;
}
int main(int argc,const char * argv[]) {
SqList A,B,C;
int res;
res=InitList(A);//初始化线性表A;
res=InitList(B);//初始化线性表B;
//i=InitList(C);
printf("输入线性表A元素个数:\n");
scanf("%d",&A.length);
printf("输入线性表A中的元素:\n");
for(int j=0;j<A.length;j++)
{
scanf("%d",&A.elem[j]);
}
printf("输入线性表B元素个数:\n");
scanf("%d",&B.length);
printf("输入线性表B中的元素:\n");
for(int j=0;j<B.length;j++)
{
scanf("%d",&B.elem[j]);
}
Intersection(A,B,C);
DispalyElem(C);
MergeList(A,B,C);
DispalyElem(C);
return 0;
}
- 采用递增有序的顺序表表示集合,求解两个集合的交、并集
- 递增有序的顺序表表示集合,求解两个集合的交集 并集 差集(c语言实现)
- 求集合(用有序单链表表示)的并、交和差运算
- 在以单链表表示的正整数的有序集合上,实现集合的并、交和差运算
- 线性表的顺序表 实现,及应用-----西文排序+前m个元素和后n个元素进行整体互换+构造纯集合+有序表求纯集合+循环有序链表表示两集合的并集
- 有序链表表示的集合的插入操作
- 求有序单链表表示集合的交集
- 集合的并、交、差
- bash实现两个文件的并交减集合操作
- 计算集合 两个圆的面积交与并
- 顺序表中两个集合的并集
- 数据结构 用单链表表示集合的并交差运算
- 编制一个能演示执行集合的并、交和差运算的程序。(有序表)
- 编制一个能演示执行集合的并、交和差运算的程序。(有序表)
- 集合的交、并、差的实现
- 集合的交、并、差的实现
- astar 集合的交与并
- 集合的交 并 差 补 运算
- QT-组件布局
- 通过expect scp 命令分发文件到其它机器
- iOS判断是否有权限访问相机,相册,定位
- D3D9---2D编程(画矩形)
- 算法分析之半数集自底向上
- 采用递增有序的顺序表表示集合,求解两个集合的交、并集
- java内存模式 -- 栈和堆
- activemq
- String equals源码分析
- 数组、链表、哈希表
- C:\fakepath\文件路径问题
- C#通过MySqlHelper进行多条数据查询
- NDK编译报错 undefined reference to 'vtable for
- SVN使用教程之——分支、合并