类的定义
首先定义一个类,这个类应该包含私有属性线性表长度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语言实现线性表的顺序存储可以参考
另外,本文的代码也已经上传,可以在我的资源中免费下载。