这道题虽然是数据结构的方法来做,但是可能代码量有一点长,下面推荐两种用stl的方法,可以偷一点小懒,可以大大压缩代码量!
第一种是用动态数组vector来做,如下:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
vector<int>v;
for(int i=0;i<n;i++){
int x;
cin>>x;
v.push_back(x);//将元素放入动态数组中
}
int m,data;
cin>>m>>data;
if(m<1||m>n){
cout<<"error!";
return 0;
}else{
v.insert(v.begin()+m-1,data);因为在数组中元素的下标与它实际在数组中的序号是相差1的,所以应该m-1,在此之前去插入元素
}
for(int j=0;j<=n;j++){
cout<<v[j]<<" ";
}
return 0;
}
也可以用队列实现,思路就是当前位置小于指定位置的时候,就把队首元素拿出来,并且在队列中删掉它,但是一旦等于,我们就先输出这个elem,再继续之前的操作,代码如下:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
queue<int>q;
for(int i=1;i<=n;i++){
int x;
cin>>x;
q.push(x);
}
int position;
cin>>position;
if(position<1||position>n){
cout<<"error!";
return 0;
}
int elem;
cin>>elem;
if(position<n){
for(int j=1;j<position;j++){
cout<<q.front()<<" ";
q.pop();
}
cout<<elem<<" ";
for(int p=position;p<=n;p++){
cout<<q.front()<<" ";
q.pop();
}
}else{
for(int h=1;h<=position;h++){
cout<<q.front()<<" ";
q.pop();
}
cout<<elem<<" ";
}
return 0;
}