ds通用slist(1.1)

今天我们来讲解上次留下的问题, 对单链表的操作实现一个简单的迭代器。

我们先来定义这个单链表的简单迭代器的操作接口, 如今有迭代器类型sl_iter, 则这个单链表的操作为:

extern sl_iter ds_slistBegin(struct _ds_slist* _p);

extern sl_iter ds_slistEnd(struct _ds_slist* _p);

extern sl_iter ds_slistNext(sl_iter _cur);

或许想要实现begin和end都是很简单的, 直接返回头节点和尾节点元素的地址就可以了, 但是难就难在怎么根据当前的节点值获取其在链表中的下一个元素了……

其实仔细想想也是挺简单的, 这个迭代器不是指针么? 我们只需要让这个指针的地址同时指向元素和单链表的内部节点结构不是就可以实现了么, 这样我们就可以根据这个地址来获取下一个元素的值了。

但是我们该如何让这个指针同时指向元素和链表的内部节点结构呢? 我想大家都想到了吧, 那就让这个元素值做链表节点结构的第一个元素。

struct _slist_node {

    int _x;

    struct _slist_node* _next;

};

这样便可以了。

我们再来定义这个iter。typedef int* sl_iter;为了操作方便我们再在其实现的内部定义typedef struct _slist_node* _slist_iter;这样这个链表的iter操作的秘密就在我们的眼前了。其接口的内部实现如下:

sl_iter ds_slistBegin(struct _ds_slist* _p) {

    return (NULL != _p ? (sl_iter)_p->_head : NULL);

}

sl_iter ds_slistEnd(struct _ds_slist* _p) {

    return (sl_iter)NULL;

}

sl_iter ds_slistNext(sl_iter _cur) {

    _slist_iter _it = (_slist_iter)_cur;

    return (NULL != _it ? (sl_iter)_it->_next : NULL);

}

对于这个简单的int类型的单链表操作就到这里吧, 下次我们再来讲解通用单链表的具体实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值