• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >编程技巧 > 算法系列15天速成 第八天 线性表【下】

算法系列15天速成 第八天 线性表【下】

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-12

通过本文主要向大家介绍了算法系列15天速成 第八天 线性表【下】等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

一:线性表的简单回顾

       上一篇跟大家聊过“线性表"顺序存储,通过实验,大家也知道,如果我每次向顺序表的头部插入元素,都会引起痉挛,效率比较低下,第二点我们用顺序存储时,容易受到长度的限制,反之就会造成空间资源的浪费。

二:链表

      对于顺序表存在的若干问题,链表都给出了相应的解决方案。

1. 概念:其实链表的“每个节点”都包含一个”数据域“和”指针域“。

            ”数据域“中包含当前的数据。

            ”指针域“中包含下一个节点的指针。

            ”头指针”也就是head,指向头结点数据。

            “末节点“作为单向链表,因为是最后一个节点,通常设置指针域为null。

代码段如下:

/// <summary>
/// 节点的指针域
/// </summary>
        public Node<T> next;
    }
    #endregion
</div>

2.常用操作:

    链表的常用操作一般有:

           ①添加节点到链接尾,②添加节点到链表头,③插入节点。

           ④删除节点,⑤按关键字查找节点,⑥取链表长度。

<1> 添加节点到链接尾:

          前面已经说过,链表是采用指针来指向下一个元素,所以说要想找到链表最后一个节点,必须从头指针开始一步一步向后找,少不了一个for循环,所以时间复杂度为O(N)。

代码段如下:

            node.data = data;
            node.next = null;

            ///说明是一个空链表
            if (head == null)
            {
                head = node;
                return head;
            }

            //获取当前链表的最后一个节点
            ChainListGetLast(head).next = node;

            return head;
        }
#endregion
#region 得到当前链表的最后一个节点
        /// <summary>
/// 得到当前链表的最后一个节点
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="head"></param>
/// <returns></returns>
        public Node<T> ChainListGetLast<T>(Node<T> head)
        {
            if (head.next == null)
                return head;
            return ChainListGetLast(head.next);
        }
        #endregion
</div>

<2> 添加节点到链表头:

          大家现在都知道,链表是采用指针指向的,要想将元素插入链表头,其实还是很简单的,

      思想就是:① 将head的next指针给新增节点的next。②将整个新增节点给head的next。

      所以可以看出,此种添加的时间复杂度为O(1)。

效果图:

代码段如下:

            node.data = data;
            node.next = head;

            head = node;

            return head;

        }
        #endregion
</div>

<3> 插入节点:

           其实这个思想跟插入到”首节点“是一个模式,不过多了一步就是要找到当前节点的操作。然后找到

      这个节点的花费是O(N)。上图上代码,大家一看就明白。

效果图:

代码段:

        public Node<T> ChainListInsert<T, W>(Node<T> head, st

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

相关文章

  • 2017-05-12phpMyAdmin“无法载入 mysql 扩展, 请检查 PHP 配置”问题的解决方案
  • 2017-08-22PG伪类型anyelement触发pg_pathman的一个bug
  • 2017-05-12Git 教程之查看提交历史详解
  • 2017-05-12git提交空目录的方法
  • 2017-05-12科学知识:时间复杂度计算方法
  • 2017-05-12数据类型和Json格式分析小结
  • 2017-05-12每个程序员需掌握的20个代码命名小贴士
  • 2017-05-12关于Git远程与本地冲突的解决方法
  • 2018-01-28node安装cnpm代替npm
  • 2017-05-12字符编码详解及由来(UNICODE,UTF-8,GBK) 比较详细

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • IIS 301重定向与程序代码实现301重定向的差别
    • 整理的比较全的一句话后门代码(方面大家查找后门)
    • 算法系列15天速成 第八天 线性表【下】
    • 三招两式 解决图片盗链无法查看问题
    • 各类常见语言清除网页缓存方法汇总
    • 使用git代替FTP部署代码到服务器的例子
    • 在CODEIGNITER中 在CI中引入外部的JS与CSS呢
    • 使用百度云加速后网站打开速度慢、广告不显示的解决方法
    • 在地址栏里显示logo的实现方法
    • Web Jmeter–接口测试工具详解

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有