顺序表ADT模板简单应用算法设计:删除顺序表中的冗余元素
作者: 冯向阳时间限制: 1S章节: DS:线性表
截止日期: 2022-06-30 23:55:00
问题描述 :
目的:使用自行设计的顺序表ADT或STL中的vector模板,设计并实现顺序表应用场合的一些简单算法设计。
应用3:试设计一个算法,删除非空顺序表L中的冗余元素,即使得操作之后的顺序表中只保留操作之前表中所有值都不相同的元素(提纯)。
参考函数原型:
(1)顺序表ADT版本
template<class ElemType>
void Purge_Sq( Sqlist<ElemType> &L );
(2)vector版本
template<class ElemType>
void Purge_Sq( vector<ElemType> &L );
输入说明 :
第一行:顺序表的数据元素类型标记(0:int;1:double;2:char;3:string;其余值:输出err)
第二行:待处理顺序表的数据元素(数据元素之间以空格分隔)
输出说明 :
第一行:提纯前顺序表的遍历结果(数据元素之间以“,”分隔)
空行
第二行:提纯后顺序表的遍历结果(数据元素之间以“,”分隔)
输入范例 :
0
13 5 13 9 32 51 76 5 9 8
输出范例 :
13,5,13,9,32,51,76,5,9,8
13,5,9,32,51,76,8
AC代码:
#include<iostream>
#include<cstring>
#include<vector>
#include<cmath>
#include<algorithm>
using namespace std;
template<class ElemType>
void Purge_Sq( vector<ElemType> &l)
{
for(int i=0;i<l.size();i++)
{
for(int j=i+1;j<l.size();j++)
{
if(l[i]==l[j])
{
l.erase(l.begin()+j,l.begin()+j+1);
j--;
}
}
}
}
int main()
{
int Type;
string str;
cin>>Type;
getchar();
if(Type!=0&&Type!=1&&Type!=2&&Type!=3)
{
cout<<"err"<<endl;
return 0;
}
else if(Type==0)
{
int num1=0;
getline(cin,str);
vector<int>a;
for (unsigned i=0; i<str.size(); i++)
{
if (str[i]==' ')
{
a.push_back(num1);
num1=0;
}
else
{
num1=num1*10+str[i]-'0';
}
}
a.push_back(num1);
for(unsigned i=0; i<a.size(); i++)
{
if(i==a.size()-1)
{
cout<<a[i];
}
else cout<<a[i]<<',';
}
cout<<endl;
cout<<endl;
Purge_Sq(a);
for(int i=0; i<a.size(); i++)
{
if(i==a.size()-1)
{
cout<<a[i];
}
else cout<<a[i]<<',';
}
}
else if(Type==1)
{
getline(cin,str);
double num2=0.0;
int flag=0,t=0;
vector<double>b;
for(unsigned i=0; i<str.size(); i++)
{
if(str[i]==' ')
{
int k=1;
for(int j=0;j<t;j++)
{
k*=10;
}
num2/=k;
b.push_back(num2);
num2=0.0;
flag=0;
t=0;
}
else if(str[i]=='.')
{
flag=1;
}
else
{
num2=num2*10+str[i]-'0';
if(flag==1)
{
t++;
}
}
}
int k=1;
for(int j=0;j<t;j++)
{
k*=10;
}
num2/=k;
b.push_back(num2);
for(unsigned i=0; i<b.size(); i++)
{
if(i==b.size()-1)
{
cout<<b[i];
}
else cout<<b[i]<<',';
}
cout<<endl;
cout<<endl;
Purge_Sq(b);
for(int i=0; i<b.size(); i++)
{
if(i==b.size()-1)
{
cout<<b[i];
}
else cout<<b[i]<<',';
}
cout<<endl;
}
else if(Type==2)
{
getline(cin,str);
vector<char> c;
char CH;
for(unsigned i=0; i<str.size(); i++)
{
CH=str[i];
if(CH!=' ')
{
c.push_back(CH);
}
}
for(unsigned i=0; i<c.size(); i++)
{
if(i==c.size()-1)
{
cout<<c[i];
}
else cout<<c[i]<<',';
}
cout<<endl;
cout<<endl;
Purge_Sq(c);
for(int i=0; i<c.size(); i++)
{
if(i==c.size()-1)
{
cout<<c[i];
}
else cout<<c[i]<<',';
}
cout<<endl;
}
else if(Type==3)
{
getline(cin,str);
vector<string>d;
string p;
p="";
p.clear();
for(unsigned i=0; i<str.size(); i++)
{
if(str[i]==' ')
{
d.push_back(p);
p.clear();
}
else
{
p+=str[i];
}
}
d.push_back(p);
for(unsigned i=0; i<d.size(); i++)
{
if(i==d.size()-1)
{
cout<<d[i];
}
else cout<<d[i]<<',';
}
cout<<endl;
cout<<endl;
Purge_Sq(d);
for(int i=0; i<d.size(); i++)
{
if(i==d.size()-1)
{
cout<<d[i];
}
else cout<<d[i]<<',';
}
}
return 0;
}