zoukankan      html  css  js  c++  java
  • 尾插法创建链表

         介绍过了头插法,再来介绍一下尾插法。假如我们现在要在链表中插入一些数据:1、2、3、4、5,并从键盘输入这些数据,最后插入到链表中的数据的顺序和输入数据的

    顺序是一致的,即{1,2,3,4,5},因为尾插法每次都是在末尾部插入数据的,先插入1,此时表中数据为{1};接着在尾部插入2,此时表中数据数据为{1,2};再在尾部插入3,

    此时表中数据数据为{1,2,3};以此类推,最后,表中数据的顺序和你输入的顺序是一致的。

        找了一张尾插法的图,来看一下具体是怎么实现的吧

        可以看到,每次新加入的结点都是插入在了最后一个节点后面,所以叫尾插法,同时将其next置空。

        同样地,尾插法创建链表也分为两种情况。一种是已知节点个数,还有一种是未知节点个数。下面用代码来展示一下

        先说一下已知结点个数的情况,看代码

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 #define N  10     //结点个数
     4 typedef struct LNode
     5 {
     6     int data;
     7     struct LNode *next;
     8 }LNode,*LinkList;
     9 
    10 
    11 LinkList creat_Linklist()  //已知节点个数,并且不带头结点
    12 {
    13      LNode   *head=NULL,*s,*rear=NULL;  //尾插法需要用到尾指针,rear是尾指针
    14      for(int i=1;i<=N;i++)
    15      {
    16          s=(LinkList)malloc(sizeof( LNode));
    17          scanf("%d",&s->data);
    18          s->next=NULL;    //把当前结点next置空NULL
    19          if(i==1)    //用来标记插入的节点是否为第一个节点,是的话就让头结点head指向第一个节点
    20              head=s;
    21          else    
    22              rear->next=s;   //不是头结点的话就让上一个节点的next指向当前结点
    23          rear=s;   //尾指针rear指向当前节点
    24      }
    25      return head;   //返回头指针
    26 }
    27 int main()
    28 {
    29     LinkList p;
    30     p=creat_Linklist(); //没有头结点,p指向表中的第一个节点
    31     while(p!=NULL)
    32     {
    33        printf("%d ",p->data);
    34        p=p->next ;
    35     }
    36     printf("
    ");
    37     return 0;
    38 }

    结果如下:

       再说一下未知结点个数的情况,看代码

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 typedef struct LNode
     4 {
     5     int data;
     6     struct LNode *next;
     7 }LNode,*LinkList;
     8 
     9 LinkList create_Linklist( )  //未知结点个数,并且带头结点
    10 {
    11        LNode   *head=NULL,*s,*rear=NULL;  //尾插法需要用到尾指针,rear是尾指针    
    12        int e;
    char ch; 13 head=(LinkList)malloc(sizeof( LNode)); 14 head->next=NULL; 15 rear=head;
    do{
    scanf("%d",&e);
    19 s=(LinkList)malloc(sizeof( LNode)); 20 s->data=e; 21 s->next=NULL; //把当前结点next置空NULL 22 rear->next=s; //s操作上一个结点,让上一个节点的next指向当前结点 23 rear=s; //尾指针指向当前结点
    }while((ch=getchar())!=' ');
    26 return head; //返回头指针 27 } 28 int main() 29 { 30 LinkList p; 31 p=create_Linklist( ); 32 p=p->next; //有头结点,让p跳过头结点,指向表中的第一个节点 33 while(p!=NULL) 34 { 35 printf("%d ",p->data); 36 p=p->next ; 37 } 38 printf(" "); 39 return 0; 40 }

    结果如下:

    其实尾插法创建链表的时候,头结点可有可无,根据需要来选择。

  • 相关阅读:
    大数相乘ADT(String)
    ubuntu16.04光流(.flo)转png格式图片
    7. Reverse Integer
    1. Two Sum
    Ubuntu16.04安装opencv3.2(cuda8.0)
    Ubuntu16.04安装PAPI API
    faster r-cnn demo.py理解
    window10远程连接ubuntu16.04
    lab_2 Selenium
    软件测试homework 3
  • 原文地址:https://www.cnblogs.com/buanxu/p/12795655.html
Copyright © 2011-2022 走看看