数据结构

题目描述

在长度为nn<1000)的顺序表中可能存在着一些值相同的“多余”数据元素(类型为整型),编写一个程序将“多余”的数据元素从顺序表中删除,使该表由一个“非纯表”(值相同的元素在表中可能有多个)变成一个“纯表”(值相同的元素在表中只能有一个)。

示例输入

第一行输入表的长度n;第二行依次输入顺序表初始存放的n个元素值。

输出

第一行输出完成多余元素删除以后顺序表的元素个数;第二行依次输出完成删除后的顺序表元素。

示例输入

12

5 2 5 3 3 4 2 5 7 5 4 3

示例输出

5

5 2 3 4 7

//线性顺序表  
#include <stdio.h>  
#include <stdlib.h>  
#define MAXSIZE 1000 //线性表存储空间的初始分配量  
#define OK 1  
#define ERROR 0  
#define OVERFLOW -2  
typedef int elemType;//元素类型  
typedef struct  
{  
	elemType *elem;//线性表首地址  
	int length;//当前的长度  
} SqList;  

//初始化一个空的线性表  
int InitList_Sq(SqList *L)  
{  
	L->elem=new elemType[MAXSIZE];  
	if(!L->elem)exit(OVERFLOW);//overflow  
	L->length=0;//初始表为空表  
	return OK;  
}  


//遍历顺序表  
void TraverseList(SqList *L)  
{  
	int i;  
	for(i=0; i<L->length; i++)  
	{  
		printf("%d ",L->elem[i]);  
	}  
	printf("\n");  
	return;  
}    

//向表尾插入元素  
void InsertLast(SqList *L,elemType e)  
{  
	
	if(L->length >= MAXSIZE)  
		return ;  
	L->elem[L->length]=e;  
	L->length++;  
	return;  
}  




void ListDelete(SqList *L,elemType i)//删除指定位置的线性表 
{
//	if((i<1)||(i>L->length)) return;
	for(int j = i; j <= L->length-1; j++)
		L->elem[j] = L->elem[j+1];
	
	--(L->length);
	
}
//删除重复值 
void DeleteElem(SqList *L)  
{  
	
	for(int i = 0 ;i < L->length ;i++)
	{
		for(int j = i+1 ;j <= L->length-1 ;j++)
		{
			if(L->elem[i] == L->elem[j])
			{
				ListDelete(L,j);
				j--;
			}
			
			
		}
		
	}
	
	
}  

int main()  
{  
	SqList list1;  
	InitList_Sq(&list1);  
	int n;  
	scanf("%d",&n);  
	int i;  
	elemType temp;  
	for(i=0; i<n; i++)  
	{  
		scanf("%d",&temp);  
		InsertLast(&list1,temp);  
	} 
	
	
	
	DeleteElem(&list1) ;
	printf("%d\n",list1.length);
	TraverseList(&list1);
	
	return 0;  
}  





































































































































































































































































































































































































































































































































































































































































































































































































































































































//线性顺序表  
#include <stdio.h>  
#include <stdlib.h>  
#define MAXSIZE 1000 //线性表存储空间的初始分配量  
#define OK 1  
#define ERROR 0  
#define OVERFLOW -2  
typedef int elemType;//元素类型  
typedef struct  
{  
	elemType *elem;//线性表首地址  
	int length;//当前的长度  
} SqList;  

//初始化一个空的线性表  
int InitList_Sq(SqList *L)  
{  
	L->elem=new elemType[MAXSIZE];  
	if(!L->elem)exit(OVERFLOW);//overflow  
	L->length=0;//初始表为空表  
	return OK;  
}  


//遍历顺序表  
void TraverseList(SqList *L)  
{  
	int i;  
	for(i=0; i<L->length; i++)  
	{  
		printf("%d ",L->elem[i]);  
	}  
	printf("\n");  
	return;  
}    

//向表尾插入元素  
void InsertLast(SqList *L,elemType e)  
{  
	
	if(L->length >= MAXSIZE)  
		return ;  
	L->elem[L->length]=e;  
	L->length++;  
	return;  
}  




void ListDelete(SqList *L,elemType i)//删除指定位置的线性表 
{
//	if((i<1)||(i>L->length)) return;
	for(int j = i; j <= L->length-1; j++)
		L->elem[j] = L->elem[j+1];
	
	--(L->length);
	
}
//删除重复值 
void DeleteElem(SqList *L)  
{  
	
	for(int i = 0 ;i < L->length ;i++)
	{
		for(int j = i+1 ;j <= L->length-1 ;j++)
		{
			if(L->elem[i] == L->elem[j])
			{
				ListDelete(L,j);
				j--;
			}
			
			
		}
		
	}
	
	
}  

int main()  
{  
	SqList list1;  
	InitList_Sq(&list1);  
	int n;  
	scanf("%d",&n);  
	int i;  
	elemType temp;  
	for(i=0; i<n; i++)  
	{  
		scanf("%d",&temp);  
		InsertLast(&list1,temp);  
	} 
	
	
	
	DeleteElem(&list1) ;
	printf("%d\n",list1.length);
	TraverseList(&list1);
	
	return 0;  
}  



posted @ 2018-05-12 18:48  底层码农  阅读(270)  评论(0编辑  收藏  举报