zoukankan      html  css  js  c++  java
  • 数据结构 -- 链表的整表创建

    1、单链表的整表创建

    单链表的整表创建有两种方法、一种是采用头插法、就是始终让新结点在第一个位置。另一种是采用尾插法、每次把新结点都插在终端结点的后面,按照排队时的正常思维,所谓的先来后到。

    1.1、尾插法实现

    • 整体思路:

      • 首先定义一个节点p、该节点为头节点。
      • 然后定义一个节点l、代表尾节点。
      • 让p指向l、也就是说、刚开始头尾节点指向同一个位置。
      • 每次生成的新节点都先给l.next、因为l.next代表原先尾节点的指针域、将新节点赋值给原先尾节点的指针域、然后将尾节点l向后移动、也就是将新节点赋值给l、这个时候l.next又为空了、因为此时l的位置又在尾节点上了。
    • 代码如下:

    /**
     * 尾插法创建单链表
     **/
    #include <stdio.h>
    #include <stdlib.h>
    typedef struct students
    {
        int id;
        struct students *next;
    } stus;
    //单链表整表创建
    stus *initList()
    {
    
        stus *p = (stus *)malloc(sizeof(stus)); //头节点、一直不动、返回出去然后根据头节点遍历链表
    
        stus *l = p; //尾节点、初始时和头节点指向同一个位置
    
        int i;
    
        for (i = 1001; i <= 1005; i++)
        {
    
            stus *s = (stus *)malloc(sizeof(stus)); //新节点
    
            s->id = i; //新阶段数据域
    
            s->next = NULL; //新阶段指针域
    
            l->next = s;
    
            l = s; //将尾节点移动到当前新节点的位置
        }
        return p;
    }
    

    尾插法每次将新节点放在最后位置、然后移动尾指针向后移动、始终指向最后一个节点。

    1.2、头插法实现

    • 整体思路:

      • 首先定义一个节点p、该节点为头节点。
      • 然后执行p->next=NULL、因为是头插法、每次新的节点都在第一个位置、那么首次添加的新节点到最后就跑到最后的位置了、所以要将它的指针域设为空。
      • 每次生成的新节点后、先将p->next赋值给新节点的指针域s->next、也就是说、将原来的头节点赋值给新节点的指针域
      • 最后执行p->next = s、也就是将新节点赋值给头节点的指针域。这样、头节点的next就指向新节点的位置了。
    • 代码实现:

    /**
     * 头插法创建单链表
     **/
    #include <stdio.h>
    #include <stdlib.h>
    typedef struct students
    {
        int id;
        struct students *next;
    } stus;
    stus *initList()
    {
    
        stus *p = (stus *)malloc(sizeof(stus)); //头节点、一直不动、返回出去然后根据头节点遍历链表
    
        p->next=NULL;
    
        int i;
    
        for (i = 1001; i <= 1005; i++)
        {
    
            stus *s = (stus *)malloc(sizeof(stus)); //新节点
    
            s->id = i; 
    
            s->next = p->next; 
    
            p->next = s;
    
        }
        return p;
    }
    

    头插法用的是插队的办法,就是始终让新结点在第一的位置、所以每次都要将原来第一个节点赋值给新节点的next指针域、然后将新节点赋值给头节点的next指针域、这样新节点就是第一个节点了,而原来第一个节点的位置就变成第二个节点的位置了。

  • 相关阅读:
    史上最全Html与CSS布局技巧
    Discuz! X的CSS加载机制
    关于input框只能输入纯数字问题
    对象的数据属性
    vue中将光标定位到Input上的问题
    端口占用问题解决方案
    el-button如何消除右边计数样式
    如何改变vscode的背景颜色
    为什么——要实例化对象?
    call()&apply()
  • 原文地址:https://www.cnblogs.com/dcy521/p/14830617.html
Copyright © 2011-2022 走看看