一道数据结构的题,求大神助攻啊

写一个函数,删除一个表中所有重复的值,例如将(1,2,2,3,2,5)变成(1,2,3,5)注意:表中的元素未必是排好序的。且每个值得第一次出现应保留。大神帮我啊
最好是c语言的代码,用数组做

什么“表”,链表吗?数据结构介绍具体点,你是要代码还是只要思想,什么语言追问

代码啊~c语言或者c#,最好是数组,链表也行哈

追答

按数组、C#写了一个,思想就是开个Hash表,用来检验当前检索的数值是否已经存在
int[] RemoveDuplicates(int[] targetArray)
{
//结果数组变量和索引值
int[] resultArray = ////这里你自己开一个大小够用的新数组///;
//如果想动态一点的话,就直接把targetArray赋给result,最后取前rIndex + 1个值,就是结果
int rIndex;

//开一个hash表
Hashtable ht=new Hashtable();

for(int i = 0; i < targetArray.length; i++)
{
//如果当前数值是第一次监测到
if(!(ht.Contains(targetArray[i])))
{
resultArray[rIndex++] = targetArray[i];
ht.Add(targetArray[i], i); //你每种数值只要1个,所以Hash表的Value就随便了
} //如果变成不超过n个,那就可以用Value值记录个数
//如果当前数值已经出现过,本次循环就什么也不做
}

return resultArray;
}

追问

这。。。好难懂啊,刚学c#都不懂哦。。。能不能换成c语言的代码。。。

追答

我还特地给你写了注释啊- -
你是哪里没看懂啊?
上面这段代码中没用到C#特有的语法,这些代码里C跟C#的语法基本一样,而C语言中没有预定义哈希表这种类型,需要自己定义,我担心用C语言写的你更看不懂了

以上所有代码就是实现了一个方法:RemoveDuplicates()
方法的返回值是一个int数组,输入参数是一个int数组
在调用的时候跟C语言一样,比如main()中要用的话:
main()
{
...
resultArray = RemoveDuplicates(targetArray);
...
}
C中数组声明中[]是在变量名后:int a[];
C#可以放在数据类型的后面: int[] a;
两者是一样的

Hashtable ht=new Hashtable()
中Hashtable是C#预定义好的哈西表类型,就像int类型一样,如果用C的话,就要自己用结构体定一个,结构体在创建后申请内存空间要用malloc函数,C#就是用new

ht.Contains(key)是哈席表的实例方法,用来检查哈席表ht中是否存在值为key的项,如果用C语言的话,这个方法也要自己写

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-05-02
开个哈希表
第一次出现(那一位还是false)就把那一位标为true,并插入到另一个表中
以后扫描到的数是true就不用管
时间复杂度为O(n)
不懂可问啊满意望采纳谢谢!本回答被网友采纳
第2个回答  2013-05-02
先排序,在删除,O(nlogn)时间复杂度
相似回答