typedef struct _seqlist {
datatype data[20];
int last; //表中最后一个元素的下标,从0开始。-1表示该线性表为空表
}seqlist;
int del_repeat_seqlist(seqlist *sq) //删除数组中的重复字符 ,自定义:如果元素的值为0x7FFFFFF,说明该元素为重复元素
{
int i, j;
for (i=0; i<length_seqlist(sq)-1; i++)
{
if (sq->data[i] == 0x7FFFFFFF) //如果发现元素的值为0x7FFFFFFF,则继续for循环
continue;
for (j=i+1; j<length_seqlist(sq); j++)
{
if ((sq->data[j] == sq->data[i]) && (sq->data[j] != 0x7FFFFFFF))
{
sq->data[j] = (datatype)(0x7FFFFFFF);
}
}
}
for (i=2; i<length_seqlist(sq)+1; i++) //从第二个元素开始判断,如果有值为0x7FFFFFFF的元素,则删除
{
if ( sq->data[i-1] == 0x7FFFFFFF)
{
del_seqlist(sq, i); // i传过去的时候,里面会先进行i-1.因为第i个元素其实就是data[i-1]。
i--;
}
}
return 0;
}
int del_seqlist(seqlist *sq, int pos) //删除数组中的元素
{
if ((sq == NULL) || empty_seqlist(sq) || pos<1 || pos>length_seqlist(sq))
{
printf("delete position is error!\n");
exit(1);
}
int i;
int tmp = sq->data[pos-1]; //因为位置pos其实就是元素data[pos-1]
if (pos == length_seqlist(sq))
{
sq->last--;
return tmp;
}
for (i=pos-1; i<length_seqlist(sq)-1; i++){
sq->data[i] = sq->data[i+1];
}
sq->last--;
return tmp;
}
int length_seqlist(seqlist *sq)
{
return (sq->last + 1);}
本文介绍了一种算法用于删除线性表中的重复元素,包括如何通过自定义标识符来识别重复项,并提供了一个完整的函数实现过程。
中的重复元素&spm=1001.2101.3001.5002&articleId=9181871&d=1&t=3&u=7ce6bcd42cfc4364bbfbb158163a322b)
4773

被折叠的 条评论
为什么被折叠?



