线性表的链式存储实现

typedef struct LNode *List;
  struct LNode{
      ElementType Data[MAXSIZE];
      int Last;
  };
  struct LNode L;
  List PtrL;


//1.求表长
int Length(List PtrL)
{
    List p = PtrL;  /*p指向表的第一个结点*/
    int j = 0;
    while(p){
        p = p->Next;
        j++;        /*当前p指向的是第j个结点*/
    }
    return j;
}


//2.查找
//(1)按序号查找:FindKth;
List FindKth(int K,List PtrL)
{
    List p = PtrL;
    int i=1;
    while(p!=NULL && i < K){
        p = p->Next;
        i++;
    }
    if(i==K)   
        return p;   /*找到第K个,返回指针*/
    else   
        return NULL /*否则返回空*/
}

//3.按值查找    Find
List Find(ElementType X,List PtrL)
{
    List p = PtrL;
    while( p!=NULL && p->Data !=X)
        p = p->Next;
    return p;
}

//3.插入(在第i-1个(1<=i && i<=n+1)个结点后插入一个值为X的新结点
 
 
 
 
 
//插入操作实现
List lnsert(ElementType X,int i,List PtrL)
{
    List p,s;
    if(i==1){                                    /*新结点插入在表头*/
        s = (List)malloc(sizeof(struct LNode)); /*申请、填装结点*/
        s->Data = X;
        s->Next = PtrL;
        return s;                               /*返回新表头指针*/
    }
    p = FindKth(i-1,PtrL);                      /*查找第i-1个结点*/
    if(p==NULL){                                /*dii-1个不存在,不能插入*/
        printf(" 参数i错 “);
        return NULL;
    }
    else{
        s = (List)malloc(sizeof(struct LNode)); /*申请、填装结点*/
        s->Data = X;
        s->Next = p->Next;          /*新结点插入在第i-1个结点的后面*/
        p->Next = s;
        return PtrL;
    }
}

猜你喜欢

转载自www.cnblogs.com/King-boy/p/10504521.html
今日推荐