• 线性表的链式存储实现


    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;
        }
    }
     //4.删除(删除链表的第i(1<=i && i<=n)个位置上的结
    List Delete(int i,List PtrL)
    {
        List p,s;
        if(i==1){       /*若要删除的是表的第一个结点*/
            s = PtrL;           /*s指向第1个结点*/
            if(PtrL!=NULL)
                PtrL = PtrL->Next;      /*从链表中删除*/
            else
                return NULL;
            free(s);                    /*释放被删除结点*/
            return PtrL;
        }
        p = FindKth(i-1,PtrL);          /*查找第i-1个结点*/
        if(p == NULL){
            printf("第%d个结点不存在",i-1);
            return NULL;
        }
        else if(p->Next == NULL){
            printf("第%d个结点不存在",i);
            return NULL;
        }
        else{
            s = p->Next;                /*指向第i个结点*/
            p->Next = s->Next;          /*从链表中删除*/
            free(s);                    /*释放被删除结点*/
            return PtrL;
        }
    }
  • 相关阅读:
    Oracle 字符集的查看和修改
    Hibernate查询方法与缓存的关系
    Oracle Sql语句整理
    Android动画效果
    Acrobat9键盘快捷键
    Head区的设置
    JAR,WAR,EAR区别
    ASCII码表完整版
    HTML的meta标签详解
    .NET中TextBox控件设置ReadOnly=true后台取不到值三种解决方法
  • 原文地址:https://www.cnblogs.com/King-boy/p/10504521.html
Copyright © 2020-2023  润新知