加入收藏 | 设为首页 | 会员中心 | 我要投稿 焦作站长网 (https://www.0391zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 安全 > 正文

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

发布时间:2020-03-14 19:10:23 所属栏目:安全 来源:站长网
导读:上一篇跟大家聊过“线性表顺序存储,通过实验,大家也知道,如果我每次向顺序表的头部插入元素,都会引起痉挛,效率比较低下,第二点我们用顺序存储时,容易受到

一:线性表的简单回顾

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

二:链表

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

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

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

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

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

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

代码段如下:

复制代码 代码如下:


#region 链表节点的数据结构
/// <summary>
/// 链表节点的数据结构
/// </summary>
    public class Node<T>
    {
 7/// <summary>
/// 节点的数据域
/// </summary>
        public T data;

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

2.常用操作:

链表的常用操作一般有:

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

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

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

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

代码段如下:

复制代码 代码如下:


#region 将节点添加到链表的末尾
        /// <summary>
/// 将节点添加到链表的末尾
/// </summary>
/// <typeparam></typeparam>
/// <param></param>
/// <param></param>
/// <returns></returns>
        public Node<T> ChainListAddEnd<T>(Node<T> head, T data)
        {
            Node<T> node = new Node<T>();

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

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

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

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

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

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

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

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

效果图:

代码段如下:

复制代码 代码如下:


1#region 将节点添加到链表的开头
/// <summary>
/// 将节点添加到链表的开头
/// </summary>
/// <typeparam></typeparam>
/// <param></param>
/// <param></param>
/// <returns></returns>
        public Node<T> ChainListAddFirst<T>(Node<T> head, T data)
        {
            Node<T> node = new Node<T>();

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

head = node;

return head;

}
        #endregion

<3> 插入节点:

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

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

效果图:

代码段:

复制代码 代码如下:

(编辑:焦作站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读