zoukankan      html  css  js  c++  java
  • 数据结构——顺序表的一些算法

    1.已知线性表(a0,a1,a2,….an)按顺序存储,且每个元素都是均不相等的整数,设计把所有的比a0大的数移到其右边,把所有比a0小的数移到其左边的算法。
    要求:时间最少,辅助空间最少。

    解题思路:其实这就是一趟快速排序,a0到位,比它小的交换到低端,比它大的交换到高端。

    void move(SqList L)
    {
        int i=0,j=L.length-1;
        int key=L.elem[0];
        while (i<j)
        {
            while (i<j &&L.elem[j]>=key) --j;
            {
                L.elem[i]=L.elem[j];///比枢纽小的交换到底端
                ++i;
            }
            while (i<j && L.elem[i]<=key) ++i;
            {
                L.elem[j]=L.elem[i];///比枢纽大的交换到高端
                --j;
            }
        }
        L.elem[i]=key;///枢纽到位
    }

    2.已知线性表LA和 LB中的数据元素按值非递减有序,现要求将LA和LB归并为一个新的线性表LC,且LC中的数据元素仍按值非递减有序排列。

           LA=(3,5,8,11)
           LB=(2,6,8,9,11,15,20)
    则:LC=(2,3,5,6,8,8,9,11,11,15,20)

    解题思路:先设LC为空表,然后将LA或LB中的元素逐个插入到LC中即可。LC中元素按值非递减有序排列。 设指针i和j分别指向LA和LB中某个元素,若设i当前所指元素为ai,j当前所指元素为bj,则当前应插入到LC中的元素ck为

            ai     当ai<=bj时
    ck=
            bj      当ai>bj时

    void MergeList(SqList La, SqList Lb, SqList *Lc)
    {
        /* 本算法将非递减的有序表 La 和 Lb 归并为 Lc*/
        /*Lc的数据元素也按值非递减有序*/
        int i=0,j=0,k=0;
        int ai,bj;
        InitList(Lc);/*构造空的线性表Lc*/
        Lc->length=La.length+Lb.length; /*Lc表的长度*/
        while((i<=La.length-1)&&(j<=Lb.length-1))
        {   /* La和Lb均非空,i =0, j = 0, k = 0*/
            ai=La.elem[i]; /*取La中第i个元素*/
            bj=Lb.elem[j];/*取Lb中第j个元素*/
            if (ai<=bj)    /* 将 ai 插入到 Lc 中*/
            {
                ListInsert(Lc,k,ai);
                ++i;
                ++k;
            } /*if*/
            else     /* 将 bj 插入到 Lc 中*/
            {
                ListInsert(Lc,k,bj);
                ++j;
                ++k;
            } /*else*/
        }
        while(i<=La.length-1)///La非空且Lb空时,将La剩下的部分插入Lc中
        {
            ai=La.elem[i];
            ListInsert(Lc, k, ai);
            ++i;
            ++k;
        }
        while(j<=Lb.length-1)///Lb非空且La空时,将Lb剩下的部分插入Lc中
        {
            bj=Lb.elem[j];
            ListInsert(Lc, k, bj);
            ++j;
            ++k;
        }
    }/* merge_list*/
  • 相关阅读:
    mint17上建立lamp环境
    iptables开始ftp
    查看mysql集群状态是否正常
    限制SSH访问源,禁止4A之外的地址跳转访问
    查看cpu、内存和硬盘
    降kipmi0的CPU
    更改密钥对
    eNSP
    划分分区GPT11
    修改虚机IP
  • 原文地址:https://www.cnblogs.com/wkfvawl/p/10131625.html
Copyright © 2011-2022 走看看