zoukankan      html  css  js  c++  java
  • 《数据结构》 顺序表常用操作代码集合


    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@从流域到海域

  • 相关阅读:
    [ERR] Node 10.211.55.8:7001 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.
    PAT A1137 Final Grading (25 分)——排序
    PAT A1136 A Delayed Palindrome (20 分)——回文,大整数
    PAT A1134 Vertex Cover (25 分)——图遍历
    PAT A1133 Splitting A Linked List (25 分)——链表
    PAT A1132 Cut Integer (20 分)——数学题
    PAT A1130 Infix Expression (25 分)——中序遍历
    PAT A1142 Maximal Clique (25 分)——图
    PAT A1141 PAT Ranking of Institutions (25 分)——排序,结构体初始化
    PAT A1140 Look-and-say Sequence (20 分)——数学题
  • 原文地址:https://www.cnblogs.com/wanghongze95/p/13842666.html
Copyright © 2011-2022 走看看