当前位置: 代码迷 >> 综合 >> SWUST OJ#943 顺序表插入
  详细解决方案

SWUST OJ#943 顺序表插入

热度:52   发布时间:2023-12-05 17:44:26.0

目录

题目

思路

代码

数据结构

STL

仿STL


题目

建立长度为n的顺序表,在指定的数据元素item之前插入数据元素data。如果指定的数据元素item不存在,则将data插入到顺序表的尾端。(数据类型为整型)

输入

第一行为顺序表的长度n; 第二行为顺序表中的数据元素; 第三行为指定的数据元素item; 第四行为要插入的数据元素data;

输出

输出结果为顺序表中的数据元素。

样例输入

10
10 20 30 40 50 60 70 80 90 100
50
55

样例输出

10 20 30 40 55 50 60 70 80 90 100

思路

输入数据后,先查找item,返回位置。

再在该位置插入data。

同时,该位置之后的所有元素应该往后移动一位。

代码

数据结构

#include <iostream>
#include <algorithm>
using namespace std;
//定义顺序表
typedef struct{int data[10005],len;
}Seqlist; 
//初始化顺序表
void SeqlistInit(Seqlist* &L){L=(Seqlist*)malloc(sizeof(Seqlist));L->len=0;
} 
//创建顺序表
void SeqlistCreate(Seqlist* &L){int n,x;cin>>n;while(n--){cin>>x;L->data[L->len++]=x;} 
}
//查找数据
int SeqlistFind(Seqlist* &L){int x,y;cin>>x;for(int i=0;i<L->len;i++){if(L->data[i]==x){y=i;break;}} return y;
} 
//插入数据
void SeqlistInsert(Seqlist* &L,int y){for(int i=L->len++;i>y;i--){L->data[i]=L->data[i-1];}int x;cin>>x;L->data[y]=x;}
//打印顺序表
void SeqlistPrint(Seqlist* &L){for(int i=0;i<L->len-1;i++){cout<<L->data[i]<<" ";}cout<<L->data[L->len-1]<<endl;
} 
int main(){Seqlist *L;SeqlistInit(L);SeqlistCreate(L);SeqlistInsert(L,SeqlistFind(L));SeqlistPrint(L);return 0;
}

STL

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
vector<int>a;
int main() { int n,x,z;cin>>n;while(cin>>x,a.push_back(x),--n);int Find;cin>>Find;vector<int>::iterator it;it=find(a.begin(),a.end(),Find);// cout<<*it<<endl;cin>>z;a.insert(it,z);for(it=a.begin();it!=a.end();it++) cout<<*it<<" ";return 0;
}

仿STL

#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;
typedef struct {int data[10005];int len;
}Seqlist;
//初始化顺序表
void SeqlistInit(Seqlist* &L) {L=(Seqlist*)malloc(sizeof(Seqlist));L->len=0;
}
//正向迭代器
int* begin(Seqlist* &L) {int *p=&L->data[0];return p;
}
int* end(Seqlist* &L) {int *p=&L->data[L->len];return p;
}
//尾增
void push_back(Seqlist* &L,int key) {L->data[L->len++]=key;
}
//插入
void insert(Seqlist* &L,int* p,int key) {L->len++;int i=L->len;for(int *it=end(L);it!=p;it--,i--) L->data[i]=L->data[i-1];L->data[i]=key;
}
//查找
int* Find(Seqlist* &L,int* pbegin,int* pend,int key) {int *p=end(L);for(int *it=pbegin;it!=pend;it++) {if(*it==key) {p=it;break;}}return p;
}
int main() {Seqlist *L;SeqlistInit(L);int n,x;cin>>n;while(cin>>x,push_back(L,x),--n);int key;cin>>key;int* it;it=Find(L,begin(L),end(L),key);int charu;cin>>charu;insert(L,it,charu);for(int* p=begin(L);p!=end(L);p++) cout<<*p<<" ";return 0;
}