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

来源:互联网 发布:微信网络兼职群 编辑:程序博客网 时间:2024/05/21 06:46


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

//定义线性表的存储结构#define MAXSIZE 100typedef 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 0int 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;}//线性表的合并运算1void 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——Solovoid 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@从流域到海域

0 0
原创粉丝点击