#include<iostream>
#include<stdlib.h>
using namespace std;
typedef int T;
class SeqList{
int maxSize;
int last = 0;
public:
int cnt = 0;
int un[30];
T *data;
SeqList(int sz);
~SeqList()
{
delete[]data;
}
int Find(T& x)const;
bool Insert(int i,T&x);
int Remove(T&x);
void input();
void output();
void Union(SeqList &LA,SeqList &LB);
void Intersection(SeqList &LA,SeqList &LB);
int Length();
T getData ( int i ) const {
return data[i-1] ; };
};
SeqList::SeqList(int sz)
{
if(sz>0)
{
maxSize=sz;
last=-1;
data=new T[maxSize];
if(data==NULL)
{
cerr<<"存储分配错误!"<<endl;
exit(1);
}
}
}
int SeqList::Find(T& x)const
{
for(int i=0;i<=last;i++)
if(data[i]==x)return i+1;
return 0;
}
int SeqList::Remove(T&x){
int i=Find(x)-1;
if(i>=0){
last--;
for(int j=i;j<=last;j++)
data[j]=data[j+1];
return 1;
}
return 0;
}
bool SeqList::Insert(int i,T&x)
{
i=i-1;
if(last==maxSize-1){
cerr<<"顺序表已满,无法插入!"<<endl;
return false;
}
if(i<0||i>last+1){
cerr<<"参数i越界出错!"<<endl;
return false;
}
for(int j=last;j>=i;j--)
data[j+1]=data[j];
data[i]=x;
last++;
return false;
}
void SeqList::input(){
while(1){
cin>>last;
if(last<=maxSize-1)break;
cout<<"表中元素个数输入错误,范围不能超过:"<<maxSize-1<<":";
}
for(int i=0;i<last;i++)
{
cin>>data[i];
}
}
void SeqList::output(){
for(int i=0;i<last;i++)
cout<<" "<<data[i];
}
int SeqList::Length(){
return last;
}
void Union(SeqList &LA,SeqList &LB){
cout<<"A union B is";
for (int i=0; i<LA.Length(); ++i)
LA.un[LA.cnt++] = LA.data[i];
for (int i=0; i<LB.Length(); ++i)
if (!LA.Find(LB.data[i]))
LA.un[LA.cnt++] = LB.data[i];
for (int i=0; i<LA.cnt; ++i)
cout<<" "<<LA.un[i];
cout<<endl;
}
void Intersection(SeqList &LA, SeqList &LB ) {
int n = LA.Length();
//int cnt = 0;
cout<<"A cross B is";
for (int i=0; i<n; ++i){
if (LB.Find(LA.data[i]))
cout<<" "<<LA.data[i];
}
cout<<endl;
}
void hebing(SeqList &LA,SeqList &LB)//有序顺序表的合并
{
for (int i=0; i<LA.cnt-1; ++i)
for (int j=i+1; j<LA.cnt; ++j)
if(LA.un[i]>LA.un[j]){
int x = LA.un[i];
LA.un[i] = LA.un[j];
LA.un[j] = x;
}
cout<<"A union B in sequence is";
for (int i=0; i<LA.cnt; ++i)
cout<<" "<<LA.un[i];
cout<<endl;
}
int main(int argc,char *argv[])
{
SeqList a(30);
SeqList b(30);
a.input();
cout<<"A is created as:";
a.output();
cout<<endl;
int location,neirong;
cin>>location;
cin>>neirong;
a.Insert(location,neirong);
cout<<"After inserted A is";
a.output();
cout<<endl;
int x;
cin>>x;
a.Remove(x);
cout<<"After deleted A is";
a.output();
cout<<endl;
int finds,i;
cin>>finds;
i=a.Find(finds);
if (i==0)
{
cout<<finds<<" is not found "<<endl;
}
else
{
cout<<finds<<" is located at index of "<<i<<endl;
}
int find2,t;
cin>>find2;
t=a.Find(find2);
if (t==0)
{
cout<<find2<<" is not found "<<endl;
}
else
{
cout<<find2<<" is located at index of "<<t<<endl;
}
b.input();
cout<<"B is created as:";
b.output();
cout<<endl;
Intersection(a,b);
Union(a,b);
hebing(a,b);
return 0;
}
顺序表及其应用
猜你喜欢
转载自blog.csdn.net/qq_38717135/article/details/79891672
今日推荐
周排行