• 链表详解自带代码


    单链表中的每个结点不仅包含值,还包含链接到下一个结点的引用字段。通过这种方式,单链表将所有结点按顺序组织起来。
    下面就是单链表例子:
    举个简单例子:链表就跟铁链一样
    与数组不同,我们无法在常量时间内访问单链表中的随机元素。 如果我们想要获得第 i 个元素,我们必须从头结点逐个遍历。 我们按索引来访问元素平均要花费 O(N) 时间,其中 N 是链表的长度。
    众所周知,我们使用头结点来代表整个列表。
    因此,在列表开头添加新节点时更新头结点 head 至关重要。

    1. 初始化一个新结点 cur;
    2. 将新结点链接到我们的原始头结点 head。
    3. 将 cur 指定为 head。
      头插法
    LinkList Creat_listhead(LinkList &head) 
    {
     Status count=0,i=0;
     LinkList p;
     head=(LinkList)malloc(sizeof(LNode));
     head->next=NULL;
     printf("请输入表的节点数:
    ");
     scanf("%d", &count);
     for (i = count; i >0;--i) 
     {
      p = (LinkList)malloc(sizeof(LNode));          //  为新结点开辟新内存
      scanf("%f",&p->data);                          
      p->next =head->next;                        
      head->next=p;
     }
    }

    尾插法

    LinkList Creat_listtail(LinkList &head)
    {
     LinkList q,node;
     Status count=0,i=0;
     head=(LinkList)malloc(sizeof(LNode));//  为头指针开辟内存空间
     q=head;
     q->next=NULL; 
     printf("请输入表的节点数:
    ");
     scanf("%d", &count);
     for (i = 0; i < count;i++) 
     {
      node = (LinkList)malloc(sizeof(LNode));          //  为新结点开辟新内存
      scanf("%f",&node->data);                          
      q->next = node;                        
      q=node;
     }
     node->next = NULL;
    }

    插入一个元素

    Status ListInsert_L(LinkList &L,Status i,ElemType e)
    {
     //在带头节点的单链线性表L中的第i个位置之前插入元素e
     LinkList p,s;
     Status j=0;
     p=L;
     j=0; 
     
     while(p&&j<i-1)
     {
      p=p->next;//寻找第i个节点 
      ++j;
     }
     if(!p||j>i-1)//i小于1或者大于表长加1 
     {
      return ERROR;
     } 
     s=(LinkList)malloc(sizeof(LNode)); 
     s->data=e;
     s->next=p->next;
     p->next=s;
     return OK;
    } 

    删除一个元素

    Status ListDelete_L(LinkList &L,Status i,ElemType &e)
    {
     //在带头结点的单链线性表L中,删除第i个元素,并由e返回其值
     LinkList p,q;
     Status j=0;
     p=L; 
     while(p->next&&j<i-1)
     {
      p=p->next;
      ++j; 
     }
     if(!(p->next)||j>i-1)
     {
      return ERROR;//删除位置不合理 
     }
     q=p->next;
     p->next=q->next;//删除并释放结点 
     e=q->data;
     free(q);
     return OK; 
    } 

    合并链表

    void MergeList_L(LinkList &La,LinkList &Lb,LinkList &Lc)
    {
     //已知线性表La和Lb的元素安值非递减排列
     LinkList pa,pb,pc;
     pa=La->next; 
     pb=Lb->next;
     Lc=pc=La;//用La的头节点作为Lc的头结点
     while(pa&&pb)
     {
      if(pa->data<=pb->data)
      {
       pc->next=pa;
       pc=pa;
       pa=pa->next;
      }
      else
      {
       pc->next=pb;
       pc=pb;
       pb=pb->next;
      }
     } 
     pc->next=pa?pa:pb;//插入剩余段
     free(Lb); 
    } 

    显示链表元素

    void printlist(LinkList L)
    {
     LinkList p;
     p=L->next;
     while(p!=NULL)
     {
      printf("%4.2f ",p->data);
      p=p->next;
     }
    } 

    对链表进行查找

    Status ListSearch_L(LinkList L,ElemType e,Status &i)
    { 
     while(L!=NULL)
     {
      if(L->data==e)
      {
       return 0; 
      }
      i++;
      L=L->next;
     }
     return 0; 
    }

    下面是完成的代码:可以免费下载
    代码下载

    别废话,拿你代码给我看。
  • 相关阅读:
    swift延时执行
    Swift3.0 — CocoaAsyncSocket客户端(Socket通信)
    SnapKit配置过程
    iOS App图标和启动画面尺寸
    mac升级到10.13 CocoaPods不能使用
    上传app到app store遇到 An error occurred uploading to the iTunes Store.(iTunes Store Operation Failed)的解决方法
    swift高斯模糊的自定义view
    Swift 实现部分圆角
    android 代码设置、打开wifi热点及热点的连接
    自定义android Dialog
  • 原文地址:https://www.cnblogs.com/lvxueyang/p/13707575.html
Copyright © 2020-2023  润新知