线性表中的顺序表

作者:Rem ㅤ | 发布时间:

序言

我大学学习的第一门语言是c++,到目前已经有三年了但是也只能说是了解了这门语言,不敢说掌握更不敢说熟练,加上最近在进行考研,我会尽量把数据结构中的一些代码复现,一方面自己可以复习一下,另一方面大家可以批评指正或者学习。由于没有c/c++这个版块我就自己开了一个😉.

线性表中的顺序表

其实就是用数组保存数据,但是还有一些其他的方法

定义一个整形数组:

 int arr[10];//数组大小为10

参考资料(2023年数据结构考研复习指导 --王道论坛 编组)中使用c语言实现线性表的一系列函数,我尝试使用c++的类进行复现.但是使用在使用类的时候若将函数作为类函数,那么按照参考书上面的一些函数参数会显得不必要,因此后续我不会继续把函数作为类方法,而是在类外定义实现以保持参数与参考书的一致性.

特点

  1. 使用动态数组以实现容量大小的动态扩展.

     int *arr = new int[n];//创建动态数组
     delete[] arr;//销毁动态数组
  2. 使用模板类以实现兼容性

     template<class t>

类定义代码

 template <class T> //使用模板类
 class List
 {
 public:                //动态表类成员变量
     T *Data;           //数据
     int Length;        // 长度
     int Max = MaxSize; //保存最大长度
 
 public: //成员函数
     List() {}
     ~List() {}                                //析构销毁
     void InitList();                          // 初始化
     int GetLength();                          //求表长
     int LocateElem(List<T> L, T e);           //按值查找操作
     T GetElem(List<T> L, int i);              //按位查找操作
     bool ListInsert(List<T> &L, int i, T e);  //插入
     bool ListDelete(List<T> &L, int i, T &e); //删除
     void PrintList(List<T> L);                //输出
     bool Empty(List<T> L);                    //判空
     bool DestroyList(List<T> &L);             //销毁操作
     bool ExpandList(List<T> &L);              //扩容
 };

类方法的实现不在展示,具体代码我已经同步到gitee:

https://gitee.com/incoparab/data-structure

但是后续我会将此代码进一步改善,将其中的类函数改为普通函数.

错误

函数名错误

错误代码:

 int mian()

正确代码:

 int main()

或者添加代码:

 #define mian main

报错内容:

 undefined reference to `WinMain@16' collect2.exe: error: ld returned 1 exit status

宏定义所定义的变量是常量,在程序运行的过程中不能更改

在动态增大数组容量的时候,我的判断条件是顺序表当前大小等于宏定义的数组最大大小:

 #define MaxSize 10//宏定义MaxSize
 if(Length == MaxSize)//Length为顺序表大小

结果在销毁动态数组的时候出现数组越界的错误,经过检查以及学习之后了解到宏定义的标量是常量,在程序运行的过程中不能更改所以我添加了类成员Max用来记录当前数组的最大长度。

动态增加数组容量代码如下:

 template <class T>
 bool List<T>::ExpandList(List<T> &L) //扩容
 {
     T *newData = new T[L.Length + 1];//大小为Length + 1
     for (int i = 0; i < L.Length; i++)
    {
         newData[i] = L.Data[i]; //拷贝数据
    }
     delete[] L.Data;//释放原来的内存
     L.Data = newData;
     Max++;//数组容量 + 1
     return true;
 }
标签:学习笔记, c/c++