纵有疾风起,人生不言弃.
我是一个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;
}
为了规避编程中中英文符号的错误,一劳永逸,我直接把中文下的符号设置成英文,包意思.有些影响观感,但还好吧.