编制一个能演示执行集合的并、交和差运算的程序。(有序表)
2010-10-21 23:22
267 查看
编制一个能演示执行集合的并、交和差运算的程序。
Code:
#include "F:/SqList.cpp"
#include<iostream.h>
#include<string.h>
void UnionList(SqList *LA,SqList *LB,SqList *&LC)//并集
{
int i=0,j=0,k=0; //i、j、k分别作为LA、LB、LC的下标
LC=(SqList *)malloc(sizeof(SqList));
LC->length=0;
while (i<LA->length && j<LB->length)
{
if (LA->data[i]<LB->data[j])
{
LC->data[k]=LA->data[i];
i++;k++;
}
else if(LA->data[i]==LB->data[j])
{
LC->data[k]=LA->data[i];
i++;k++;j++;
}
else if(LA->data[i]>LB->data[j])
{
LC->data[k]=LB->data[j];
k++;j++;
}
}
while (i<LA->length) //LA尚未扫描完,将其余元素插入LC中
{
LC->data[k]=LA->data[i];
i++;k++;
}
while (j<LB->length) //LB尚未扫描完,将其余元素插入LC中
{
LC->data[k]=LB->data[j];
j++;k++;
}
LC->length=k;
}
void Commnode(SqList *LA,SqList *LB,SqList *&LC)//交集
{
int i=0,j=0,k=0;
LC=(SqList *)malloc(sizeof(SqList));
LC->length=0;
while(i<LA->length&&j<LB->length)
{
if(LA->data[i]<LB->data[j])
{
i++;
}
else if(LA->data[i]==LB->data[j])
{
LC->data[k]=LA->data[i];
i++;j++;k++;
}
else if(LA->data[i]>LB->data[j])
{
j++;
}
}
LC->length=k;
}
void Subtraction(SqList *LA,SqList *LB,SqList *&LC)//差集
{
int i=0,j=0,k=0;
LC=(SqList *)malloc(sizeof(SqList));
LC->length=0;
while(i<LA->length&&j<LB->length)
{
if(LA->data[i]<LB->data[j])
{
LC->data[k]=LA->data[i];
i++;k++;
}
else if(LA->data[i]==LB->data[j])
{
i++;j++;
}
else if(LA->data[i]>LB->data[j])
{
j++;
}
}
while(i<LA->length)
{
LC->data[k]=LA->data[i];
i++;k++;
}
LC->length=k;
}
void main()
{ char a[10],b[10];
SqList *L1,*L2,*L3;
int a1,b1;
InitList(L1);
InitList(L2);
InitList(L3);
int A=0;
do{
cout<<"请输入集合A:";
cin>>a;
a1=strlen(a);
for(int i=0;i<a1;i++)
ListInsert(L1,a[i]);
if(a1>ListLength(L1))
{
cout<<"注意 ! 元素有重复"<<endl;
DestroyList(L1);InitList(L1);
}
else if(a1==ListLength(L1))A=1;
}while(A==0);
int B=0;
do{
cout<<"请输入集合B:";
cin>>b;
b1=strlen(b);
for(int j=0;j<b1;j++)
ListInsert(L2,b[j]);
if(b1>ListLength(L2))
{
cout<<"注意 ! 元素有重复"<<endl;
DestroyList(L2);InitList(L2);
}
else if(b1==ListLength(L2)) B=1;
}while(B==0);
cout<<"集合A的长度:"<<a1<<endl;
cout<<"集合B的长度:"<<b1<<endl;
cout<<"集合A在顺序表中的结构:"<<endl;
DispList(L1);
cout<<"集合B在顺序表中的结构:"<<endl;
DispList(L2);
cout<<"并集:"<<endl;
UnionList(L1,L2,L3);
DispList(L3);
cout<<"交集:"<<endl;
Commnode(L1,L2,L3);
DispList(L3);
cout<<"差集:"<<endl;
Subtraction(L1,L2,L3);
DispList(L3);
}
//SqList.cpp文件
#include <stdio.h>
#include <malloc.h>
#define MaxSize 50
typedef char ElemType;
typedef struct
{ ElemType data[MaxSize]; //存放顺序表元素
int length; //存放顺序表的长度
} SqList; //顺序表的类型定义
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 InitList(SqList *&L) //初始化线性表
{
L=(SqList *)malloc(sizeof(SqList)); //分配存放线性表的空间
L->length=0;
}
void DestroyList(SqList *&L) //销毁线性表
{
free(L);
}
int ListEmpty(SqList *L) //判线性表是否为空表
{
return(L->length==0);
}
int ListLength(SqList *L) //求线性表的长度
{
return(L->length);
}
void DispList(SqList *L) //输出线性表
{
int i;
if (ListEmpty(L)) return;
for (i=0;i<L->length;i++)
printf("%c ",L->data[i]);
printf("/n");
}
int GetElem(SqList *L,int i,ElemType &e) //求线性表中某个数据元素的值
{
if (i<1 || i>L->length)
return 0;
e=L->data[i-1];
return 1;
}
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;
}
int ListInsert(SqList *&L,int i,ElemType e) //插入数据元素
{
int j;
if (i<1 || i>L->length+1)
return 0;
i--; //将顺序表位序转化为elem下标
for (j=L->length;j>i;j--) //将data[i]及后面元素后移一个位置
L->data[j]=L->data[j-1];
L->data[i]=e;
L->length++; //顺序表长度增1
return 1;
}
int ListInsert(SqList *&L,ElemType e) //有序表
{
int i=0,j;
while(i<L->length&&L->data[i]<e)i++;
if(L->data[i]==e)return 0;
for(j=ListLength(L);j>i;j--)
L->data[j]=L->data[j-1];
L->data[i]=e;
L->length++;
return 1;
}
int ListDelete(SqList *&L,int i,ElemType &e) //删除数据元素
{
int j;
if (i<1 || i>L->length)
return 0;
i--; //将顺序表位序转化为elem下标
e=L->data[i];
for (j=i;j<L->length-1;j++) //将data[i]之后的元素前移一个位置
L->data[j]=L->data[j+1];
L->length--; //顺序表长度减1
return 1;
}
Code:
#include "F:/SqList.cpp"
#include<iostream.h>
#include<string.h>
void UnionList(SqList *LA,SqList *LB,SqList *&LC)//并集
{
int i=0,j=0,k=0; //i、j、k分别作为LA、LB、LC的下标
LC=(SqList *)malloc(sizeof(SqList));
LC->length=0;
while (i<LA->length && j<LB->length)
{
if (LA->data[i]<LB->data[j])
{
LC->data[k]=LA->data[i];
i++;k++;
}
else if(LA->data[i]==LB->data[j])
{
LC->data[k]=LA->data[i];
i++;k++;j++;
}
else if(LA->data[i]>LB->data[j])
{
LC->data[k]=LB->data[j];
k++;j++;
}
}
while (i<LA->length) //LA尚未扫描完,将其余元素插入LC中
{
LC->data[k]=LA->data[i];
i++;k++;
}
while (j<LB->length) //LB尚未扫描完,将其余元素插入LC中
{
LC->data[k]=LB->data[j];
j++;k++;
}
LC->length=k;
}
void Commnode(SqList *LA,SqList *LB,SqList *&LC)//交集
{
int i=0,j=0,k=0;
LC=(SqList *)malloc(sizeof(SqList));
LC->length=0;
while(i<LA->length&&j<LB->length)
{
if(LA->data[i]<LB->data[j])
{
i++;
}
else if(LA->data[i]==LB->data[j])
{
LC->data[k]=LA->data[i];
i++;j++;k++;
}
else if(LA->data[i]>LB->data[j])
{
j++;
}
}
LC->length=k;
}
void Subtraction(SqList *LA,SqList *LB,SqList *&LC)//差集
{
int i=0,j=0,k=0;
LC=(SqList *)malloc(sizeof(SqList));
LC->length=0;
while(i<LA->length&&j<LB->length)
{
if(LA->data[i]<LB->data[j])
{
LC->data[k]=LA->data[i];
i++;k++;
}
else if(LA->data[i]==LB->data[j])
{
i++;j++;
}
else if(LA->data[i]>LB->data[j])
{
j++;
}
}
while(i<LA->length)
{
LC->data[k]=LA->data[i];
i++;k++;
}
LC->length=k;
}
void main()
{ char a[10],b[10];
SqList *L1,*L2,*L3;
int a1,b1;
InitList(L1);
InitList(L2);
InitList(L3);
int A=0;
do{
cout<<"请输入集合A:";
cin>>a;
a1=strlen(a);
for(int i=0;i<a1;i++)
ListInsert(L1,a[i]);
if(a1>ListLength(L1))
{
cout<<"注意 ! 元素有重复"<<endl;
DestroyList(L1);InitList(L1);
}
else if(a1==ListLength(L1))A=1;
}while(A==0);
int B=0;
do{
cout<<"请输入集合B:";
cin>>b;
b1=strlen(b);
for(int j=0;j<b1;j++)
ListInsert(L2,b[j]);
if(b1>ListLength(L2))
{
cout<<"注意 ! 元素有重复"<<endl;
DestroyList(L2);InitList(L2);
}
else if(b1==ListLength(L2)) B=1;
}while(B==0);
cout<<"集合A的长度:"<<a1<<endl;
cout<<"集合B的长度:"<<b1<<endl;
cout<<"集合A在顺序表中的结构:"<<endl;
DispList(L1);
cout<<"集合B在顺序表中的结构:"<<endl;
DispList(L2);
cout<<"并集:"<<endl;
UnionList(L1,L2,L3);
DispList(L3);
cout<<"交集:"<<endl;
Commnode(L1,L2,L3);
DispList(L3);
cout<<"差集:"<<endl;
Subtraction(L1,L2,L3);
DispList(L3);
}
//SqList.cpp文件
#include <stdio.h>
#include <malloc.h>
#define MaxSize 50
typedef char ElemType;
typedef struct
{ ElemType data[MaxSize]; //存放顺序表元素
int length; //存放顺序表的长度
} SqList; //顺序表的类型定义
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 InitList(SqList *&L) //初始化线性表
{
L=(SqList *)malloc(sizeof(SqList)); //分配存放线性表的空间
L->length=0;
}
void DestroyList(SqList *&L) //销毁线性表
{
free(L);
}
int ListEmpty(SqList *L) //判线性表是否为空表
{
return(L->length==0);
}
int ListLength(SqList *L) //求线性表的长度
{
return(L->length);
}
void DispList(SqList *L) //输出线性表
{
int i;
if (ListEmpty(L)) return;
for (i=0;i<L->length;i++)
printf("%c ",L->data[i]);
printf("/n");
}
int GetElem(SqList *L,int i,ElemType &e) //求线性表中某个数据元素的值
{
if (i<1 || i>L->length)
return 0;
e=L->data[i-1];
return 1;
}
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;
}
int ListInsert(SqList *&L,int i,ElemType e) //插入数据元素
{
int j;
if (i<1 || i>L->length+1)
return 0;
i--; //将顺序表位序转化为elem下标
for (j=L->length;j>i;j--) //将data[i]及后面元素后移一个位置
L->data[j]=L->data[j-1];
L->data[i]=e;
L->length++; //顺序表长度增1
return 1;
}
int ListInsert(SqList *&L,ElemType e) //有序表
{
int i=0,j;
while(i<L->length&&L->data[i]<e)i++;
if(L->data[i]==e)return 0;
for(j=ListLength(L);j>i;j--)
L->data[j]=L->data[j-1];
L->data[i]=e;
L->length++;
return 1;
}
int ListDelete(SqList *&L,int i,ElemType &e) //删除数据元素
{
int j;
if (i<1 || i>L->length)
return 0;
i--; //将顺序表位序转化为elem下标
e=L->data[i];
for (j=i;j<L->length-1;j++) //将data[i]之后的元素前移一个位置
L->data[j]=L->data[j+1];
L->length--; //顺序表长度减1
return 1;
}
相关文章推荐
- 编制一个能演示执行集合的并、交和差运算的程序。(有序表)
- 编制一个乘法运算的程序
- 编制一个完成两个数的四则运算程序。如:用户输入34+56则输出结果90.00。要求运算结果保留两位小数,用户输入时一次将两个数和操作符输入。
- fjnu 1405 编制一个乘法运算的程序
- VC6.0将程序打包成一个可执行文件(release)
- 群里一个高手写的url?传参执行php函数的小程序, 收藏下
- 创建一个类的对象时,程序的执行顺序(C#)
- 使用main函数的参数,实现一个整数计算器,程序可以接受三个参数,第一个参数“-a”选项执行加法,“-s”选项执行减法,“-m”选项执行乘法,“-d”选项执行除法,后面两个参数为操作数。
- 编写一个程序,实现二叉树的各种运算
- 一个tomcat下执行java程序报错问题的解决
- FileOutputStream 类 和 FileInputStream类的简单介绍,附代码演示。以及一个复制媒体文件的小程序
- java中集合的运用,实现一个简单的购物程序
- Linux内核分析第七周学习笔记——Linux内核如何装载和启动一个可执行程序
- 一个简单的小程序演示Unity的三种依赖注入方式
- 执行一个外部程序并等待他的结束
- 一个C语言源程序是如何到一个可执行程序的
- 开源:给每个文档计算一个指纹,然后用指纹进行相似度的计算 含源码和可执行程序
- 以自动关机实例,演示java桌面程序打包成可执行的exe程序
- 请使用rand函数,来写一个上午上课随机点名的小程序,要求执行该程序后会输出被提问学生的学号。(注意,咱班有45个人,学号为1~45)
- 实验5-2 编制程序,输入m、n(m≥n≥0)后,计算下列表达式的值并输出。 要求将计算阶乘的运算编写作函数fact(n),函数返回值的类型为float。