记录一下上机作业的问题与思路猜想
目录
1.1顺序表的基本操作
1.1.1删除重复元素
1.2出现的问题与解决方案
1.2.1类模板的成员的外部定义不得具有默认参数
1.2.2无法将函数定义与现有的声明匹配
1.2.3读取位置时发生访问冲突
1.2.4内部编译器错误
1.1顺序表的基本操作
1.1.1删除重复元素
原题如下:
在一个顺序表中如果一个数据值有重复出现,则留下第一个这样的数据值,并删除其他所有重复的元素,使表中所有元素的值均不相同
暴力做法:
顺序表用一维数组存储,需要用两个for循环定位到元素,再用一个for循环依次移动后续元素,最坏时间复杂度为O(n*n*n)
template <class DataType>
void DelRepElem(SqList<DataType>& list)
{
for (int i = 1; i <= list.length; i++)
{
for (int j = i + 1; j <= list.length; j++)
{
if (list.elems[i-1] == list.elems[j-1])
{
if (j = list.length)
list.length--;
else
{
for (int k = j; k <= list.length; k++)
list.elems[k - 1] = list.elems[k];
list.length--;
}
}
}
}
}
改进做法:
还没想到
1.2出现的问题与解决方案
1.2.1类模板的成员的外部定义不得具有默认参数
如果将以下函数放在cpp文件中定义,则会报这个错
SqList<DataType>::SqList(int size)
其中size在声明时有缺省值
1.2.2无法将函数定义与现有的声明匹配
在SpList.h中加上using namespace std,错误解除
该错误一般与1.2.1一起出现
1.2.3读取位置时发生访问冲突
没有成功给数组分配内存空间,如忘记在构造函数中加上如下代码:
elems = new DataType[size];
1.2.4内部编译器错误
(1)一般是语法错误导致编译失败,如没有加;