[数据结构 - 第3章补充] 线性表之顺序表(C++实现)
2020-12-13 14:19
标签:插入 user vs2013 结构 amp 顺序 etl 避免 ast 顺序表类的定义如下: 传入用户指定的容量参数赋值给 在析构函数中释放顺序表指针申请的内存空间,并指向 先判断顺序表是否存在,且 附加元素即是在表尾后面添加元素。 注意插入位置后的所有元素都要向后移动一个位置,但是在表尾下一个位置插入的这种情况,不用后移;另外允许 注意若删除位置在表尾,则不需要前移。 遍历前需要判断顺序表是否存在,以及是否为空表 在主函数中执行的代码如下: 输出结果如下图所示(编译器为VS2013): [数据结构 - 第3章补充] 线性表之顺序表(C++实现) 标签:插入 user vs2013 结构 amp 顺序 etl 避免 ast 原文地址:https://www.cnblogs.com/linuxAndMcu/p/11558619.html一、类定义
#ifndef SEQLIST_H
#define SEQLIST_H
typedef int ElemType; /* "ElemType类型根据实际情况而定, 这里假设为int */
class SeqList
{
public:
SeqList(int size = 0); // 构造函数
~SeqList(); // 析构函数
bool isEmpty(); // 判断是否为空操作
int getLength(); // 获取顺序表长度操作
void clearList(); // 清空顺序表操作
bool getElem(int i, ElemType *e); // 获取元素操作
int locateElem(const ElemType e); // 查找元素位置操作
bool appendList(const ElemType e); // 附加元素操作
bool insertList(int i, const ElemType e); // 插入元素操作
bool deleteList(int i, ElemType *e); // 删除元素操作
void traverseList(); // 遍历顺序表
private:
ElemType *m_pDataArr; // 指向存放顺序表元素的数组
int m_length; // 顺序表的当前长度
int m_maxSize; // 顺序表的最大容量
};
#endif
二、构造函数
m_maxSize
,声明指针 m_pDataArr
指向 ElemType
数组,m_length
置0。// 构造函数
SeqList::SeqList(int size)
{
// 初始化顺序表的最大容量
m_maxSize = size;
// 初始化存放顺序表元素的数组
m_pDataArr = new ElemType[m_maxSize];
// 初始化顺序表的当前长度
m_length = 0;
}
三、析构函数
NULL
避免成为野指针。// 析构函数
SeqList::~SeqList()
{
delete[] m_pDataArr;
m_pDataArr = NULL;
}
四、判空和获取顺序表长度操作
m_length
等于 0 则表示顺序表未空;返回 m_length
获取长度。// 判断是否为空操作
bool SeqList::isEmpty()
{
return m_length == 0 ? true : false;
}
// 获取顺序表长度操作
int SeqList::getLength()
{
return m_length;
}
五、获取元素操作
i
是否在合理范围内;然后再将 m_pDataArr[i]
的值赋值给元素 e
。// 获取元素操作
bool SeqList::getElem(int i, ElemType *e)
{
// 前提条件: 顺序表已存在,且i在合理范围内:0 m_length) // 若m_length==0,则说明顺序表不存在
return false;
*e = m_pDataArr[i];
return true;
}
六、附加元素操作
// 附加元素操作
bool SeqList::appendList(const ElemType e)
{
// 判断顺序表长度是否大于等于数组长度,是则抛出异常或动态增加容量
if (m_length >= m_maxSize)
return false;
// 在表尾后面添加元素e
m_pDataArr[m_length] = e;
// 表长加1
m_length++;
return true;
}
七、插入元素操作
i
在表尾下一个位置插入。// 插入元素操作
bool SeqList::insertList(int i, const ElemType e)
{
// 判断顺序表是否未满 且 i是否在合法范围内
if (m_length >= m_maxSize || im_length) // 允许i在表尾下一个位置插入
return false;
// 从最后一个元素开始向前遍历到第i个位置,分别将它们都向后移动一个位置
if (i = i; k--)
{
m_pDataArr[k + 1] = m_pDataArr[k];
}
}
// 将要插入元素填入位置i处
m_pDataArr[i] = e;
// 表长+1
m_length++;
return true;
}
八、删除元素操作
// 删除元素操作
bool SeqList::deleteList(int i, ElemType *e)
{
// 判断顺序表是否未满 且 i是否在合法范围内
if (m_length == 0 || im_length - 1)
return false;
// 取出删除元素
*e = m_pDataArr[i];
// 从删除元素的下一个位置开始遍历到最后一个元素位置,分别将它们都向前移动一个位置
if (i != m_length - 1) // 【若删除位置在表尾,则不需要前移】
{
// 将删除元素的下一个位置及后面元素向前移动一位
for (int k = i; k
九、遍历操作
// 遍历顺序表
void SeqList::traverseList()
{
// 判断顺序表是否存在,以及是否为空表
if (m_pDataArr == NULL || m_length == 0)
return;
for (int i = 0; i
十、主函数执行
#include "stdafx.h"
#include
文章标题:[数据结构 - 第3章补充] 线性表之顺序表(C++实现)
文章链接:http://soscw.com/essay/33964.html