数据结构(十)之单链表的遍历和优化

本文探讨了单链表的遍历方法,分析了传统遍历存在的问题,即时间复杂度过高。提出了通过引入游标机制,实现线性时间复杂度的遍历策略,大大提高了遍历效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.1 遍历
1.1.1 问题

  • 如何遍历单链表中的每一个数据元素

1.1.2 当前单链表的遍历方法

int main()
{

    LinkList<int> list;

    for(int i = 0; i < 5; i++)  // o(n)
    {
        list.insert(0,i);
    }

    for(int i = 0; i < list.length(); i++)    // o(n * n)
    {
        cout << list.get(i) << endl;
    }
    return 0;
}

1.1.3 遗憾的事实

  • 不能以线性的时间复杂度完成单链表的遍历
    1.1.4 新的需求
  • 为单链表提供新的方法,在线性时间内完成遍历

1.2单链表的遍历方法

1.2.1设计思路(游标)

  • 在单链表的内部定义一个游标(Node* m_current)
  • 遍历开始前将游标指向位置为0的数据元素
  • 获取游标指向的数据元素
  • 通过节点中的next指针移动游标

1.2.2 实现思路

  • 提供一组遍历相关的函数,以线性的时间复杂度遍历链表

1.2.3

函数功能说明
move()将游标定位到目标位置
next()移动游标
current()获取游标所指向的数据元素
end游标是否到达尾部(是否为空)

1.2.4 函数设计原型

  • bool move(int i, int step = 1);
  • bool end();
  • T current();
  • bool next();

1.3 单链表内部的一次封装
1.3.1

virtual Node * create()
{
	return new Node();
}
virtual void destroy(Node * pn)
{
	delete pn;
}

1.3.2 封装的意义是什么

  • 封装节点的申请和删除操作更有利于增强扩展性

参考一 : 狄泰软件课程

如有侵权:请联系邮箱 1986005934@qq.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值