注册 登录
编程论坛 数据结构与算法

合并两个顺序表错误,运行时会弹出一个框,那是怎么回事

gpf 发布于 2013-11-24 13:49, 473 次点击
#include<iostream.h>
class seplist
{
public:
    seplist();
    ~seplist(){ delete []data; }
    int find();//查找e在表中的位置
    int insert(int k,int x);//第k个位置插入x
    int sort();//奇数偶数,5
    int paixu();//排序
    int locate(int x);
    int get(int i){return (i<0||i>length)?NULL:data[i];}
    int Union(seplist A,seplist B);//合并两个顺序表
    int duichen()//函数是否对称
    {     
        cout<<"判断函数是否对称!"<<endl;
         int i=0;
         int m,flag=1;
         if(length%2!=0)
             cout<<"不对称!"<<endl;
         else
          {
              m=length/2;
              for(i=0;i<m;i++)
              {
                  if(data[i]=data[length-i-1])
                      continue;
                  else
                  {
                      flag=0;
                      break;
                  }

              }
              if(flag==1)
                  cout<<"是对称的!"<<endl;
              else if(flag==0)
                  cout<<"不对称!"<<endl;
         }
         return 0;
    }

    void CreateList()
    {   
        for( int i=0;i<length;i++)
            cin>>data[i];   //输入元素
    }     
    void Traverse()
    {    //顺序表的遍历
        int  i;
        for(i=0;i<length;i++)
        {
            cout<<data[i]<<" ";
        }
        cout<<endl;
    }
private:
    int *data;
    int length;
};
seplist::seplist()
{   
    cout<<"输入创建对象的长度!"<<endl;
    cin>>length;
    if(length>0)
    {
        data=new int[length];//申请动态空间
    }
}
int seplist::find()
{   
    cout<<"查找数组中的一个字符!"<<endl;
    int i=0;
    int e,j=-1;
    cout<<"输入要查找的字符!"<<endl;
         cin>>e;
     while(i<length)
     {
              if(e==data[i])
            {
                j=i;
                break;
            }
       i++;
     }
     if(j==-1)
         cout<<"no same!"<<endl;
     else if(j==i)
             cout<<"e="<<data[j]<<endl;
     return 0;
}
int seplist::insert(int k,int x)
{
    cout<<"插入之后!"<<endl;
    if (k<0 || k>length+1  )
        return 0;
    else    {
        length++;
        for(int j=length;j>k;j--)
            data[j]=data[j-1];
            data[k]=x;
            return 1;
    }
}
int seplist::sort()//奇数在前,偶数在后
{
    cout<<"寄偶交换!"<<endl;
    int i;int j;int t;
    for(j=0;j<length;j++)
        for(i=0;i<length-j-1;i++)
            if(data[i]%2==0&&data[i+1]%2!=0)
            {
                t=data[i];
                data[i]=data[i+1];
                data[i+1]=t;
            }
            return 0;
}
int seplist::paixu()
{
    cout<<"排序之后!"<<endl;
    int i;int j;int t;
    for(j=0;j<length;j++)
        for(i=0;i<length-j-1;i++)
            if(data[i]>data[i+1])
            {
                t=data[i];
                data[i]=data[i+1];
                data[i+1]=t;
            }
            return 0;
}
int seplist::locate(int x)
{
    int i=0;
    while(i<=length && data[i]!=x)
    {
        i++;
        if(i>length)
            return -1;
        else
            return i;
    }
    return 0;
}
int seplist::Union(seplist A,seplist B)
{
    int n=length;
    int m=length;
    for(int i=0;i<m;i++)
    {
        int x=B.get(i);
    int k=A.locate(x);
    if(k==-1)
    {
         A.insert(n+1,x);
         n++;
    }
    }
    return 0;
}

int main()
{
    cout<<"***************************"<<endl;
    cout<<"*                         *"<<endl;
    cout<<"*调  用  各  个  函   数! *"<<endl;
    cout<<"*                         *"<<endl;
    cout<<"***************************"<<endl;
    seplist a,b;
    a.CreateList();
    b.CreateList();
    a.Union(a,b);//调用合并函数,合并之后存放在a中
    a.Traverse();//
输出
    return 0;

}
0 回复
1