链表数据结构的C++实现:类模板实现线性表的链式存储

简介: 链表数据结构的C++实现:类模板实现线性表的链式存储

类的定义

在类的内部包含一个结构体,结构体包含一个指向下一结点的指针,以及一个数据域,用于存储插入链表的用户数据。

1. #pragma once
2. #include <iostream>
3. using namespace std;
4. 
5. template<typename MyType>
6. class LinkedList
7. {
8. public:
9.  LinkedList();
10.   ~LinkedList();
11. public:
12.   int get_length();
13.   MyType get_data(int pos);
14.   int insert(MyType& node, int pos);
15.   MyType delet(int pos);
16.   void clear();
17. public:
18.   typedef struct ListNode
19.   {
20.     struct ListNode* next;
21.     MyType data;
22.   }ListNode;
23. private:
24.   int length;
25.   ListNode* head;
26. };

成员函数的实现

1. template<typename MyType>
2. LinkedList<MyType>::LinkedList()
3. {
4.  this->head = new ListNode;
5.  this->head->next = NULL;
6.  this->length = 0;
7. }
8. 
9. template<typename MyType>
10. LinkedList<MyType>::~LinkedList()
11. {
12.   ListNode* pCurrent = this->head;
13.   while (pCurrent != NULL)
14.   {
15.     ListNode* pTemp = pCurrent;
16.     pCurrent = pCurrent->next;
17.     delete pTemp;
18.   }
19.   this->length = 0;
20. }
21. 
22. template<typename MyType>
23. int LinkedList<MyType>::get_length()
24. {
25.   return this->length;
26. }
27. 
28. template<typename MyType>
29. MyType LinkedList<MyType>::get_data(int pos)
30. {
31.   ListNode* pCurrent = this->head;
32.   for (int i = 0; i < pos; i++)
33.   {
34.     pCurrent = pCurrent->next;
35.   }
36.   return pCurrent->next->data;
37. }
38. 
39. template<typename MyType>
40. int LinkedList<MyType>::insert(MyType& node, int pos)
41. {
42.   ListNode* pCurrent = this->head;
43.   for (int i = 0; i < pos; i++)
44.   {
45.     pCurrent = pCurrent->next;
46.   }
47.   ListNode* pNode = new ListNode;
48.   pNode->data = node;
49.   pNode->next = pCurrent->next;
50.   pCurrent->next = pNode;
51.   this->length++;
52.   return 0;
53. }
54. 
55. template<typename MyType>
56. MyType LinkedList<MyType>::delet(int pos) 
57. {
58.   ListNode* pCurrent = this->head;
59.   for (int i = 0; i < pos; i++)
60.   {
61.     pCurrent = pCurrent->next;
62.   }
63.   MyType temp_data = pCurrent->next->data;
64.   ListNode* pTemp = pCurrent->next;
65.   pCurrent->next = pCurrent->next->next;
66.   delete pTemp;
67.   this->length--;
68.   return temp_data;
69. }
70. 
71. template<typename MyType>
72. void LinkedList<MyType>::clear()
73. {
74.   ListNode* pCurrent = this->head;
75.   while (pCurrent != NULL)
76.   {
77.     ListNode* pTemp = pCurrent;
78.     pCurrent = pCurrent->next;
79.     delete pTemp;
80.   }
81.   this->head = new ListNode;
82.   this->head->next = NULL;
83.   this->length = 0;
84. }

因为链表的结点是动态分配的,插入一个数据,就用动态构造一个结点,并把要插入的数据存到结点的数据域。所以,在插入元素和删除元素的时候需要使用new和delete来管理内存。

C语言实现链表请参考文章

image.png

另外,代码资源已经上传,可在我的资源免费下载。


目录
打赏
0
0
0
0
13
分享
相关文章
【C++篇】深度解析类与对象(下)
在上一篇博客中,我们学习了C++的基础类与对象概念,包括类的定义、对象的使用和构造函数的作用。在这一篇,我们将深入探讨C++类的一些重要特性,如构造函数的高级用法、类型转换、static成员、友元、内部类、匿名对象,以及对象拷贝优化等。这些内容可以帮助你更好地理解和应用面向对象编程的核心理念,提升代码的健壮性、灵活性和可维护性。
C 408—《数据结构》算法题基础篇—链表(下)
408考研——《数据结构》算法题基础篇之链表(下)。
83 29
|
19天前
|
C 408—《数据结构》算法题基础篇—链表(上)
408考研——《数据结构》算法题基础篇之链表(上)。
78 25
【C++篇】深度解析类与对象(中)
在上一篇博客中,我们学习了C++类与对象的基础内容。这一次,我们将深入探讨C++类的关键特性,包括构造函数、析构函数、拷贝构造函数、赋值运算符重载、以及取地址运算符的重载。这些内容是理解面向对象编程的关键,也帮助我们更好地掌握C++内存管理的细节和编码的高级技巧。
【C++篇】深度解析类与对象(上)
在C++中,类和对象是面向对象编程的基础组成部分。通过类,程序员可以对现实世界的实体进行模拟和抽象。类的基本概念包括成员变量、成员函数、访问控制等。本篇博客将介绍C++类与对象的基础知识,为后续学习打下良好的基础。
|
1月前
|
【C++面向对象——类与对象】Computer类(头歌实践教学平台习题)【合集】
声明一个简单的Computer类,含有数据成员芯片(cpu)、内存(ram)、光驱(cdrom)等等,以及两个公有成员函数run、stop。只能在类的内部访问。这是一种数据隐藏的机制,用于保护类的数据不被外部随意修改。根据提示,在右侧编辑器补充代码,平台会对你编写的代码进行测试。成员可以在派生类(继承该类的子类)中访问。成员,在类的外部不能直接访问。可以在类的外部直接访问。为了完成本关任务,你需要掌握。
70 19
【C++面向对象——类与对象】CPU类(头歌实践教学平台习题)【合集】
声明一个CPU类,包含等级(rank)、频率(frequency)、电压(voltage)等属性,以及两个公有成员函数run、stop。根据提示,在右侧编辑器补充代码,平台会对你编写的代码进行测试。​ 相关知识 类的声明和使用。 类的声明和对象的声明。 构造函数和析构函数的执行。 一、类的声明和使用 1.类的声明基础 在C++中,类是创建对象的蓝图。类的声明定义了类的成员,包括数据成员(变量)和成员函数(方法)。一个简单的类声明示例如下: classMyClass{ public: int
55 13
LeetCode力扣第114题:多种算法实现 将二叉树展开为链表
LeetCode力扣第114题:多种算法实现 将二叉树展开为链表