链表数据结构的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

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


相关文章
|
4月前
|
存储 监控 算法
基于跳表数据结构的企业局域网监控异常连接实时检测 C++ 算法研究
跳表(Skip List)是一种基于概率的数据结构,适用于企业局域网监控中海量连接记录的高效处理。其通过多层索引机制实现快速查找、插入和删除操作,时间复杂度为 $O(\log n)$,优于链表和平衡树。跳表在异常连接识别、黑名单管理和历史记录溯源等场景中表现出色,具备实现简单、支持范围查询等优势,是企业网络监控中动态数据管理的理想选择。
112 0
|
12月前
|
存储 算法 Perl
数据结构实验之链表
本实验旨在掌握线性表中元素的前驱、后续概念及链表的建立、插入、删除等算法,并分析时间复杂度,理解链表特点。实验内容包括循环链表应用(约瑟夫回环问题)、删除单链表中重复节点及双向循环链表的设计与实现。通过编程实践,加深对链表数据结构的理解和应用能力。
193 4
|
9月前
|
存储 机器学习/深度学习 算法
C 408—《数据结构》算法题基础篇—链表(下)
408考研——《数据结构》算法题基础篇之链表(下)。
242 30
|
9月前
|
存储 算法 C语言
C 408—《数据结构》算法题基础篇—链表(上)
408考研——《数据结构》算法题基础篇之链表(上)。
385 25
|
10月前
|
存储 算法 C++
【C++数据结构——图】图的邻接矩阵和邻接表的存储(头歌实践教学平台习题)【合集】
本任务要求编写程序实现图的邻接矩阵和邻接表的存储。需掌握带权有向图、图的邻接矩阵及邻接表的概念。邻接矩阵用于表示顶点间的连接关系,邻接表则通过链表结构存储图信息。测试输入为图的顶点数、边数及邻接矩阵,预期输出为Prim算法求解结果。通关代码提供了完整的C++实现,包括输入、构建和打印邻接矩阵与邻接表的功能。
293 10
|
10月前
|
存储 算法 测试技术
【C++数据结构——线性表】求集合的并、交和差运算(头歌实践教学平台习题)【合集】
本任务要求编写程序求两个集合的并集、交集和差集。主要内容包括: 1. **单链表表示集合**:使用单链表存储集合元素,确保元素唯一且无序。 2. **求并集**:遍历两个集合,将所有不同元素加入新链表。 3. **求交集**:遍历集合A,检查元素是否在集合B中存在,若存在则加入结果链表。 4. **求差集**:遍历集合A,检查元素是否不在集合B中,若满足条件则加入结果链表。 通过C++代码实现上述操作,并提供测试用例验证结果。测试输入为两个集合的元素,输出为有序集合A、B,以及它们的并集、交集和差集。 示例测试输入: ``` a c e f a b d e h i ``` 预期输出:
254 7
|
10月前
|
机器学习/深度学习 存储 C++
【C++数据结构——线性表】单链表的基本运算(头歌实践教学平台习题)【合集】
本内容介绍了单链表的基本运算任务,涵盖线性表的基本概念、初始化、销毁、判定是否为空表、求长度、输出、求元素值、按元素值查找、插入和删除数据元素等操作。通过C++代码示例详细解释了顺序表和链表的实现方法,并提供了测试说明、通 - **任务描述**:实现单链表的基本运算。 - **相关知识**:包括线性表的概念、初始化、销毁、判断空表、求长度、输出、求元素值、查找、插入和删除等操作。 - **测试说明**:平台会对你编写的代码进行测试,提供测试输入和预期输出。 - **通关代码**:给出了完整的C++代码实现。 - **测试结果**:展示了测试通过后的预期输出结果。 开始你的任务吧,祝你成功!
386 5
|
10月前
|
机器学习/深度学习 存储 C++
【C++数据结构——线性表】顺序表的基本运算(头歌实践教学平台习题)【合集】
本文档介绍了线性表的基本运算任务,涵盖顺序表和链表的初始化、销毁、判定是否为空、求长度、输出、查找元素、插入和删除元素等内容。通过C++代码示例详细展示了每一步骤的具体实现方法,并提供了测试说明和通关代码。 主要内容包括: - **任务描述**:实现顺序表的基本运算。 - **相关知识**:介绍线性表的基本概念及操作,如初始化、销毁、判定是否为空表等。 - **具体操作**:详述顺序表和链表的初始化、求长度、输出、查找、插入和删除元素的方法,并附有代码示例。 - **测试说明**:提供测试输入和预期输出,确保代码正确性。 - **通关代码**:给出完整的C++代码实现,帮助完成任务。 文档
222 5
|
11月前
|
数据库
数据结构中二叉树,哈希表,顺序表,链表的比较补充
二叉搜索树,哈希表,顺序表,链表的特点的比较
数据结构中二叉树,哈希表,顺序表,链表的比较补充
|
12月前
|
存储 缓存 算法
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式,强调了合理选择数据结构的重要性,并通过案例分析展示了其在实际项目中的应用,旨在帮助读者提升编程能力。
336 5

热门文章

最新文章

下一篇
开通oss服务