*&浅蓝色的汁 2022-09-21 15:28 采纳率: 69.2%
浏览 24
已结题

看下呗,为啥我用顺序表求并集结果不理想

为啥在插入后A和B的值为

img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/826381547366175.png "#left")

#include<stdio.h>
#include<stdlib.h>
#define MaxSize 100
typedef struct
{
    int Data[MaxSize];
    int length; 
    struct Seqlist *L;
}SeqList;
SeqList *InitList(SeqList * L)
{ 
    L=(SeqList *)malloc(sizeof(SeqList));//分配存放线性表的顺序表空间
    L->length=0;
    return L;
}
int InsElem(SeqList *L,int x,int i)//将元素x插入到线性表的第i个位置 
{
    int j;
    if( i<1||i>L->length==MaxSize) //i是线性表中无效的位置 *
    return 0;
    i--;
    for(j=L->length;j>i;j--)
    L->Data[j]=L->Data[j-1] ;  //将位置为i及以后的节点往后移动
    L->Data[i-1]=x;
    L->length++;            //线性表的长度改变1位 
}
int main()
{
    int a[10],b[10];
    SeqList *A,*B,*C;
    A=InitList(A);
    B=InitList(B);
    C=InitList(C);
    int n,i,k,j;
    printf("请输入数组A和B的长度:");
    scanf("%d",&n);
    printf("请输入数组A的元素:") ; 
    for(i=0;i<n;i++)
        scanf("%d",&a[i]);
    printf("请输入数组B的元素:");
    for(i=0;i<n;i++)
        scanf("%d",&b[i]);
        for(i=0;i<n;i++)
    {
        InsElem(A,a[i],i+1);  // 将数组中的元素插入到线性表中 
                               // printf("顺序表的长度为:%d\n",L.length);
        InsElem(B,b[i],i+1);
    }
    printf("A的元素:");
    for(i=0;i<A->length;i++)
        printf("%3d",A->Data[i]);
        printf("\n");
    printf("B的元素:");
    for (i=0;i<B->length;i++)
        printf("%3d",B->Data[i]);
   printf("\n");
    for(i=0;i<A->length;i++)
        C->Data[i]=A->Data[i];
        for(i=0;i<C->length;i++)
            printf("%d",C->Data[i]);
    C->length=A->length; 
    for (i=0;i<B->length;i++)
           {
            k=0;
                for (j =0;j <B->length;j++)
                {
                    if (B->Data[i] ==C->Data[j])
                            {
                            k++;
                         }
                }
                    if(k==0)
                           {
                         C->Data[C->length++]=B->Data[i];
                        }
                
           }
        printf("A与B的并集C=\n");
        for(i=0;i<C->length;i++)
            printf("%d",C->Data[i]);
  • 写回答

1条回答 默认 最新

  • 浪客 2022-09-21 15:37
    关注
    
    int InsElem(SeqList *L, int x, int i) //将元素x插入到线性表的第i个位置
    {
        int j;
        //if (i < 1 || i > L->length == MaxSize) // i是线性表中无效的位置 *
        if (i < 1 || i > MaxSize ) //+
            return 0;
        //i--; //+
        for (j = L->length; j > i; j--)
            L->Data[j] = L->Data[j - 1]; //将位置为i及以后的节点往后移动
        L->Data[i - 1] = x;
        L->length++; //线性表的长度改变1位
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 9月29日
  • 已采纳回答 9月21日
  • 创建了问题 9月21日

悬赏问题

  • ¥15 vscode调试编译找不到gcc,只有cl,但是检查cmd是对的,控制面板的路径也更改了
  • ¥15 FlycoRoundView引入失败
  • ¥20 access中怎么分割分别获取一下图中的值
  • ¥15 keras_tcn已经安装成功,还是显示ModuleNotFoundError: No module named 'keras_tcn'
  • ¥15 类图中关联与聚合的区别
  • ¥15 ENVI高分五号去除云层的方法
  • ¥15 16进制数据如何得到奇偶校验位
  • ¥15 求合并两个字节流VB6代码
  • ¥15 Pyqt 如何正确的关掉Qthread,并且释放其中的锁?
  • ¥30 网站服务器通过node.js部署了一个项目!前端访问失败