人間重逢 2022-03-24 17:30 采纳率: 83.3%
浏览 524
已结题

使用C语言,c语言两个线性表LA,LB,线性表La和线性表Lb合并,将LA中没有的元素插入到LA的前端

#include<stdlib.h>
#include<stdio.h>
#define MAXSIZE 100
#define ERROR 0
#define OVERFLOW 0
typedef int Status;
typedef struct { //定义顺序表
int *elem;
int length;
} List;

Status InitList(List &L) //创建空顺序表
{
L.elem = (int*)malloc(MAXSIZE*sizeof(int));
if(!L.elem)exit(OVERFLOW);
L.length = 0;
return 0;
}

void ListInput(List &L) //顺序表数据的输入
{
int i=0;
while (1){
scanf("%d",&L.elem[i]);
if(L.elem[i]==-1)break;
i++;
}
L.length=i;
}

int ListLength(List L) //求顺序表的长度
{
return L.length;
}

void GetElem(List L, int i, int &e) //求顺序表的第i个元素,并以e返回
{
e = L.elem[i - 1];
}

bool LocateElem(List L, int e) //判断List里有没有e这个元素
{
int i;
for (i = 0; i < L.length; i++)
if (e == L.elem[i])
return true;
return false;
}

void ListInsert(List &L, int e) //将e插入到List的最后
{
L.elem[L.length] = e;
L.length++;
}

void ListOutput(List L) //输出List
{
int i;
for (i = 0; i < L.length; i++)
printf("%d ",L.elem[i]);
printf("\n");
}

void unionList(List &LA, List LB) //线性表的合并(顺序表)
{
//将所有在线性表LB中但不在LA中的数据元素插入到LA中
int LA_len, LB_len, i, e;
LA_len = ListLength(LA);
LB_len = ListLength(LB); //求线性表的长度
for (i = 1; i <= LB_len; i++) {
GetElem(LB, i, e); //取LB中第i个数据元素赋给e
if (!LocateElem(LA, e)) //LA中不存在和e相同的数据元素,则插入之
ListInsert(LA, e);
}
} //unionList

int main() {
List LA, LB;
InitList(LA);//创建线性表LA
InitList(LB);//创建线性表LB
printf("请输入LA,以-1结束:") ;
ListInput(LA);//
printf("请输入LB,以-1结束:") ;
ListInput(LB);
unionList(LA, LB);
printf("LA和LB合并后的集合为:") ;
ListOutput(LA);
return 0;
}

根据上方代码修改,将LA中没有的元素插入到LA的前端(原代码是插入到LA的后端)
谢谢!

  • 写回答

2条回答 默认 最新

  • CSDN专家-link 2022-03-24 17:32
    关注

    插入前端就需要将当前所有元素后移一位,然后将新元素放到第0位
    增加一个前插函数

    void ListInsertPrev(List &L, int e) //将e插入到List的最后
    {
          for(int i=L.length;i>0;i--)
                  L.elem[i] = L.elem[i-1];
          L.elem[0] = e;
          L.length++;
    }
    
    void unionList(List &LA, List LB) //线性表的合并(顺序表)
    {
    //将所有在线性表LB中但不在LA中的数据元素插入到LA中
    int LA_len, LB_len, i, e;
    LA_len = ListLength(LA);
    LB_len = ListLength(LB); //求线性表的长度
    for (i = 1; i <= LB_len; i++) {
    GetElem(LB, i, e); //取LB中第i个数据元素赋给e
    if (!LocateElem(LA, e)) //LA中不存在和e相同的数据元素,则插入之
    ListInsertPrev(LA, e);
    }
    } //unionList
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月5日
  • 已采纳回答 3月28日
  • 修改了问题 3月24日
  • 创建了问题 3月24日

悬赏问题

  • ¥15 C# 调用Bartender打印机打印
  • ¥100 华为ensp只要2-9实验运行结果能做的来加我QQ
  • ¥15 我这个代码哪里有问题 acm 平台上显示错误 90%,我自己运行好像没什么问题
  • ¥50 C#编程中使用printDocument类实现文字排版打印问题
  • ¥15 找会编程的帅哥美女 可以用MATLAB里面的simulink编程,用Keil5编也可以。
  • ¥15 已知隐函数其中一个变量τ的具体值,求另一个变量
  • ¥15 r语言Hurst指数
  • ¥15 Acrn IVSHMEM doorbell问题
  • ¥15 yolov5中的val测试集训练时数量变小问题
  • ¥15 MPLS/VPN实验中MPLS的配置问题