删除线性表中多余元素

问题:
删除线性表中多余元素
算法1:由于是顺序表进行删除要进行大量移动,时间复杂度比较大,所以选算法2较好。

#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;
typedef struct{
	ElemType *elem;
	int length;
	int listsize;
}Sqlist;
bool Createlist(Sqlist &L,int n);//创建顺序表 
void Input(Sqlist &L);//给顺序表赋值
void Output(Sqlist &L);//给顺序表输出 
bool LocateElem(Sqlist L,ElemType e);//在新的顺序表中查找是否有这个值 
void DeleteElem(Sqlist La,Sqlist &Lb);//删除多余元素(通过建立新表进行往里放) 
int main(){
    Sqlist La,Lb;
    int n=10;
    Createlist(La,n);
    Input(La);
    Output(La);
    DeleteElem(La,Lb);
    Output(Lb);
} 
bool Createlist(Sqlist &L,int n){
	L.elem=(ElemType *)malloc(n*sizeof(ElemType));
	if(!L.elem) return false;//内存分配失败 
	L.length=0;
	L.listsize=n;
	return true;
}
void Input(Sqlist &L){
	int n;
	ElemType elem;
	scanf("%d",&n);
	L.length=n;//记录实长(很关键) 
	for(int i=0;i<n;i++){
		scanf("%d",&elem);
		L.elem[i]=elem;
	} 
}
void Output(Sqlist &L){
	for(int i=0;i<L.length;i++){
	   printf("%d",L.elem[i]);
	   printf("  ");
	} 
	printf("\n");
} 
bool LocateElem(Sqlist L,ElemType e){
	int flag=0;
	for(int i=0;i<L.length;i++){
		if(L.elem[i]==e){
			flag=1;
			return false;
		} 	
	}
		if(!flag)
	 		return true;
}
void DeleteElem(Sqlist La,Sqlist &Lb){
	Createlist(Lb,La.length);
	int k=1;
	Lb.length=1;
	Lb.elem[0]=La.elem[0];
	for(int i=1;i<La.length;i++){
		if(!LocateElem(Lb,La.elem[i]))
				continue;
		else{
				Lb.elem[k]=La.elem[i];
				k++;
				Lb.length++;
			}
		}
}