顺序表及其应用

#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