#include <iostream>
#include <string>
#include <cstring>
using namespace std;
class va{
int* pRoot;
int num;
public:
va(){
pRoot = new int[10];
for(int i= 0;i<10;i++){
pRoot[i] = i*i;
}
num = 10;
}
~va(){
delete[] pRoot;
num = 0;
pRoot = NULL;
}
bool insert(int data);
void travel(const string&);
};
int main(){
va list;
list.travel("before");
list.insert(11);
list.insert(14);
list.insert(1);
list.travel("after");
return 0;
}
bool va::insert(int data){
for(int i = 0;i<num-1;i++){
if(data > pRoot[i] && data < pRoot[i+1]){
int* pNew = new int[++num];
memcpy(pNew,pRoot,sizeof(int)*(i+1));
pNew[i+1] = data;
memcpy(pNew+i+2,pRoot+i+1,sizeof(int)*(num-2-i));
delete[] pRoot;
pRoot = pNew;
return true;
}
}
if(data > pRoot[num-1]){
int* pNew = new int[++num];
memcpy(pNew,pRoot,sizeof(int)*(num-1));
pNew[num-1] = data;
delete[] pRoot;
pRoot = pNew;
return true;
}else if(data< pRoot[0]){
int* pNew = new int[++num];
memcpy(pNew+1,pRoot,sizeof(int)*(num-1));
pNew[0] = data;
delete[] pRoot;
pRoot = pNew;
return true;
}
return false;
}
void va::travel(const string& prompt){
cout<<prompt<<":"<<endl;
for(int i = 0;i<num;i++){
cout<<pRoot[i]<<" ";
}
cout<<endl;
}
因为该题的主要操作是插入,并且原来的表 是有序的,所以用数组作为存储结构时间上并不高效,不如用链表实现一个 二分插入 ?