问题:设计一个顺序表类。 顺序表是一种常用的数据结构,它有点类似于C++语言中 的数组,即表中的各表项(数据)被存放在一块连续的内存 中。与数组不同的是,顺序表中的各表项必须是相邻的,即 各数据之间不得留有空白。若表未满、所有的空白必须留在 表的尾部
问题:设计一个顺序表类。 顺序表是一种常用的数据结构,它有点类似于 C++ 语言中 的数组,即表中的各表项(数据)被存放在一块连续的内存 中。与数组不同的是,顺序表中的各表项必须是相邻的,即 各数据之间不得留有空白。若表未满,所有的空白必须留在 表的尾部
顺序表的基本操作主要有: 1.建立一个空表 2.销毁一个顺序表 3.清空顺序表 4.测试顺序表是否为空表 5.测试顺序表是否已满 6.获得顺序表的最大长度 7.获得表中实际元素个数 8.取得表中指定位置上元素的值 9.在表中查找指定的数据元素 10.在指定位置插入一个数据元素 11.删除表中指定位置上的数据元素 12.遍历顺序表,主要用于测试顺序表
顺序表的基本操作主要有: 1. 建立一个空表 2. 销毁一个顺序表 3. 清空顺序表 4. 测试顺序表是否为空表 5. 测试顺序表是否已满 6. 获得顺序表的最大长度 7. 获得表中实际元素个数 8. 取得表中指定位置上元素的值 9. 在表中查找指定的数据元素 10. 在指定位置插入一个数据元素 11. 删除表中指定位置上的数据元素 12. 遍历顺序表,主要用于测试顺序表
设计思想: 1.通常情况下,一个具体的数据结构仅能存放某一种特定的 数据元素。为方便起见,本例所设计的顺序表中仅能存放int 型数据。 2.考虑到通用性,顺序表的大小应能由用户任意指定。因此, 该类应当拥有一个int型数据成员,根据用户的要求,利用 neW运算符为该数据成员申请一块动态指定大小的内存。 3.该类必须拥有一个int型数据成员来记录顺序表的大小;还 须有一个int型数据成员来记录表中当前存放的数据元素的个 数。注意:回顾顺序表与普通数组的区别可以发现,后者同时 还指出了当前表中第一个空白位置。 4.顺序表的创建与销毁分别由构造函数和析构函数来完成
设计思想: 1. 通常情况下,一个具体的数据结构仅能存放某一种特定的 数据元素。为方便起见,本例所设计的顺序表中仅能存放 int 型数据。 2. 考虑到通用性,顺序表的大小应能由用户任意指定。因此, 该类应当拥有一个 int* 型数据成员,根据用户的要求,利用 new 运算符为该数据成员申请一块动态指定大小的内存。 3. 该类必须拥有一个 int 型数据成员来记录顺序表的大小;还 须有一个 int 型数据成员来记录表中当前存放的数据元素的个 数。注意:回顾顺序表与普通数组的区别可以发现,后者同时 还指出了当前表中第一个空白位置。 4. 顺序表的创建与销毁分别由构造函数和析构函数来完成
∥/QL|STH #if I defined QLIST H ∥防止重复嵌放 define QLIST H #include class QList i protected int * pData;∥指向动态数组的指针 int nNumElem;∥当前元素个数 int sIze ∥顺序表的大小 public QList(int = 10) QListo delete [pData; 3
// QLIST.H #if !defined _QLIST_H_ // 防止重复嵌放 #define _QLIST_H_ #include class QList { protected: int *pData; // 指向动态数组的指针 int nNumElem; // 当前元素个数 int nSize; // 顺序表的大小 public: QList(int = 10); ~QList() { delete []pData; }
void Clear I nNumElem=0; J int IsEmpty o return nNumElem ==0 Full t return nNumElem > nSize nt Length return n Size; y int NumberofElemts( return nNumElem;] int Append(int) int Insert(int, int) int Delete(int, int&) int Find(int) void Traverse fendi ∥/ End of QLIST.H
void Clear() { nNumElem = 0; } int IsEmpty() { return nNumElem == 0; } int IsFull { return nNumElem >= nSize; } int Length() { return nSize; } int NumberOfElemts() { return nNumElem; } int Append(int); int Insert(int, int); int Delete(int, int&); int Find(int); void Traverse(); }; #endif // End of QLIST.H
∥/ LIST.CPP #include qlist. h QList: QList(int n)从构造函数 f(n!=0) pData new intn else pData =0; n Size = n: nNumElem =0
// LIST.CPP #include "qlist.h" QList::QList(int n) // 构造函数 { if(n != 0) pData = new int[n]; else pData = 0; nSize = n; nNumElem = 0; }
QList: Append( nt nNewElem)∥/添加数据元素 if(suLlo return 0 pData[nNumElem ++]= nNewElem return 1
int QList::Append(int nNewElem) // 添加数据元素 { if(IsFull()) return 0; pData[nNumElem ++] = nNewElem; return 1; }
int QList: Insert( int nIndex, int nNewElem)∥插入数据元素 if(IsFullol nIndex >nNumElem nNumElem >=nSize return o ∥返回出错信息 for(int i= nNumElem; i> nIndex; i--) pData[=paa-1:∥移动 pDatanIndex]= nNewElem;/插入 nNumElem ++ ∥当前元素个数加 return 1 ∥操作正常
int QList::Insert(int nIndex, int nNewElem) // 插入数据元素 { if(IsFull() || nIndex > nNumElem || nNumElem >= nSize) return 0; // 返回出错信息 for(int i = nNumElem; i > nIndex; i --) pData[i] = pData[i - 1]; // 移动 pData[nIndex] = nNewElem; // 插入 nNumElem ++; // 当前元素个数加一 return 1; // 操作正常 }
It QList: Delete(int nIndex,int&rEem)∥删除数据元素 if(IsEmptyo ll nIndex >=nNumElem nNumElem ==0) return 0 rElem= pDatanIndex ∥保存被删元素值 for(inti= nIndex;i< nNumElem;i++)∥移动 pData[=pata+1];∥填补被删位置 nNumElem 当前元素个数减 return 1
int QList::Delete(int nIndex, int& rElem) // 删除数据元素 { if(IsEmpty() || nIndex >= nNumElem || nNumElem == 0) return 0; rElem = pData[nIndex]; // 保存被删元素值 for(int i = nIndex; i < nNumElem; i ++) // 移动 pData[i] = pData[i + 1]; // 填补被删位置 nNumElem --; // 当前元素个数减一 return 1; }
int QList:Find( int eLem)∥查找指定元素 for(int i=0; i nNumElem; i ++ if(pData[]== eLem) return ∥查找成功 return -1 ∥查找失败
int QList::Find(int nElem) // 查找指定元素 { for(int i = 0; i < nNumElem; i ++) if(pData[i] == nElem) return i; // 查找成功 return -1; // 查找失败 }