数据结构 第一折 链表——使用灵活的双链表

咱们学数据结构大致能吧各种结构分成两类:线性和非线性。线性表也可以简单的分为两类:地址相邻的与地址离散的。
链表的各个成员,在地址中的分布就是离散的。我们利用指针把地址中的一块块内存串联起来,形成一个可迭代的结构,这就是链表。
链表分为单链表和双链表,单链表只有指向后继节点的指针,而双链表则同时具有指向前驱节点和后继节点的指针。
话不多说,我们看代码
头插法

template <typename T>
//链表
class link_list
{
private:
	int si=0;	//记录节点个数
	struct node
	{
		T data;
		node *next;
		node *pre;
	};
	node *head;
	node *tail;
	node *creat_node(T data)	//构造节点
	{
		node *new_node = new node;
		new_node->data = data;
		new_node->next = nullptr;   //节点中的指针有必要指向NULL
		new_node->pre = nullptr;
		return new_node;
	}
public:
	link_list()		//构造函数
	{
		head = new node;
		tail = new node;
		head->data = 0;
		tail->data = 0;
		head->next = tail;
		tail->next = nullptr;
		head->pre = nullptr;
		tail->pre = head;
		
	}
	void insert_font(T data)	//头插法
	{
		node *new_node = creat_node(T data);
		new_node->next = head->next;
		new_node->pre = head;
		head->next->pre = new_node;
		head->next = new_node;
		si++;
	}
	void insert_back(T data)	//尾插法
	{
		node *new_node = creat_node(data);
		new_node->pre = tail->pre;
		new_node->next=tail;
		tail->pre->next = new_node;
		tail->pre = new_node;
		si++;
	}
	node *find_node(T data)		//寻找节点
	{
		node *it = head;
		while (it->next != nullptr)
		{
			it = it->next;
			if (it->data == data)
				return it;
		}
	}
	void delete_node(T data)	//删除节点
	{
		node *it = find_node(data);
		if (it->pre != nullptr&&it->next != nullptr)
		{
			delete(it);
			si--;
		}
	}
	int size()	//返回节点个数
	{
		return si;
	}
	node *begin()	//返回头节点
	{
		return head;
	}
	node *end()		//返回尾结点
	{
		return tail;
	}
};
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值