双向链表+迭代器的C++实现

双向链表的概述

写链表首先要对链表的构成有一个很好的了解,那么完成一个链表我们需要完成什么呢?

  1. 节点的定义
    对于双向链表,每一个节点都与其前驱、后继的连接,那么这个链接我们通过指向节点的指针来完成。指向节点的指针在解引用之后就是一个节点对象。

  2. 方法的定义
    双向链表因为具有头与尾,所以需要实现的方法有:
    在末尾插入,删除元素
    在链表首部插入、删除元素
    可以像访问数组元素一样使用[]运算符对链表元素进行访问

  3. 迭代器的定义
    首先了解什么是迭代器:

In computer programming, an iterator is an object that enables a programmer to traverse a container, particularly lists. Various types of iterators are often provided via a container’s interface.
An iterator is any object that, pointing to some element in a range of elements (such as an array or a container), has the ability to iterate through the elements of that range using a set of operators (with at least the increment (++) and dereference (*) operators).

最典型的迭代器就是指针,在数组之中可以使用指针对数组进行遍历。但在其他的容器中简单的指针并不能完成这样的活动,所以我们应该使用迭代器来对不同容器完成统一的遍历访问功能。

双向链表的实现:

节点的定义使用:

这一个部分,我们定义了MyList_Node 的结构体作为一个节点的存储单元。其中有三个属性 value 存储值,剩余两个为指向MyList_Node 节点的指针。prev指向此节点的前驱,next 指向此节点的后继。

template<typename T>
struct MyList_Node {
   
	 MyList_Node<T>* prev;
	 MyList_Node<T>* next;
 	 T value;
};

MyList的主体:

class MyList {
   
public:
 //MyList_iterator<T>---在MyList里作为泛型T实例化类模板。原本的东西太长所以取一个别名
 typedef MyList_iterator<T> iterator;
protected:
 MyList_Node<T>* TailNode;//链表尾指针
 size_t len;
public:
 MyList() :len(0) {
   
  TailNode = new MyList_Node<T>;
  TailNode->next = TailNode;
  TailNode->prev = TailNode;
 }
 ~MyList()
  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值