1..设线性表存储在数组A[1..arrsize]的前elenum个分量中,且递增有序。试编写一个算法:在线性表中插入元素x,需保持线性表的有序性,并且分析算法的时间复杂度。
我以为很简单,抱歉,高估了自己的实力。
问题1:
宏名定义格式#define <宏名> <字符串>(别用等号)不能自增自减
错误代码如下:
#include<iostream>
int MaxSize=10;
using namespace std;
template<class T>
struct Array_s{
T data;
};
template<class T>
class Array1{
private:
Array_s<T> *first;
int num=0;//数组现有元素数
bool flag_full=0;//判断开辟数组空间是否已满
public:
Array1();
~Array1(){delete first;}
bool insert(T x);
void output();
};
template<class T>
Array1<T>::Array1(){
first=new Array_s<T>[MaxSize];
T x;
cout<<"请输入要输入的元素数";
int m=0;
cin>>num;
if(num>=MaxSize)
{
flag_full=1;
num=MaxSize;//防止溢出
}
cout<<"请输入元素,回车区分";
for(int i=0;i<num;i++)
{
cin>>x;
first[i].data=x;
}
}
template<class T>
bool Array1<T>::insert(T x){
if(first==NULL)
return false;
num++;
if(flag_full==1)//数组满,重新开辟空间
{
Array_s <T>*p=new Array_s<T>[++MaxSize];//出错,空间出错
bool insert_ok=0;
for(int i=0;i<num;i++)
{
if(((first[i].data<=x)&&(insert_ok==0))||(i==num))
{
p[i].data=x;
insert_ok=1;
}
else if(insert_ok==1)
{
p[i+1].data=first[i-1].data;//订正:p[i].data,循环一次i已自增
}
else
{ p[i].data=first[i].data;}
}/*订正:在return true;语句上增加 delete []first;first=p;
开辟了新空间不要忘记释放旧空间,改变指针指向!*/
return true;
}
else//数组没满
{
for(int i=0;i<num;i++)//出错,订正ÿ