设计算法实现删除顺序表中多余重复元素。如:对于顺序表(1,2,3,1,3,4,3,5),利用C语言编程,谢了。

如题所述

for(i=0;i<L->last-1;i++)
{
for(j=i+1;j<L->last;j++)
{
if(a[i]==a[j])

{
这里找到相同的比如在第三个的3和第五个的3是相同的那么就第六个数字以及之后的向前移一位

}
}
}追问

程序如何写?

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-03-14
先排序,然后对相邻的重复元素删除追问

我知道,但是循环语句对元素的删除没办法实现。
for(i=0;ilast;i++)
{
for(j=i+1;jlast;j++)
{}
}
如何改进,谢谢!

追答

C确实很难实现……需要自己手动构造函数删除,而且容易在删除后的地方留下空白(就像砍完树后留下的树桩还会绊倒人一样)。
如果你会用vector就好办多了。C++的标准模版库最适合做这种事情了……
1.数据压入push_back()并排序.
vector vecInt;
int nTemp;
for(int i = 0;i >nTemp;

vecInt.pushback(nTemp);

}
sort(vecInt.begin(),vecInt.end());
2.调用unique算法将冗余元素移至容器末尾,并返回此时新容器的迭代器(你就当是指针好了)。此时剩下的元素会自动被排列在一段连续的空间里。
vector vecInt::iterator it = unique (vecInt.begin(),vecInt.end());
3.将容器末尾的冗余元素全部清除
vecInt.erase(it,vecInt.end());

更详细的说明参看陈良乔著《我的第一本C++书》第284页:
“10.5.2 删除容器中的冗余元素”

第2个回答  2013-03-14
坐等答案,呵呵
相似回答