注册 登录
编程论坛 C++教室

一道二级的题目

小编程员 发布于 2009-08-28 14:01, 362 次点击
#include<iostream>
using namespace std;
class SortedList{  //有序数据表类
  int len;
  double *d;
public:
  SortedList(int len, double data[]=NULL);
  ~SortedList(){ delete []d; }
  int length()const{ return len; }  //有序数据表长度(即元素的个数)
  double getElement(int i)const{ return d[i]; }
  void mergeFrom(const SortedList& list);  //将 list 合并到当前有序数据表中
  void show()const;  //显示有序数据表
};
void writeToFile(char *, const SortedList&);
SortedList::SortedList(int len, double data[]):len(len){
  d=new double[len];
  for(int k=0; k<len; k++)
    d[k]=(data==NULL ? 0.0 : data[k]);
  for(int i=0; i<len-1; i++){
    int m=i;
    for(int j=i; j<len; j++)
      if(d[j]<d[m]) m=j;
    if(m>i){
      double t=d[m];
      d[m]=d[i];
      d[i]=t;
    }
  }
}
void SortedList::mergeFrom(const SortedList& list){  //将 list 合并到当前有序数据表中
//********333********


//********666********
}
   
void SortedList::show()const{  //显示有序数据表
  for(int i=0; i<len-1; i++) cout<<d[i]<<", ";
  cout<<d[len-1]<<endl;
}

int main(){
  double s1[]={5,8,1,2,10,4,7};
  double s2[]={6,3,11,9,12};
  SortedList list1(7,s1),list2(5,s2);

  cout<<"合并前:"<<endl;
  list1.show();
  list2.show();

  list1.mergeFrom(list2);
  cout<<endl<<"合并后:"<<endl;
  list1.show();
  list2.show();

  writeToFile("..\\", list1);
  return 0;
}
问题:
请在//********333********


//********666********
里填写语句使得输出结果为
合并前:
1,2,4,5,7,8,10
3,6,9,11,12
合并后:1,2,3,4,5,6,7,8,9,10,11,12
3,6,9,11,12
这是我编的,可是不知道那里有错。
int i=0;
int j=0;
for(;i<=len-1;i++)
if(list.getElement(j)<d[i])
{for(int m=len-1;m>=i;m--)
d[m+1]=d[m];
d[i]=list.getElement(j);
j++;
len++;}
for(;j<=list.len-1;j++)
{d[len]=list.getElement(j);
len++;}
请高手指教,如果可能给出个更好的也感激不尽!

1 回复
#2
xufen3402009-08-28 16:02
四步:
1.分配新内存。
int newlength=this->len+list.length();  
double* newptr=new double[newlength];
2.对新数组赋值
int i=0;
for(i=0;i<this->len;i++) newptr[i]=this->d[i];
for(;i<newlength;i++) newptr[i]=this->list1.getElement(i-len);
3.指针重新指向
delete[] d;
d=newptr;
4.排序
这里我就不写了,数据结构里排序有好多方法,随便都可以。
1