zoukankan      html  css  js  c++  java
  • 每天进步一点点之带头节点单链表

    1,单链表分为带头结点和不带头结点,带头节点的好处,只有实际写代码后才能体会出来。可以类比顺序表中的哨兵

    好处:

    1,第1个位置的插入、删除更加方便,带来操作上的统一。

    2,对于头插法:

    不带头结点的链表,插入第一个结点时,需要特殊处理,删除操作类似.

    3,优势2:统一空表和非空表的处理

    举例:无头结点链表的头插法实现函数,不太明白,为什么网上搜到的样例,总是在循环之前建立了一个结点,放入循环中建立,本人测试并无问题。
    typedef struct Link {
        int  elem;
        struct Link *next;
    }link;
    //无头结点链表的头插法实现函数
    link * creatLink(int * arc, int length) {
        int i;
        //最初状态下,头指针 H 没有任何结点,所以,插入第一个元素,就相当于是创建结点 H
        link * H = NULL;
        //如果采用头插法插入超过 1 个元素,则可添加到第一个结点 H 之前
        for (i = 0; i<length; i++) {
            link * a = (link*)malloc(sizeof(link));
            a->elem = arc[i];
            //插入元素时,首先将插入位置后的链表链接到新结点上
            a->next = H;
            //然后再链接头指针 H
            H = a;
        }
        return H;
    }
    //网上样例,无头结点链表的头插法实现函数
    link * creatLink(int * arc, int length) {
        int i;
        //最初状态下,头指针 H 没有任何结点,所以,插入第一个元素,就相当于是创建结点 H
        link * H =(link*)malloc(sizeof(link));
        H->elem = arc[0];
        H->next = NULL;
        //如果采用头插法插入超过 1 个元素,则可添加到第一个结点 H 之前
        for (i = 1; i<length; i++) {
            link * a = (link*)malloc(sizeof(link));
            a->elem = arc[i];
            //插入元素时,首先将插入位置后的链表链接到新结点上
            a->next = H;
            //然后再链接头指针 H
            H = a;
        }
        return H;
    }
     
  • 相关阅读:
    无向图的双连通分量
    以管理员身份运行软件cmd命令
    异或
    递推求解DAG最长路径长度及最长路径条数
    有向图转强连通图最少加边数
    Tarjan强连通分量(scc)
    uni封装request请求
    生命周期
    页面路由,以及传值
    WXS 模块
  • 原文地址:https://www.cnblogs.com/lixiangfu/p/13371670.html
Copyright © 2011-2022 走看看