zoukankan      html  css  js  c++  java
  • 线性表的链式存储实现

    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;
        }
    }
  • 相关阅读:
    如何将网页变成灰色的.
    页面中的传参介质(ViewState,Session,Items),Dictionary的用法.
    CSS控制Table单元格强制换行与强制不换行
    网页效果大集合
    结合ashx来在DataGrid中显示从数据库中读出的图片
    Atlas学习手记(29):JavaScript面向对象的扩展(三):接口Interface
    FormView中EditItemTemplate的注意事项
    javascript基本和常用的东西
    eclipse X11 xming 打造window下的linux c++开发环境
    转一篇软件测试方面的思考小文
  • 原文地址:https://www.cnblogs.com/King-boy/p/10504521.html
Copyright © 2011-2022 走看看