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