前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >《数据结构》 顺序表常用操作代码集合

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

作者头像
Steve Wang
发布2018-02-05 16:40:53
5120
发布2018-02-05 16:40:53
举报
文章被收录于专栏:从流域到海域从流域到海域

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

代码语言:javascript
复制
//定义线性表的存储结构
#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@从流域到海域

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016年03月23日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档