slist源码

本文探讨了C++中的slist,一种占用空间较小的单向列表。由于其特性,slist在插入和删除操作时,特别是远离头部的位置时效率较低。为了解决这个问题,slist提供了insert_after()和erase_after()方法。然而,在尝试运行一个slist实例时遇到了在Linux环境下找不到slist文件的问题,目前尚未解决。
摘要由CSDN通过智能技术生成

slist是一个单向列表 相比与双向列表所耗用的空间更小,某些操作更快
根据STL习惯,插入操作会将新元素插入指定位置之前 而非之后。然后作为一个单向链表,slist没有任何方便的办法可以回头定出前一个位置,因此
他必须从头找起。换句话说,除了slist起点附近的点之外,其他位置上采用inset和erase操作函数,都不是一种好的选择
为了克服这个缺点 slist提供了insert_after()和erase_after()以供

//单向列表的基本结构
struct __slist_node_base{
	__slist_node_base* next;
};
//单向链表的节点结构
template <class T>
struct __slist_node:public __slist_node_base{
	T data;
};
//全局函数:已知某一节点,插入节点其后
inline __slist_node_base* __slist_make_link(
	__slist_node_base *prev_node;
	__slist_node_base *new_node)
{
//令new节点的下一节为prev节点的下一节点
	new_node->next=prev_node->next;
	prev_node->next=new_node;//令prev节点的下一节点指向new节点
	return new_node;
}
//全局函数,单向链表的大小(元素个数)
inline size_t __slist_size(__slist_node_base* node)
{
	size_t result=0;
	for(;node!=0;node=node->next)
		++result;//一个一个累计
	return result;
}
/**
单向链表的迭代器基本结构
*/
struct __
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值