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

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


相关文章
|
2月前
|
存储 算法 Perl
数据结构实验之链表
本实验旨在掌握线性表中元素的前驱、后续概念及链表的建立、插入、删除等算法,并分析时间复杂度,理解链表特点。实验内容包括循环链表应用(约瑟夫回环问题)、删除单链表中重复节点及双向循环链表的设计与实现。通过编程实践,加深对链表数据结构的理解和应用能力。
63 4
|
8天前
|
数据库
数据结构中二叉树,哈希表,顺序表,链表的比较补充
二叉搜索树,哈希表,顺序表,链表的特点的比较
数据结构中二叉树,哈希表,顺序表,链表的比较补充
|
2月前
|
存储 缓存 算法
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式,强调了合理选择数据结构的重要性,并通过案例分析展示了其在实际项目中的应用,旨在帮助读者提升编程能力。
68 5
|
2月前
|
存储 编译器 C语言
【c++丨STL】string类的使用
本文介绍了C++中`string`类的基本概念及其主要接口。`string`类在C++标准库中扮演着重要角色,它提供了比C语言中字符串处理函数更丰富、安全和便捷的功能。文章详细讲解了`string`类的构造函数、赋值运算符、容量管理接口、元素访问及遍历方法、字符串修改操作、字符串运算接口、常量成员和非成员函数等内容。通过实例演示了如何使用这些接口进行字符串的创建、修改、查找和比较等操作,帮助读者更好地理解和掌握`string`类的应用。
59 2
|
2月前
|
安全 编译器 C++
【C++11】可变模板参数详解
本文详细介绍了C++11引入的可变模板参数,这是一种允许模板接受任意数量和类型参数的强大工具。文章从基本概念入手,讲解了可变模板参数的语法、参数包的展开方法,以及如何结合递归调用、折叠表达式等技术实现高效编程。通过具体示例,如打印任意数量参数、类型安全的`printf`替代方案等,展示了其在实际开发中的应用。最后,文章讨论了性能优化策略和常见问题,帮助读者更好地理解和使用这一高级C++特性。
57 4
|
2月前
|
算法 编译器 C++
【C++】模板详细讲解(含反向迭代器)
C++模板是泛型编程的核心,允许编写与类型无关的代码,提高代码复用性和灵活性。模板分为函数模板和类模板,支持隐式和显式实例化,以及特化(全特化和偏特化)。C++标准库广泛使用模板,如容器、迭代器、算法和函数对象等,以支持高效、灵活的编程。反向迭代器通过对正向迭代器的封装,实现了逆序遍历的功能。
36 3
|
2月前
|
存储 编译器 C++
【c++】类和对象(下)(取地址运算符重载、深究构造函数、类型转换、static修饰成员、友元、内部类、匿名对象)
本文介绍了C++中类和对象的高级特性,包括取地址运算符重载、构造函数的初始化列表、类型转换、static修饰成员、友元、内部类及匿名对象等内容。文章详细解释了每个概念的使用方法和注意事项,帮助读者深入了解C++面向对象编程的核心机制。
110 5
|
2月前
|
存储 编译器 C++
【c++】类和对象(中)(构造函数、析构函数、拷贝构造、赋值重载)
本文深入探讨了C++类的默认成员函数,包括构造函数、析构函数、拷贝构造函数和赋值重载。构造函数用于对象的初始化,析构函数用于对象销毁时的资源清理,拷贝构造函数用于对象的拷贝,赋值重载用于已存在对象的赋值。文章详细介绍了每个函数的特点、使用方法及注意事项,并提供了代码示例。这些默认成员函数确保了资源的正确管理和对象状态的维护。
109 4
|
2月前
|
编译器 C++
【c++】模板详解(1)
本文介绍了C++中的模板概念,包括函数模板和类模板,强调了模板作为泛型编程基础的重要性。函数模板允许创建类型无关的函数,类模板则能根据不同的类型生成不同的类。文章通过具体示例详细解释了模板的定义、实例化及匹配原则,帮助读者理解模板机制,为学习STL打下基础。
33 0
|
2月前
|
算法
数据结构之购物车系统(链表和栈)
本文介绍了基于链表和栈的购物车系统的设计与实现。该系统通过命令行界面提供商品管理、购物车查看、结算等功能,支持用户便捷地管理购物清单。核心代码定义了商品、购物车商品节点和购物车的数据结构,并实现了添加、删除商品、查看购物车内容及结算等操作。算法分析显示,系统在处理小规模购物车时表现良好,但在大规模购物车操作下可能存在性能瓶颈。
53 0