C++ 循环链表

本文详细介绍了C++中如何创建和操作循环链表,包括初始化、插入节点、删除节点以及遍历等操作。通过实例代码解析了循环链表的工作原理及其优势,帮助读者深入理解数据结构中的这一重要概念。
摘要由CSDN通过智能技术生成

//模板递归推导数列
template<int ...args>
struct idx_holder {

};

template<int N, class Holder>
struct idx_seq {
	typedef idx_seq<N, Holder> seq;
};

template<int N, int...Ns>
struct idx_seq<N, idx_holder<Ns...>> {
	typedef typename idx_seq<N - 1, idx_holder<N, Ns...>>::seq seq;
};

template<int... Ns>
struct idx_seq<1, idx_holder<Ns...>> {
	typedef idx_holder<1, Ns...> seq;
};

template<int N>
constexpr typename idx_seq<N, idx_holder<>>::seq make_idx_seq()
{
	return {};
}

void pf(int a, int b, int c)
{
	std::cout << a << b << c << std::endl;

}

template<int... idSqs>
void use_seq(idx_holder<idSqs...>)
{
	pf(idSqs...);
}


template<class T>
struct DbNode {
	T data;
	DbNode<T> *pred, *next;
	DbNode(const T &value, DbNode<T> *a = nullptr, DbNode<T> *b = nullptr) :\
		data(value), pred(a), next(b) {}
	DbNode(DbNode<T> *a = nullptr, DbNode<T> *b = nullptr) :pred(a), next(b) {}
};

template <typename T>
class CircDbList {
public:
	CircDbList() :m_pHead(nullptr) {};
	~CircDbList() { Release(); };

	void Release();
	DbNode<T> *CreateHead(const T& data);
	DbNode<T> *Add(DbNode<T> *node, BOOL bIsEnd = TRUE);
	DbNode<T> *Add(const T& data, BOOL bInEnd = TRUE);
	BOOL Remove(DbNode<T> *node, BOOL bIsDel = TRUE);
	BOOL PopNode(DbNode<T> *node);
	void Print(int n);

private:
	DbNode<T> *m_pHead;
};

template <typename T>
void CircDbList<T>::Print(int n) {
	if (n)           //正序打印
	{
		std::cout << "Positive order: ";
		DbNode<T> *tmp = m_pHead;
		while (tmp->next != m_pHead) {
			std::cout << tmp->data << "->";
			tmp = tmp->ne
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值