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日

悬赏问题

  • ¥16 Qphython 用xlrd读取excel报错
  • ¥15 单片机学习顺序问题!!
  • ¥15 ikuai客户端多拨vpn,重启总是有个别重拨不上
  • ¥20 关于#anlogic#sdram#的问题,如何解决?(关键词-performance)
  • ¥15 相敏解调 matlab
  • ¥15 求lingo代码和思路
  • ¥15 公交车和无人机协同运输
  • ¥15 stm32代码移植没反应
  • ¥15 matlab基于pde算法图像修复,为什么只能对示例图像有效
  • ¥100 连续两帧图像高速减法