线性表中的顺序表
作者:Rem ㅤ | 发布时间:
序言
我大学学习的第一门语言是c++,到目前已经有三年了但是也只能说是了解了这门语言,不敢说掌握更不敢说熟练,加上最近在进行考研,我会尽量把数据结构中的一些代码复现,一方面自己可以复习一下,另一方面大家可以批评指正或者学习。由于没有c/c++这个版块我就自己开了一个😉.
线性表中的顺序表
其实就是用数组保存数据,但是还有一些其他的方法。
定义一个整形数组:
int arr[10];//数组大小为10
参考资料(2023年数据结构考研复习指导 --王道论坛 编组)中使用c语言实现线性表的一系列函数,我尝试使用c++的类进行复现.但是使用在使用类的时候若将函数作为类函数,那么按照参考书上面的一些函数参数会显得不必要,因此后续我不会继续把函数作为类方法,而是在类外定义实现以保持参数与参考书的一致性.
特点
-
使用动态数组以实现容量大小的动态扩展.
int *arr = new int[n];//创建动态数组
delete[] arr;//销毁动态数组 -
使用模板类以实现兼容性
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()
或者添加代码:
报错内容:
undefined reference to `WinMain@16' collect2.exe: error: ld returned 1 exit status
宏定义所定义的变量是常量,在程序运行的过程中不能更改
在动态增大数组容量的时候,我的判断条件是顺序表当前大小等于宏定义的数组最大大小:
//宏定义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++