シーケンス表の使用


順序表の作成と基本操作問題の説明を上手にマスターすることを助けます.順序表を設計し、基本操作を実現します.基本的な要求:順序表を作成します.(1)データを入力します.(2)データの挿入、削除、検索、出力などの基本的な操作を実現する.(3)集合の並べ替え、引き渡し、二つの順序表の統合を実現する.
#include 
#include 
using namespace std;
const int Size=100;
template <class T>
class SeqList{
protected:
    int maxSize;  //      
    int last;    //      
    T *data;   //  
    void reSize(int size);    //         
public:
    SeqList(int sz=Size);   //    
    SeqList(const SeqList &S);   //      
    SeqList &operator=(SeqList &S);  //    
    ~SeqList() {delete []data;}      //    
    int Size() const  {return maxSize;}    //      
    int Length() const {return (last+1);}   //      
    bool isEmpty() {return (last==-1)? true:false;}  //    
    bool isFull()  {return (maxSize==last+1)? true:false;}   //    
    int Search1(T &x)const;      //     ,     
    int Search(T &x)const;      //     ,     
    int Locate(int i)const;     //   i   
    bool getData(int i,T &x)const;  //   i   
    bool setData(int i,T &x);   //   i   
    bool Insert(int i,T &x);      //  i       
    bool Remove(int i);      //   i   
    void Sort();     //  
    void Input();    //  
    void Output();    //  
    void Use(int size) {reSize(size);}    //  reSize  
    void Union(SeqList   L);      //         
    void Intersection(SeqList L);     //         
    void Union1(SeqList  L);    //        
    void delete1(T &x);
};

template <class T>
SeqList::SeqList(int sz){
    if(sz>0){
        maxSize=sz;
        last=-1;
        data=new T[sz];
        if(data==NULL)  {
            cout<<"      !"<exit(1);
        }
    }
}

template <class T>
SeqList::SeqList(const SeqList &S)  {
    maxSize=S.Size();
    last=S.Length()-1;

    T value;
    data=new T[maxSize];
    if(data==NULL) {
       cout<<"      !"<exit(1);
    }
    for(int i=1;i<=last+1;i++) {
        S.getData(i,value);
        data[i-1]=value;
    }
}

template <class T>
SeqList &SeqList::operator=(SeqList &S) {
     maxSize=S.Size();
     last=S.Length()-1;
     T value;
     data=new T[maxSize];
     if(data==NULL)  {
        cout<<"      "<exit(1);
     }
     for(int i=1;i<=last+1;i++) {
        S.getData(i,value);
        data[i-1]=value;
     }
     return (*this);
}

template <class T>
int SeqList::Search1(T&x)const{
    int i;
    for(i=0;i<=last;i++)  {
        if(data[i]==x) {
           cout<" is located at index of ";
           cout<1<return i+1;
        }
    }
    cout<" is not found"<return -1;
}

template <class T>
int SeqList::Search(T&x)const{
    int i;
    for(i=0;i<=last;i++)  {
        if(data[i]==x) {
           cout<1<return i+1;
        }
    }
    return -1;
}

template <class T>
int SeqList::Locate(int i)const {
   if(i>=1&&i<=last+1)
        return i;
   return -1;
}

template <class T>
void SeqList::delete1(T &x)   {
     int j;
     for(int i=0;i<=last;i++)  {
         if(data[i]==x)  {
            data[i]=data[i+1];
            j=i+1;
            break;
        }
     }
     for(int z=j;z<=last;z++)  {
        data[z]=data[z+1];
     }
     last--;
}

template <class T>
bool SeqList::getData(int i,T &x)const {
    if(i>=1&&i<=last+1) {
        x=data[i-1];
        return true;
    }
    return false;
}

template <class T>
bool SeqList::setData(int i,T &x){
     if(i>=1&&i<=last+1) {
        data[i-1]=x;
        return true;
    }
    return false;
}

template <class T>
bool SeqList::Insert(int i,T &x){
    if(last+1==maxSize)  return false;
    if(i<0||i>last+1) return false;
    int j;
    for(j=last;j>=i;j--)  {
        data[j+1]=data[j];
    }
    data[i]=x;
    last++;
    return true;
}

template <class T>
bool SeqList::Remove(int i){
    if(last==-1)  return false;
    if(i<1||i>last+1)  return false;
    for(int j=i-1;j1];
    }
    last--;
    return true;
}

template <class T>
void SeqList::Input() {
    while(1)   {
        int x;
        cin>>x;
        last=x-1;
        if(last>=0&&last<=maxSize-1)
            break;
    }
    for(int j=0;j<=last;j++)  {
        cin>>data[j];
    }
}

template <class T>
void SeqList::Output()  {
     for(int j=0;j<=last;j++)  {
        cout<<" "<cout<template <class T>
void SeqList::Sort()   {
     T value;
     for(int i=1;i<=last;i++)  {
        for(int j=0;j<=last-i;j++) {
            if(data[j]>data[j+1])
            {
                value=data[j];
                data[j]=data[j+1];
                data[j+1]=value;
            }
        }
     }
}

template <class T>
void SeqList::reSize(int size)  {
    if(size<=0)  cout<<"       "<if(size>maxSize)  {
       T *newarray=new T[size];
       if(newarray==NULL)  {
        cout<<"      !"<exit(1);
       }
       int j=last+1;
       T *a=data;
       T *b=newarray;
       while(j--)   {
          * b++=* a++;
       }
       delete []data;
       data=newarray;
       maxSize=size;
    }
}

template <class T>
void SeqList::Union(SeqList L){
    int m=L.Length();
    int n=this->Length();
    int flag;
    T x;
    for(int i=1;i<=n;i++)    {
        this->getData(i,x);
        flag=L.Search(x);
        if(flag==-1)  {
            L.Insert(m,x);
            m++;
        }
    }
    cout<<"A union B is";
    L.Output();
}

template<class T>
void SeqList::Intersection(SeqList  L)  {
     int m=L.Length();
     int flag;
     T x;
     int i=1;
     while(i<=m)   {
        L.getData(i,x);
        flag=this->Search(x);
        if(flag==-1)  {
            L.Remove(i);
            m--;
        }
        else i++;
     }
    cout<<"A cross B is";
    L.Output();
}

template <class T>
void SeqList::Union1(SeqList L){
    this->Sort();
    L.Sort();
    int m=this->Length();
    int n=L.Length();
    int flag;
    T x;
    for(int i=1;i<=n;i++)    {
        L.getData(i,x);
        flag=this->Search(x);
        if(flag==-1)  {
            this->Insert(m,x);
            m++;
        }
    }
    cout<<"A union B in sequence is";
    this->Output();
}
int main()
{
    SeqList<int> com(20);
    com.Input();
    cout<<"A is created as:";
    com.Output();
    int x,y;
    cin>>x>>y;
    com.Insert(x-1,y);
    cout<<"After Inserted A is";
    com.Output();
    int z;
    cin>>z;
    com.delete1(z);
    cout<<"After deleted A is";
    com.Output();
    int q;
    cin>>q;
    com.Search1(q);
    cin>>q;
    com.Search1(q);
    SeqList<int> con(20);
    con.Input();
    com.Intersection(con);
    com.Union(con);
    com.Union1(con);
    return 0;
}