鱼C论坛

 找回密码
 立即注册
查看: 3776|回复: 6

数据结构—求线性表的并集(救救孩子吧)

[复制链接]
发表于 2020-5-16 17:06:20 | 显示全部楼层 |阅读模式
2鱼币
问题:假设有两个集合A和B分别用两个线性表LA和LB表示,即线性表中的数据元素即为集合中的成员,现要求求出一个新的集合A=A∪B。要求应用线性表提供的基本操作(初始化,求表长,取元素,定位/查找,插入等)来实现。

输入数据共4行:
第1行:集合A的元素数
第2行:集合A中的元素(以空格间隔)
第3行:集合B的元素数
第4行:集合B中的元素(以空格间隔)

#include <stdio.h>
#include <stdlib.h>
#define  MAXSIZE  100
#define OK 1
#define OVERFLOW -1
#define ERROR -2
typedef  int  ElemType;
typedef  int  Status;
typedef  struct {
        ElemType  *elem;    // 顺序表数组的基址
        int   length;              // 顺序表当前元素个数
} SqList;
Status initList(SqList &L);
Status listInsert(SqList &L,int i ,ElemType e);
void listUnion(SqList &La,SqList Lb);
void sortList(SqList &L);
void showList(SqList L);
int main(void) {
        SqList La,Lb;
        int n,i;
        ElemType t;
        if(initList(La)!=OK) exit(0);
        if(initList(Lb)!=OK) exit(0);
        scanf("%d",&n);
        for(i=1; i<=n; i++) {
                scanf("%d",&t);
                if(listInsert(La,i,t)!=OK) exit(0);
        }
        scanf("%d",&n);
        for(i=1; i<=n; i++) {
                scanf("%d",&t);
                if(listInsert(Lb,i,t)!=OK) exit(0);
        }       
        listUnion(La,Lb);
        sortList(La);
        showList(La);
        return 0;
}

Status initList(SqList &L) {
        L.elem=(ElemType*)malloc(MAXSIZE*sizeof(ElemType));
        if(!L.elem) exit(OVERFLOW);
        L.length=0;
        return OK;
}
int getLength(SqList L) {
       
}
Status listInsert(SqList &L,int i ,ElemType e) {

}
Status getElem(SqList L,int i,ElemType &e)
{

}
int locateElem(SqList L,ElemType e)
{

}
void listUnion(SqList &La,SqList Lb){

}
void sortList(SqList &L){
       
}
void showList(SqList L){

}

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-16 20:23:48 | 显示全部楼层
头像好瘆人……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-17 12:27:39 | 显示全部楼层
这是啥
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-5-17 14:35:24 | 显示全部楼层

数据结构线性表的求并集问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-17 15:05:13 | 显示全部楼层
看不懂,飘过!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-5-18 17:38:32 | 显示全部楼层
我已经写出了个大概,但好像还有一些细节问题有遗漏,一起来找找吧!
#include <stdio.h>
#include <stdlib.h>
#define  MAXSIZE  100
#define OK 1
#define OVERFLOW -1
#define ERROR -2
typedef  int  ElemType;
typedef  int  Status;
typedef  struct {
        ElemType  *elem;    // 顺序表数组的基址
        int   length;              // 顺序表当前元素个数
} SqList;
Status initList(SqList &L);
Status listInsert(SqList &L,int i ,ElemType e);
void listUnion(SqList &La,SqList Lb);
void sortList(SqList &L);
void showList(SqList L);
int main(void) {
        SqList La,Lb;
        int n,i;
        ElemType t;
        if(initList(La)!=OK) exit(0);
        if(initList(Lb)!=OK) exit(0);
        scanf("%d",&n);
        for(i=1; i<=n; i++) {
                scanf("%d",&t);
                if(listInsert(La,i,t)!=OK) exit(0);
        }
        scanf("%d",&n);
        for(i=1; i<=n; i++) {
                scanf("%d",&t);
                if(listInsert(Lb,i,t)!=OK) exit(0);
        }       
        listUnion(La,Lb);
        sortList(La);
        showList(La);
        return 0;
}

Status initList(SqList &L) {
        L.elem=(ElemType*)malloc(MAXSIZE*sizeof(ElemType));
        if(!L.elem) exit(OVERFLOW);
        L.length=0;
        return OK;
}

int getLength(SqList L) {
        return L.length;
}

Status listInsert(SqList &L,int i ,ElemType e) {
        if(L.length==MAXSIZE||i<1||i>L.length+1)
        return ERROR;
        if(i<=L.length)
        {
                for(int j=L.length-1;j>=i-1;j--)
                {
                        L.elem[j+1]=L.elem[j];
                }
        }
        L.elem[i-1]=e;
        L.length++;
        return OK;
}

Status getElem(SqList L,int i,ElemType &e)
{
        if(L.length==0||i<1||i>L.length)
        return ERROR;
        e=L.elem[i-1];
        return OK;
}

int locateElem(SqList L,ElemType e)
{
        int i;
        for(i=0;i<=L.length-1;i++)
        {
                if(e==L.elem[i])
                return i;
        }
        if(i==L.length)
        return 0;
}

void listUnion(SqList &La,SqList Lb){
        int i;
        ElemType e;
        for(i=0;i<=Lb.length-1;i++)
        {
                if(getElem(Lb,i,e)==OK)
                {
                        if(!locateElem(La,e))
                        {
                                listInsert(La,La.length+1,e);
                        }
                }
        }
}

void sortList(SqList &L){
        int l,empty;
        l=getLength(L);
        for(int i=1;i<l;i++)
        {
                for(int j=0;j<l-i;j++)
                {
                        if(L.elem[j]>L.elem[j+1])
                        {
                                empty=L.elem[j];
                            L.elem[j]=L.elem[j+1];
                            L.elem[j+1]=empty;
                        }
                }
        }
}

void showList(SqList L){
        int l;
        l=getLength(L);
        for(int i=0;i<=l-1;i++)
        {
                printf("%d ",L.elem[i]);
        }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-5-18 17:43:11 | 显示全部楼层

没关系,我已经写出了一点,但还有些细节错误找不出来,感兴趣的话一起来找找看吧!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 18:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表