顺序表ADT模板简单应用算法设计:线性表的合并
作者: 冯向阳时间限制: 1S章节: DS:线性表
截止日期: 2022-06-30 23:55:00
问题描述 :
目的:使用自行设计的顺序表ADT或STL中的vector模板,设计并实现顺序表应用场合的一些简单算法设计。
应用4:试设计一个算法,将所有在线性表LB中但不在LA中的数据元素插入到LA中,算法执行之后,线性表LB不再存在。
参考函数原型:
(2)顺序表ADT版本
template<class ElemType>
void Union_Sq( SqList<ElemType> &LA, SqList<ElemType> &LB );
(2)vector版本
template<class ElemType>
void Union_Sq( vector<ElemType> &LA, vector<ElemType> &LB );
输入说明 :
第一行:顺序表的数据元素类型标记(0:int;1:double;2:char;3:string;其余值:输出err)
第二行:待处理顺序表LA的数据元素(数据元素之间以空格分隔)
第三行:待处理顺序表LB的数据元素(数据元素之间以空格分隔)
输出说明 :
第一行:顺序表LA的遍历结果(数据元素之间以“,”分隔)
第二行:顺序表LB的遍历结果(数据元素之间以“,”分隔)
空行
第三行:合并后顺序表LA的遍历结果(数据元素之间以“,”分隔)
输入范例 :
0
13 5 27 9 32 123 76 98 54 87
13 5 13 9 32 51 76 5 54 8
输出范例 :
13,5,27,9,32,123,76,98,54,87
13,5,13,9,32,51,76,5,54,8
13,5,27,9,32,123,76,98,54,87,51,8
这道题用了vector的ElemType形式。想要学习或在题目里用链表的ElemType形式的朋友们可以看我的下一篇文章。
AC代码:
#include<iostream>
#include<cstring>
#include<vector>
#include<cmath>
#include<algorithm>
using namespace std;
template<class ElemType>
void Union_Sq( vector<ElemType> &LA,vector<ElemType> &LB)
{
for(unsigned i=0;i<LB.size();i++)
{
int flag=0;
for(unsigned j=0;j<LA.size();j++)
{
if(LB[i]==LA[j])
{
flag=1;
break;
}
}
if(flag==0)
LA.push_back(LB[i]);
}
}
int main()
{
int Type;
string str,str1;
cin>>Type;
getchar();
if(Type!=0&&Type!=1&&Type!=2&&Type!=3)
{
cout<<"err"<<endl;
return 0;
}
else if(Type==0)
{
int num1=0,num11=0;
getline(cin,str);
getline(cin,str1);
vector<int>a;
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;
for (unsigned i=0; i<str1.size(); i++)
{
if (str1[i]==' ')
{
A.push_back(num11);
num11=0;
}
else
{
num11=num11*10+str1[i]-'0';
}
}
A.push_back(num11);
for(unsigned i=0; i<A.size(); i++)
{
if(i==A.size()-1)
{
cout<<A[i];
}
else cout<<A[i]<<',';
}
cout<<endl;
Union_Sq(a,A);
cout<<endl;
for(unsigned i=0; i<a.size(); i++)
{
if(i==a.size()-1)
{
cout<<a[i];
}
else cout<<a[i]<<',';
}
cout<<endl;
}
else if(Type==1)
{
getline(cin,str);
getline(cin,str1);
double num2=0.0,num22=0.0;
int flag1=0,flag2=0,t1=0,t2=0;
vector<double>b;
vector<double>B;
for(unsigned i=0; i<str.size(); i++)
{int k=1;
if(str[i]==' ')
{
for(int j=0;j<t1;j++)
{
k*=10;
}
num2/=k;
b.push_back(num2);
num2=0.0;
flag1=0;
t1=0;
}
else if(str[i]=='.')
{
flag1=1;
}
else
{
num2=num2*10+str[i]-'0';
if(flag1==1)
{
t1++;
}
}
}
int k=1;
for(int j=0;j<t1;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;
for(unsigned i=0; i<str1.size(); i++)
{
if(str1[i]==' ')
{
int W=1;
for(int j=0;j<t2;j++)
{
W*=10;
}
num22/=W;
B.push_back(num22);
num22=0.0;
flag2=0;
t2=0;
}
else if(str1[i]=='.')
{
flag2=1;
}
else
{
num22=num22*10+str1[i]-'0';
if(flag2==1)
{
t2++;
}
}
}
int K=1;
for(int j=0;j<t2;j++)
{
K*=10;
}
num22/=K;
B.push_back(num22);
for(unsigned i=0; i<B.size(); i++)
{
if(i==B.size()-1)
{
cout<<B[i];
}
else cout<<B[i]<<',';
}
cout<<endl;
Union_Sq(b,B);
cout<<endl;
for(unsigned 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);
getline(cin,str1);
vector<char> c;
vector<char> C;
char CH,CH1;
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;
for(unsigned i=0; i<str1.size(); i++)
{
CH1=str1[i];
if(CH1!=' ')
{
C.push_back(CH1);
}
}
for(unsigned i=0; i<C.size(); i++)
{
if(i==C.size()-1)
{
cout<<C[i];
}
else cout<<C[i]<<',';
}
cout<<endl;
Union_Sq(c,C);
cout<<endl;
for(unsigned 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);
getline(cin,str1);
vector<string>d;
vector<string>D;
string p,P;
p="";
P="";
p.clear();
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;
for(unsigned i=0; i<str1.size(); i++)
{
if(str1[i]==' ')
{
D.push_back(P);
P.clear();
}
else
{
P+=str1[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;
Union_Sq(d,D);
cout<<endl;
for(unsigned i=0; i<d.size(); i++)
{
if(i==d.size()-1)
{
cout<<d[i];
}
else cout<<d[i]<<',';
}
}
return 0;
}