m0_74047610 2022-10-02 10:27 采纳率: 100%
浏览 21
已结题

怎么怎么合并两个顺序表

在合并两个顺序表中,我卡在了怎么把给的两个表的文件引入部分,我想问问该怎么把文件里的数据引入顺序表啊

  • 写回答

3条回答 默认 最新

  • 关注

    运行结果:

    img

    代码如下:

    #include <iostream>
    #include <fstream>
    #include <stdlib.h>
    using namespace std;
    #define MAXSIZE 100
    #define ERROR 0
    
    typedef struct  
    {
        int* elem; //记录所有的元素
        int length;
    }sqlist;
    
    //初始化链表
    void InitList(sqlist &LA)
    {
        LA.elem = new int[MAXSIZE];
        LA.length = 0;
    }
    
    //从文本文件中读取数字,并存入顺序表
    void InputList(sqlist& LA,const char* filename)
    {
        ifstream infile(filename); //读取
        if(!infile.is_open()) //判断文件是否打开
        {
            cout <<filename <<"打开失败!"<<endl;
            return;
        }
        //读取文件
        while(!infile.eof())
        {
            infile >> LA.elem[LA.length];
            LA.length++;
        }
        infile.close();
    }
    
    //采用冒泡排序算法,将链表中的元素排序
    void SortList(sqlist &LA)
    {
        int i,j,t;
        for(i=0;i<LA.length-1;i++)
        {
            for(j=0;j<LA.length-1-i;j++)
            {
                if(LA.elem[j] > LA.elem[j+1]) //从小到大排序,如果是从大到小,把>改成<即可
                {
                    t = LA.elem[j];
                    LA.elem[j] = LA.elem[j+1];
                    LA.elem[j+1] = t;
                }
            }
        }
    }
    
    //合并两个链表,把链表合并到LC中,并按从小到大的顺序排列
    void MergeList(sqlist LA,sqlist LB,sqlist &LC)
    {
        int i=0,j=0,index = 0;
        while(i<LA.length && j<LB.length)
        {
            if(LA.elem[i] <= LB.elem[j])
                LC.elem[index++] = LA.elem[i++]; //把较小的值放入LC
            else if(LB.elem[i] < LA.elem[j])
                LC.elem[index++] = LB.elem[j++];
        }
        //把LA中剩余的部分放入LC
        while(i<LA.length)
            LC.elem[index++] = LA.elem[i++];
    
        //把LB中剩余的部分放入LC
        while(j<LB.length)
            LC.elem[index++] = LB.elem[j++];
    
        LC.length = LA.length + LB.length;
    }
    
    void PrintList(sqlist L)
    {
        int i = 0;
        for(;i<L.length;i++)
        {
            if(i<L.length -1)
                cout << L.elem[i] <<" ";
            else
                cout << L.elem[i] <<endl;
        }
    }
    
    int main()
    {
        sqlist LA,LB,LC; 
        const char* file1 = "a.txt"; //第一个文件的名字
        const char* file2 = "b.txt"; //第二个文件的名字
        //初始化
        InitList(LA);
        InitList(LB);
        InitList(LC);
        InputList(LA,file1); //读取文件
        InputList(LB,file2);
        cout <<"LA排序前:"<<endl;
        PrintList(LA);
        cout <<"LB排序前:"<<endl;
        PrintList(LB);
        //顺序表排序
        SortList(LA);
        SortList(LB);
        cout <<"LA排序后:"<<endl;
        PrintList(LA);
        cout <<"LB排序后:"<<endl;
        PrintList(LB);
        //合并LA和LB
        cout <<"合并LA和LB:"<<endl;
        MergeList(LA,LB,LC);
        PrintList(LC);
    
        system("pause"); //暂停程序,避免一闪而过
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 10月10日
  • 已采纳回答 10月2日
  • 创建了问题 10月2日

悬赏问题

  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分