breezes学算法day01

本文介绍了作者作为编程新手第一天学习数据结构时,如何在C++中实现一个简单的双向链表,包括创建链表、插入元素、显示链表以及修改和删除元素的操作。
摘要由CSDN通过智能技术生成

纵有疾风起,人生不言弃.

我是一个code上的小白,今天是我学习数据结构与算法的第一天,我写了一个双向链表,写个博客记录一下.

#include<iostream>
using namespace std;
class DuLinkList
{
private:
	struct Lnode
	{
		int data;
		Lnode* pre;
		Lnode* next;

	};
	Lnode* head = new Lnode;
	Lnode* tail = new Lnode;
public:
	DuLinkList()
	{
		head->next = tail;//必不可少
		tail->pre = head;//必不可少
		head->data = 0;
		tail->next = nullptr;
		tail->data = 0;


	}

#if 0
	DuLinkList operator=(const Lnode*& now);
	DuLinkList(const Lnode*& now);
#endif

	~DuLinkList()
	{
		Lnode* q;
		q = head;
		while (q->next)
		{
		    q = head->next;
			delete head;
			head = q;
		}
		head = nullptr;
		tail = nullptr;

	}
	Lnode* CreateList(int value)
	{
		Lnode* s = new Lnode;
		s->data = value;
		s->next = nullptr;
		s->pre = nullptr;
		return s;


	}
	void insertlist(int value)
	{
		Lnode* newnode = CreateList(value);
		//指针部分
		Lnode* p = head;
		while (p->next)
		{
			p = p->next;
		}
		p->next = newnode;
		newnode->pre = p;
	}
    
	void display()
	{
		Lnode* now = head;
		while (now)
		{
			cout << now->data << " ";
			now = now->next;

		}
		cout << endl;
	}

	void ChangeElem(int i, int val)//i代表插入位置
	{
		int j = 0;
		Lnode* now = head;
		while (now && j < i)
		{
			now = now->next;
			j++;

		}
		if (!now || j > i)
		{
			cout << "访问越界" << endl;
			return;
		}
		//指针部分
		now->data = val;

	}
	void DeleteElem(int i)
	{
		Lnode* p = head;
		int j=0;
		while (p && j < i)
		{
			p = p->next;
			j++;

		}
		if (!p || j > i)
		{
			cout << "访问越界" << endl;
			return;

		}
		p->pre->next = p->next;
		p-> next->pre = p->pre;

	}

};


int main()
{
	DuLinkList dulinklist;
	for (int i = 1; i < 10; i++)
	{
		dulinklist.insertlist(i);
	}
	dulinklist.display();
	dulinklist. DeleteElem(5);
	dulinklist.display();
	return 0;
}

为了规避编程中中英文符号的错误,一劳永逸,我直接把中文下的符号设置成英文,包意思.有些影响观感,但还好吧.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值