C++类模板实现线性表的顺序存储

简介: C++类模板实现线性表的顺序存储

类的定义

首先定义一个类,这个类应该包含私有属性线性表长度length、线性表容量capacity、线性表的数据缓冲区list_buf,以及线性表操作相关的方法。和C语言实现线性表不同的是,C++类中有构造函数和析构函数,会自动管理内存,所以也就不用创建链表和销毁链表的操作了。类的定义如下

1. template<typename MyType>
2. class SeqList
3. {
4. public:
5.  SeqList(int capacity);
6.  ~SeqList();
7. public:
8.  int get_length();
9.  MyType get_data(int pos);
10.   int insert(MyType& node, int pos);
11.   MyType delet(int pos);
12.   int get_capacity();
13.   void clear();
14. private:
15.   int length;
16.   int capacity;
17.   MyType* list_buf;
18. };

成员方法的实现

1. template<typename MyType>
2. SeqList<MyType>::SeqList(int capacity)
3. {
4.  this->list_buf = new MyType[capacity];
5.  this->capacity = capacity;
6.  this->length = 0;
7. }
8. 
9. template<typename MyType>
10. SeqList<MyType>::~SeqList()
11. {
12.   if (this->list_buf != NULL)
13.   {
14.     delete[] this->list_buf;
15.     this->list_buf = NULL;
16.   }
17.   this->capacity = 0;
18.   this->length = 0;
19. }
20. 
21. template<typename MyType>
22. int SeqList<MyType>::get_length()
23. {
24.   return this->length;
25. }
26. 
27. template<typename MyType>
28. MyType SeqList<MyType>::get_data(int pos)
29. {
30.   return this->list_buf[pos];
31. }
32. 
33. template<typename MyType>
34. int SeqList<MyType>::insert(MyType& node, int pos)
35. {
36.   int i = 0;
37.   for (i = this->length; i > pos; i--)
38.   {
39.     this->list_buf[i] = this->list_buf[i - 1];
40.   }
41.   this->list_buf[i] = node;
42.   this->length++;
43.   return 0;
44. }
45. 
46. template<typename MyType>
47. MyType SeqList<MyType>::delet(int pos) //返回元素,不能返回引用,因为pTemp是局部变量
48. {
49.   MyType pTemp = this->list_buf[pos];
50.   for (int i = pos + 1; i < this->length; i++)
51.   {
52.     this->list_buf[i - 1] = this->list_buf[i];
53.   }
54.   this->length--;
55.   return pTemp;
56. }
57. 
58. template<typename MyType>
59. int SeqList<MyType>::get_capacity()
60. {
61.   return this->capacity;
62. }
63. 
64. template<typename MyType>
65. void SeqList<MyType>::clear()
66. {
67.   this->length = 0;
68. }

线性表的实现建议C++和C语言一块对比学习,这样可以进一步理解C++和C的区别,C++通过this指针隐藏了一个参数,在成员方法中不用像C语言一样需要把一个线性表句柄传入参数了。C语言实现线性表的顺序存储可以参考

image.png

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


相关文章
|
5天前
|
存储 编译器 C++
【c++】类和对象(下)(取地址运算符重载、深究构造函数、类型转换、static修饰成员、友元、内部类、匿名对象)
本文介绍了C++中类和对象的高级特性,包括取地址运算符重载、构造函数的初始化列表、类型转换、static修饰成员、友元、内部类及匿名对象等内容。文章详细解释了每个概念的使用方法和注意事项,帮助读者深入了解C++面向对象编程的核心机制。
27 5
|
12天前
|
存储 编译器 C++
【c++】类和对象(中)(构造函数、析构函数、拷贝构造、赋值重载)
本文深入探讨了C++类的默认成员函数,包括构造函数、析构函数、拷贝构造函数和赋值重载。构造函数用于对象的初始化,析构函数用于对象销毁时的资源清理,拷贝构造函数用于对象的拷贝,赋值重载用于已存在对象的赋值。文章详细介绍了每个函数的特点、使用方法及注意事项,并提供了代码示例。这些默认成员函数确保了资源的正确管理和对象状态的维护。
40 4
|
13天前
|
存储 编译器 Linux
【c++】类和对象(上)(类的定义格式、访问限定符、类域、类的实例化、对象的内存大小、this指针)
本文介绍了C++中的类和对象,包括类的概念、定义格式、访问限定符、类域、对象的创建及内存大小、以及this指针。通过示例代码详细解释了类的定义、成员函数和成员变量的作用,以及如何使用访问限定符控制成员的访问权限。此外,还讨论了对象的内存分配规则和this指针的使用场景,帮助读者深入理解面向对象编程的核心概念。
36 4
|
1月前
|
存储 编译器 对象存储
【C++打怪之路Lv5】-- 类和对象(下)
【C++打怪之路Lv5】-- 类和对象(下)
27 4
|
1月前
|
编译器 C语言 C++
【C++打怪之路Lv4】-- 类和对象(中)
【C++打怪之路Lv4】-- 类和对象(中)
24 4
|
1月前
|
存储 安全 C++
【C++打怪之路Lv8】-- string类
【C++打怪之路Lv8】-- string类
22 1
|
1月前
|
编译器 程序员 C++
【C++打怪之路Lv7】-- 模板初阶
【C++打怪之路Lv7】-- 模板初阶
17 1
|
1月前
|
存储 编译器 C语言
【C++打怪之路Lv3】-- 类和对象(上)
【C++打怪之路Lv3】-- 类和对象(上)
17 0
|
1月前
|
存储 编译器 C++
【C++类和对象(下)】——我与C++的不解之缘(五)
【C++类和对象(下)】——我与C++的不解之缘(五)
|
1月前
|
编译器 C++
【C++类和对象(中)】—— 我与C++的不解之缘(四)
【C++类和对象(中)】—— 我与C++的不解之缘(四)