线性表的具体操作

题目描述 :

假设有两个集合A和B,分别用两个线性表LA和LB表示,即线性表中的数据元素为集合中的元素,利用线性表的基本运算设计一个算法求一个新的集合C=AUB,即将两个集合的并集放在线性表LC中。

题解:

先初始化线性表LC,即创建一个空的线性表LC,将LA的所有元素复制到LC中,然后扫描线性表LB,将LB中不属于LA的元素插入到LC中,LA,LB,和LC均为SQList类型变量,假设SqList是一个已经实现了的线性表数据结构。

要点:

灵活运用线性表的基本运算

C++代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define MaxSize 50
typedef struct
{
    int data[MaxSize];
    int length;
} SqList;
void InitList(SqList *&L)   // 初始化
{
    L=(SqList *)malloc(sizeof(SqList));
    L->length=0;
}
void CreateList(SqList *&L,int a[],int n)  // 集合到线性表
{
    int i=0,k=0;
    L=(SqList *)malloc(sizeof(SqList));   //定义
    while(i<n)
    {
        L->data[k]=a[i];
        k++,i++;
    }
    L->length=k;
}
bool GetElem(SqList *L,int i,int &e)
{
    if(i<1||i>L->length)
        return false;
    e=L->data[i-1];
    return true;
}
int LocateElem(SqList *L,int e)
{
    int i=0;
    while(i<L->length&&L->data[i]!=e)
        i++;
    if(i>=L->length)
        return 0;
    else
        return i+1;
}
bool ListInsert(SqList *&L,int i,int e)
{
    int j;
    if(i<1||i>L->length+1)
        return false;
    i--;
    for(j=L->length; j>i; j--)
        L->data[j]=L->data[j-1];
    L->data[i]=e;
    L->length++;
    return true;
}
void DispList(SqList *L)      //输出
{
    for(int i=0; i<L->length; i++)
        printf("%d ",L->data[i]);
    printf("\n");
}
int ListLength(SqList *L)   //求线性表长度
{
    return (L->length);
}
void unionList(SqList *LA,SqList *LB,SqList *&LC)
{
    int lena,i;
    int e;
    InitList(LC);         //初始化LC
    for(i=1; i<=ListLength(LA); i++)    //复制LA到LC
    {
        GetElem(LA,i,e);
        ListInsert(LC,i,e);
    }
    lena=ListLength(LA);
    for(i=1; i<ListLength(LB); i++)     //查找LB
    {
        GetElem(LB,i,e);
        if(!LocateElem(LA,e))
            ListInsert(LC,++lena,e);
    }
}
int main()
{
    int n,a[10],b[10];
    scanf("%d",&n);       // 输入数据
    for(int i=0; i<n; i++)
        scanf("%d",&a[i]);
    for(int j=0; j<n; j++)
        scanf("%d",&b[j]);
    SqList *LA,*LB,*LC;    // 定义LA LB LC
    CreateList(LA,a,n);   
    CreateList(LB,b,n);
    unionList(LA,LB,LC);   // 具体实现
    DispList(LC);       // 输出LC
    return 0;
}
 

猜你喜欢

转载自blog.csdn.net/DreamTrue1101/article/details/82966604
今日推荐