顺序表的删除

顺序表的删除

在长度为 n(n<1000)的顺序表中可能存在着一些值相同的“多余”数据元素(类型为整型),编写一个程序将“多余”的数
据元素从顺序表中删除,使该表由一个“非纯表”(值相同的元素在表中可能有多个)变成一个“纯表”(值相同的元素在表中只能有一个)。
输入
第一行输入表的长度 n;
第二行依次输入顺序表初始存放的 n 个元素值。
输出
第一行输出完成多余元素删除以后顺序表的元素个数;
第二行依次输出完成删除后的顺序表元素。
示例输入
12
5 2 5 3 3 4 2 5 7 5 4 3
示例输出
5
5 2 3 4 7

思路:

嵌套遍历两遍该表(i)(j) 如果a[i] == a[j]且i != j 则说明有相同元素,删除。

#include<iostream>
#include<cstdio>
#define Max 1000

using namespace std ;

int max ( int a , int b )
{
	return a>b?a:b ;
}
class Form
{
	private :
		int a[Max] , length ;
	public :
		Form ( int l ) : length (l) {}
		int Return () //返回长度 
		{
			return length ;
		 } 
		void Creat () //创建 
		{
			for ( int i = 0 ; i < length ; i++ )
			{
				int k ;
				cin >> k ; 
				a[i] = k ;
			}
		}
		void Show ()  //输出 
		{
			for ( int i = 0 ; i < length ; i++ )
			{
				cout << a[i] << " " ;
			}
		}
/*		void Delete ( int i )  //如果忘记了就画五个圈去找 
		{
			int k ;
			for ( k = i - 1 ; k < length ; k++ )
			{
				a[k] = a[k+1] ;
			}
			length-- ;
		}//调试可以增加一条语句:一个一个输出  这样方便看结果  */ 
		void traverse ( ) //遍历加删除 
		{
			for ( int i = 0 ; i < length ; i++ )
			{
				for ( int j = 0 ; j < length ; j++)
				{
					if ( i != j ) 
					{
						if ( a[i] == a[j] )
						{
							for ( int k = max(i,j) ; k < length ; k++ )
							{
								a[k] = a[k+1] ;
							}
							length-- ;
						}
					}
				}
			}
		 } 
};
int main ()
{ 
    int a ;
    while ( scanf("%d",&a) != EOF )
	{
		Form f1( a ) ;
		f1.Creat() ;
		f1.traverse() ;
		cout << f1.Return() ;	
		cout << endl ;
		f1.Show() ;
		cout << endl ;
	}
	return 0 ;
 } 
发布了27 篇原创文章 · 获赞 16 · 访问量 1982

猜你喜欢

转载自blog.csdn.net/weixin_43899069/article/details/98172222