插入
首先,插入要满足两个条件,第一,表不能满(length!=max),否则会引发上溢错误;第二,插入位置不合理(i<1||i>length+1)则会引发位置错误。
上面这个"i",不是数组的下标,而是表中的第i个数,从”1“开始的。
int a[12];
int length=10;
for(int i=0;i<length;i++)
{
cin>>a[i];
} //建立数组
cout<<"请输入您要插入的数字,以及位置:"<<endl;
int m,n;
cin>>m>>n;
if(n<1||n>length+1) cout<<"wrong"<<endl;
else
{
for(int i=10;i>=n;i--)
{
a[i]=a[i-1];
} //往后移
a[n-1]=m; //插入
length++;
cout<<"插入后,长度为"<<length<<endl;
for(int i=0;i<length;i++)
cout<<a[i]<<" ";
} //插入后查看
2.删除
删除与插入差不多,也有俩条件,第一,不能啥也没有(length!=0),第二,位置不规范同样会引发错误(i<1||i>length)。
int a[12];
int length=10;
for(int i=0;i<length;i++)
{
cin>>a[i];
} //建立数组
cout<<endl<<"请输入您要删除的数字de位置:"<<endl;
int p;
cin>>p;
if(p<1||p>length) cout<<"wrong"<<endl;
else if(length==0) cout<<"wrong"<<endl;
else
{
for(int j=p;j<length;j++)
a[j-1]=a[j]; //前移...
length--;
}
cout<<"删除后,长度为"<<length<<endl;
for(int i=0;i<length;i++)
cout<<a[i]<<" "; //删除后查看
总而言之,插入和删除注重两个条件,注意表与数据元素长度的关系就行了。
不过,这个效率有点低,时间复杂度T(n)=O(n),若想频繁使用插入删除功能,还得看单链表(当然,单链表也有不足),它的时间复杂度T(n)=O(1),效率会很高,因为它不需要移动元素。
最后,感谢浏览。