• 《数据结构》 顺序表常用操作代码集合



    Ps:每段代码中,添加了署名Solo的是博主自己写的,其余来自课本或者老师。

    //定义线性表的存储结构
    #define MAXSIZE 100
    typedef struct
    {
        ElemType elem[MAXSIZE]; //ElemType自定义
        int last;
    } SeqList;
    //线性表按查找内容运算 Locate(L,e)函数
    int Locate(SeqList L, ElemType e)
    {
        i = 0;
    
        while((i <= L.last) && (L.elem[i] != e))
            i++;
        if(i <= L.last)    return(i + 1);
        else    return(-1);
    }
    //线性表的插入操作
    #define OK 1
    #define ERROR 0
    int InList(Seqlist *L, int i, ElemType e)
    {
        int k;
        if(i < 1 || i > L->last+2) 
            {   
                printf("插入位置i不合法");
                return ERROR;
            }
    
        if(L->last >= MAXSIZE - 1)
            {
                printf("表已满,无法插入");
                return ERROR;
            }
         for(k = L->last; k >= i-1; k--)
            L->elem[k+1] = L->elem[k];
    
         L->elem[i-1] = e;
         L->last++;
         return OK; 
    }
    //线性表的删除操作
    int DelList(SeqList *L, int i, ElemType *e)
    {
        int k;
        if(i < 1 || i > L->last+1)
            {
                printf("删除位置不合法");
                return ERROR;
            }
        *e = L->elem[i-1];
        for(k = i; i <= L->last; k++)
            L->elem[k-1] = elem[k];
            L->last--;
    
         return OK;
    }
    //线性表原地逆置
    int SListRev(SeqList *L)
    {
        int i;
        ElemType t;
        for(i=0; i<L->last/2; i++)
            {
                t = a[i]; a[i] = a[n-i-1]; a[n-i-1] = t;
            }
        return Ok;
    }
    //线性表的合并运算1
    void mergeList(SeqList *LA, Seqlist *LB, Seqlist *LC)
    {
        int i,j,k;
        i=0; j=0; k=0;
    
        while(i <= LA->last && j <= LB->last)
        if(LA->elem[i] <= LB->elem[j])
            {
                LC->elem[k] = LA->elem[i];
                i++; k++;
            }
        else{
                LC->elem[k] = LB->elem[i];
                j++; k++; 
            }
        while(i <= LA->last)
            {
                LC->elem[k] = LA->elem[i];
                i++; k++;
            }
        while(j <= LB->last)
            {
                LC->elem[k] = LA->elem[j];
                j++; k++;
            }
    
         LC->last = LA->last + LB->last + 1;
    }
    //线性表的合并运算2——Solo
    void mergeList(SeqList *LA, Seqlist *LB, Seqlist *LC)
    {
        int i,j,k;
        i=0; j=0; k=0;
    
        while(i <= LA->last || j <= LB->last)
        if(LA->elem[i] <= LB->elem[i] || (i <= LA->last && j > LB->last  )
            {
                LC->elem[k] = LA->elem[i];
                i++; k++;
            }
    
        if(LA->elem[i] > LB->elem[j] || (i > LA->last && j <= LB->last))
            {
                LC->elem[k] = LB->elem[i];
                j++; k++; 
            }
    }
    /*删除非递减顺序表L中所有值相等元素——Solo*/
    //①若相等的值只有一个,为e,只有该种情况才能满足《数据结构》课本习题的要求
    void Delsame(Seqlist *L e)
    {   
        int i,j;
        for(i=0,j=0; i<L->last; i++)
            if(L->elem[i] != e)     { L->elem[j] = L->elem[i]; j++; }
        L->last = j+1;
    }
    //②若相等的值有很多,且不确定 两种方法
    void Delmulsame(Seqlist *L)
    {
        int i,j,k;
    
        for(i=0; i<L->last; i++)
           for(j=1; j<L->last; j++)
              {
                  if(L->elem[i] = L->elem[j])
                     for(k=j; j<L->last; k++)
                        {
                            L->elem[k] = L->elem[k+1];
                            L->last--;
                        }
              }
    }
    void Delmulsame(Seqlist *L)
    {
        int i,j,k,t;
        for(i=0; i<L->last-1; i++)
            {
                for(k=i, j=i+1; j<n; j--)   //冒泡法排序
                    if(a[j] <a[k])  k = j;
                if(k != i)
                    { t = a[i]; a[i] = a[k]; a[k] = t; }
            }
    /*  for(i=0; i<L->last-1; i++)         //这段被注释掉了,是选择法排序
            for(j=L-last-1; j>=i; j--)
                if(a[j] > a[j+1])
                   { a[j] = t; a[j] = a[j+1]; a[j+1] = a[j]; }   */
        for(i=0; i<L->last; i++)
            {
                if(L->elem[i] = L->elem[i+1])
                   {
                       for(k=i; k<L->last; k++)
                       {
                           L->elem[k] = L->elem[k+1];
                           k--;
                           L->last--;
                       }
                   }
            }
    }


    zhihu:Solo | weibo@从流域到海域

  • 相关阅读:
    java入门 学习日志三 (面向对象1)
    java入门 学习日志二
    第八届蓝桥杯 b组试题解析
    java入门 学习日志一
    第九届蓝桥杯 b组 解析
    第九届蓝桥杯 b组 明码
    第十届蓝桥杯 b组
    包子凑数 、买不到的数目
    基础背包问题
    斐波那契数列第n项
  • 原文地址:https://www.cnblogs.com/wanghongze95/p/13842666.html
Copyright © 2020-2023  润新知