(请教)c++ 顺序表 功能实现: 排序 合并

2025-04-08 08:52:07
推荐回答(2个)
回答1:

#include
#include
#include
#define Size 10
using namespace std;
template
class List
{
//virtual void Clear( )=0;
virtual void Append( )=0;
virtual void Delete( T num)=0;
virtual void print( )=0;
virtual void sort( )=0;
};

template
class arrList:public List
{
private:
T *list;
int maxSize;
int curLen;
public:
arrList() {};
arrList(const arrList & ar);
arrList(const int size)
{
maxSize=size;
curLen=0;
list=new T[maxSize];
}
~arrList()
{
delete []list;
}
// virtual void Clear( );
virtual void Append( );
virtual void Delete(T num );
// friend iostream & operator<<( iostream os, const arrList ar);
virtual void print();
virtual void sort( );
friend void merge(arrList &c,arrList &a,arrList &b);
arrList & operator=(const arrList & ar);
};

template
arrList & arrList::operator=(const arrList & ar)
{

if(this == & ar)
return * this;
else
{
for(int i = 0; i list[i] = ar.list[i];
}
return * this;
}
template
arrList::arrList(const arrList & ar)
{
list = new T[ar.maxSize];
maxSize = ar.maxSize;
curLen = ar.curLen;
for(int i = 0; i list[i] = ar.list[i];
}

template
void arrList::Append( )//产生随机数
{
srand(time(NULL));
while(1)
{
if(curLen>=maxSize)
break;
else
{
list[curLen]=rand();
curLen++;
}
}
}

template
void arrList::Delete(T num)//删除5 3
{
int i,j;
for(i=0;i {
if(list[i]%num==0)
{
for(j=i;j list[j]=list[j+1];
curLen--;
}
}
}

template
//iostream & operator << ( iostream os, const arrList ar)
void arrList::print()
{
int i;
for(i=0;i< maxSize;i++)
cout< cout<}

template
void arrList::sort( )
{
int i,j;
T temp;
for(j = 0; j < maxSize; j++)
for(i = j + 1; i < maxSize; i++)
if(list[i] {
temp=list[j];
list[j]=list[i];
list[i]=temp;
}
}
template
void merge(arrList &c, arrList &a,arrList &b)
{
int i;
for(i=0;i {
c.list[i] = a.list[i];
c.curLen++;
}
for(i=0;i {
c.list[a.maxSize+i] = b.list[i];
c.curLen++;
}
}

int main()
{
arrList a(Size),b(Size);
a.Append();
cout << "a: " << endl;
a.print();
b.Append();
cout << "b: " << endl;
b.print();
arrList c=a; //没有定义操作符重载
arrList d=b; //没有定义操作符重载
c.sort();//为什么a c 同时更改
cout<<"c:\n";
c.print();
d.sort();
// b)合并这两个链表为一个
arrList e(2*Size);
merge(e, a,b);
cout<<"e:\n";
e.print();
// 分别删除第一链表中能被5整除的结点和第二个链表中能被3整除的结点。
a.Delete(5);
cout<<"a after delete:\n";
a.print();
cout< b.Delete(2);
cout<<"b after delete:\n";
b.print();
return 0;
}
arrList c=a;
arrList d=b; 你没定义操作符重载。

回答2:

你用的是继承下来赋值操作符,自己重写赋值操作符