线性表

来源:互联网 发布:淘宝免费买东西的技巧 编辑:程序博客网 时间:2024/06/15 19:40

1 . 数组实现

typedef struct list{    ElementType Data[Maxsize];    int Last;}List;
List *MakeEmpty()  //初始化{    List *PtrL;    PtrL = (List*)malloc(sizeof(List));    PtrL->Last = -1;    return PtrL;}
//平均比较次数(n+1)/2,平均时间O(n)int Find(ElementType X,List *PtrL)  //查找并返回下标{    int i=0;    while(i<=PtrL->Last && PtrL->Data[i] != X)    {        i++;    }    if(i>Ptrl->Last)        return -1;    else        return i;}
//平均移动次数(n+1)/2,平均时间O(n)void Insert( ElementType X, int i, List *PtrL) //将X插入下标i{       int j;         if ( PtrL->Last == MAXSIZE-1 ){              printf("表满");                               return;          }        if ( i < 1 || i > PtrL->Last+2) {            printf("位置不合法");             return;          }          for ( j = PtrL->Last; j >= i-1; j-- )        {            PtrL->Data[j+1] = PtrL->Data[j];            PtrL->Data[i-1] = X;            PtrL->Last++;            return;          }  }
//平均移动次数(n-1)/2,平均时间O(n)void Delete( int  i, List *PtrL )  //将下标i删除并i后所有前移{      int  j;        if( i < 1 || i > PtrL->Last+1 ) {            printf (“不存在第%d个元素”, i );            return ;         }        for ( j = i; j <= PtrL->Last; j++ )           PtrL->Data[j-1] =PtrL->Data[j];       PtrL->Last--;       return;} 

2 . 链表实现

typedef struct Node{    ElementType Data;    struct Node *next;}List;
// 时间O(n)int Length(List *PtrL) //链表长度{    List *p = Ptrl;    int j = 0;    while(p)    {        p = p->next;        j++;    }    return j;}
// 平均时间O(n)List  *FindKth( int K, List *PtrL ) //查找第K个{    List  *p = PtrL;    int  i = 1;    while (p !=NULL && i < K )    {        p = p->Next;        i++;    }    if ( i == K )    return p;    else    return NULL;}// 平均时间O(n)List *Find( ElementType X, List *PtrL ) //按值查找{        List  *p = PtrL;      while ( p!=NULL && p->Data != X )          p = p->Next;      return p; }
//平均查找次数n/2,平均时间O(n)List *Insert( ElementType X, int i, List *PtrL ){    List  *p, *s;    if(i==1)    {        s = (List *)malloc(sizeof(List));        s->Data = X;        s->Next = PtrL;        return s;    }    p = FindKth( i-1, PtrL);    if ( p == NULL )    {        printf("参数i错");        return NULL;    else{        s = (List *)malloc(sizeof(List));        s->Data = X;        s->Next = p->Next;        p->Next = s;        return PtrL;    } } 
//平均查找次数n/2,平均时间O(n)List *Delete(int i, List *PtrL){    List *p, *s;    if(i == 1)    {        s = PtrL;        if (PtrL!=NULL)  PtrL = PtrL->Next;        else        return NULL;        free(s);        return PtrL;    }     p = FindKth( i-1, PtrL );    if ( p == NULL )    {        printf(“第%d个结点不存在”, i-1);        return NULL;    }    else  if ( p->Next == NULL )    {        printf(“第%d个结点不存在”, i);        return NULL;    }    else    {        s = p->Next;        p->Next = s->Next;        free(s);        return PtrL;    } } 
原创粉丝点击