用C语言实现的链表:https://blog.csdn.net/alidada_blog/article/details/80412723
#include<iostream>
#include<Windows.h>
#include<assert.h>
using namespace std;
typedef int DataType;
//双向链表
struct ListNode
{
DataType data;
ListNode* pNext;
ListNode* pRev;
//初始化
ListNode(DataType x)
:data(x)
, pNext(NULL)
, pRev(NULL)
{}
};
class List
{
typedef ListNode Node;
public:
List();
~List();
//拷贝构造函数
List(const List& l)
{
head = new Node(DataType());
head->pNext = head;
head->pRev = head;
Node* cur = l.head->pNext;
while (cur != l.head)
{
this->PushBack(cur->data);
cur = cur->pNext;
}
}
List& operator = (List l)
{
swap(head, l.head);
return *this;
}
//尾插
void PushBack(DataType x)
{
Insert(head,x);
}
//在pos前插入x值
void Insert(Node* pose, DataType x)
{
Node* prev = pose->pRev;
Node* newnode = new Node(x);
pose->pRev = newnode;
newnode->pNext = pose;
prev->pNext = newnode;
newnode->pRev = prev;
}
//尾删
void PopBack()
{
Erase(head->pNext);
}
//销毁pose节点
void Erase(Node* pose)
{
assert(pose != head);
Node* Next = pose->pNext;
Node* prve = pose->pRev;
delete pose;
prve->pNext = Next;
Next->pRev = prve;
}
//头插
void PushFront(DataType x)
{
Insert(head->pNext,x);
}
//尾删
void PopFront()
{
Erase(head->pNext);
}
//打印链表
void PrintList()
{
Node* cur = head->pNext;
while (cur != head)
{
cout << cur->data << "->";
cur = cur->pNext;
}
cout << endl;
}
//链表的大小
size_t Size()
{
size_t size;
Node* cur = head->pNext;
while (cur != head)
{
++size;
cur = cur->pNext;
}
return size;
}
//判空
bool Empty()
{
return head->pNext = head;
}
private:
Node* head;
};
List::List()
{
head = new Node(DataType());
head->pNext = head;
head->pRev = head;
}
List::~List()
{
Node* cur = head->pNext;
while (cur != head)
{
Node* Next = cur->pNext;
delete cur;
cur = Next;
}
delete head;
head = NULL;
}
int main()
{
List l1;
l1.PushFront(1);
l1.PushFront(2);
l1.PushFront(3);
l1.PushFront(4);
l1.PopBack();
l1.PrintList();
List l2(l1);
l2.PrintList();
List l3;
l3.PushBack(10);
l3.PushBack(20);
l3.PushBack(30);
l2 = l3;
l2.PrintList();
system("pause");
return 0;
}
和C语言相比我觉得C++实现的链表更加方便,而且易于去理解其中的实现过程。再调用的时候我们只需要利用创建的对象去调用其函数。而且C++实现的链表不易于人们去更改其中的值,安全性更高。