|
楼主 |
发表于 2020-3-3 21:02:35
|
显示全部楼层
本帖最后由 only 于 2020-3-3 21:41 编辑
3月3日:今天又是努力学习数据结构的一天
之前学习了单向链表的操作,今天做了一道应用题
题目如下:求A&B两个线性表的并集,并存储到线性表A中
代码:
- #include<stdio.h>
- #include<stdlib.h>
- void UnionList(int *pa,int na,int *pb,int nb,int *pc,int *numc);//求集合函数
- int ListCheck(int *pa,int na,int x);//检测线性表中是否有x
- int CheckSame(int *p,int n);//检测链表中是否有重复数字
- #define FALSE 0;
- #define TRUE 1;
- int main()
- {
- int i;
- int *pa,*pb,*pc,*numc;
- int na,nb,nc;
- printf("how many numbers does LA have? \n");
- scanf("%d",&na);//输入A线性表的大小
- printf("how many numbers does LB have? \n");
- scanf("%d",&nb);//输入B线性表的大小
- nc=na+nb;//暂定C的大小为A+B的和
- numc=&nc;//用numc指向nc
- pa=(int *)malloc(na*sizeof(int));
- pb=(int *)malloc(nb*sizeof(int));
- pc=(int *)malloc(nc*sizeof(int));
- //分配A、B、C线性表的内存(C线性表未必有na+nb个元素,但为了保证空间足够,直接分配na+nb大小)
- do
- {
- printf("please input A array number:\n");
- for(i=0;i<na;i++)
- scanf("%d",pa+i);
- }while(!CheckSame(pa,na));
- //给A线性表赋值,若存在相同数字,则重新输入
- do
- {
- printf("please input B array number:\n");
- for(i=0;i<nb;i++)
- scanf("%d",pb+i);
- }while(!CheckSame(pb,nb));
- //给A线性表赋值,若存在相同数字,则重新输入
- UnionList(pa,na,pb,nb,pc,numc);//求A、B并集,存放到C
-
- printf("the union array is :\n");//输出C线性表
- for(i=0;i<*numc;i++)
- {
- printf("%d\t",*(pc+i));
- }
- printf("\n");
- return 0;
- }
- void UnionList(int *pa,int na,int *pb,int nb,int *pc,int *numc)//求A、B集合,存放到C
- {
- int i,j,k=0;
- for(i=0;i<na;i++,k++)
- {
- *(pc+k)=*(pa+i);
- }
- //先将A线性表中内容存放到C线性表中
- for(j=0;j<nb;j++)//遍历B线性表中的元素
- {
- if(ListCheck(pa,na,*(pb+j)))//当前B线性表的元素未在A中出现,将该元素插入到C线性表
- {
- *(pc+k)=*(pb+j);
- k++;
- }
- if(!ListCheck(pa,na,*(pb+j)))//当前B线性表的元素在A中出现,nc自减,这样可以保证nc最后的大小就是并集元素的数量
- {
- (*numc)--;//numc指向nc;
- }
- }
- }
- int ListCheck(int *pa,int na,int x)
- {
- int i=0;
- while(i<na)
- {
- if(*(pa+i)==x)
- return 0;
- i++;
- }
- return 1;
- }
- int CheckSame(int *p,int n)//检测是否有重复数字
- {
- int i,j;
- for(i=0;i<n;i++)
- {
- for(j=0;j<n;j++)
- {
- if(i==j)
- continue;
- if(*(p+i)==*(p+j))
- {
- printf("there are same numbers in the array.\n");
- return FALSE;
- }
- }
- }
- return TRUE;
- }
复制代码 运行结果:
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|