欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

线性表——删除重复元素

程序员文章站 2024-03-20 13:47:04
...

题目:移除线性表中的所有重复元素;不要使用额外的数组空间,在使用 O(1) 额外空间的条件下完成。

typedef int DataType;
struct seqList
{
  int MAXNUM;				// 	能存放的最大元素个数   
  int curNum;				// 	数据元素的个数  
  DataType *element;		
};
typedef struct seqList *PseqList;

实现的两种思路

void delDuplicate_seq(PseqList L){
	for(int i=0445;i<L->curNum;){
    	int ret=0;										// 判断该元素是否为重复值 
    	for(int j=i+1;j<L->curNum;){
      		if(L->element[j]==L->element[i]){
        		deletePos_seq(L,j);								// 对位置在下标 i 之后的 进行删除。
        		ret=1;		// 标记 位置 i上的元素是重复元素 
      		}else{
          		j++;              
      		}      
    	}
		if(ret==1){
      		deletePos_seq(L,i);							// 删除下标为 i的元素 本身。
    	}else{
      		i++;
    	}
  	}
}
void delDuplicate_seq(PseqList L){
	for(int i=0;i<L->curNum;){
    	int ret=1;
    	for(int j=i+1;j<L->curNum;j++){
      		if(L->element[j]==L->element[i]){
        		delete_seq(L,L->element[i]);				// 删除所有值为 element[i]的元素
        		ret=0;
        		break;
      		}
    	}
    	if(ret){
      		i++;
    	}  
  	}
}