20194703-周冠霖
题目1:创建两个线性表,分别存储{“chen”,“wang”,“liu”,“zhang”}和{“chen”,“hu”,“zhang”},求这两个线性表的交集和并集。
#include<iostream>
#include <malloc.h>
#define LIST_INIT_SIZE 100
#define LISTINCREAMENT 10
#define OVERFLOW -2
#define OK 1
using namespace std;
typedef struct
{
int *elem;
int length;
int listsize;
}sqlist;
//初始化链表
int InitList_Sq(sqlist &L)
{
L.elem=(int *)malloc(LIST_INIT_SIZE*sizeof(int));
if(!L.elem) exit(OVERFLOW);
L.length=0;
L.listsize=LIST_INIT_SIZE;
return OK;
}
//给链表增加元素
int listInsert(sqlist &L,int i,int e)
{
int *newbase,*q,*p;
if (i<1||i>L.length+1) return OVERFLOW;
if(L.length>=L.listsize)
{
newbase=(int*)realloc(L.elem,(L.listsize+LISTINCREAMENT)*sizeof(int));
if(!newbase) exit(OVERFLOW);
L.elem=newbase;
L.listsize+=LISTINCREAMENT;
}
q=L.elem+i-1;
for(p=L.elem+L.length-1;p>=q;--p)
*(p+1)=*p;
*q=e;
++L.length;
return OK;
}
//确定链表元素在链表中的位置.
int locateList(sqlist L,int e )
{
int *p,i=1;
p=L.elem;
while(i<=L.length&&e!=*p)
{
++i;++p;
}
if(i<=L.length)
return i;
else
return 0;
}
//合并两个链表
int unionmerge(sqlist&la,sqlist &lb)
{
int i,e;
for(i=1;i<=lb.length;i++)
{
e=*(lb.elem+i-1);
if(!locateList(la,e))
listInsert(la,la.length+1,e);
}
return OK;
}
void main()
{ //1.给la,lb插入元素
int n,e; sqlist la;InitList_Sq(la);
cout<<"请输入第一个集合la中的元素个数:";
cin>>n;
cout<<"请输入第一个集合la中的各个元素:";
for(int i=1;i<=n;++i)
{
cin>>e;
listInsert(la,i,e);
}
int m;sqlist lb;InitList_Sq(lb);
cout<<"请输入第二个集合lb中的元素个数:";
cin>>m;
cout<<"请输入第二个集合lb中的各个元素:";
for(int i=1;i<=m;++i)
{
cin>>e;
listInsert(lb,i,e);
}
//2和3,合并la,lb,也就是将lb的元素插入到la.
unionmerge(la,lb);
//输出合并的函数
cout<<"合并后的线性表是:"<<endl;
for(int i=1;i<=la.length;i++)
{
cout<<*(la.elem+i-1)<<" ";
}
cout<<endl;