因为最近在拿严蔚敏版的《数据结构》复习相关知识,所以就通过动手实现来加深理解,在这里与大家分享。话不多说,直接上代码,注释比较详细,就不另外解说了。
首先是List_Sq.h,这里使用了类模板以及函数模板,便于将该顺序线性表使用在不同的基本数据类型。
#ifndef __List_Sq_H__ #define __List_Sq_H__ #include<iostream> #include<cstdlib> using namespace std; const int LIST_INIT_SIZE = 100; //线性表的初始空间分配量 const int LIST_INCREMENT = 10; // 线性表存储空间的分配增量 const int OVER_FLOW = -2; // 内存分配失败状态代码 // 动态分配顺序存储结构的线性表 template <class T> struct SqList{ T *elem; // 存储空间基址 int length; // 当前长度 int listsize; // 当前分配的存储容量 }; template <class T> class List_Sq { public: void InitList_Sq(SqList<T> &L); // 构造一个空的线性表L void DestroyList_Sq(SqList<T> &L); // 销毁线性表L bool ClearList_Sq(SqList<T> &L); // 将L重置为空表 bool ListEmpty_Sq(SqList<T> L); // 若L为空表,返回true,否则返回false int ListLength_Sq(SqList<T> L); // 返回L中数据元素的个数 bool GetElem_Sq(SqList<T> L, int i, T &e); // 用e返回L中第i个数据元素的值 int LocateElem_Sq(SqList<T> L, T e, bool(*compare)(T e1, T e2)); // 返回L中第1个与e满足关系compare()的数据元素的位序。 // 若这样的数据元素不存在,则返回值为0 bool PriorElem_Sq(SqList<T> L, T cur_e, T &pre_e); // 若cur_e是L中的数据元素,且不是第一个,则用pre_e返回它的前驱 // 否则操作失败,pre_e无定义 bool NextElem_Sq(SqList<T> L, T cur_e, T &next_e); // 若cur_e是L中的数据元素,且不是最后一个,则用pre_e返回它的后继 // 否则操作失败,pre_e无定义 bool ListInsert_Sq(SqList<T> &L, int i, T e); // 在L中第i个位置之前插入新的数据元素e,L的长度加1 bool ListDelete_Sq(SqList<T> &L, int i, T &e); // 删除L的第i个数据元素,并用e返回其值,L的长度减1
顺序存储线性表的C++实现——严蔚敏版《数据结构》
最新推荐文章于 2022-11-26 20:14:23 发布