【TOJ 1214】数据结构练习题――线性表操作(vector实现)

时间:2023-02-23 22:45:07

Description

请你定义一个线性表,可以对表进行“在某个位置之前插入一个元素”、“删除某个位置的元素”、“清除所有元素”、“获取某个位置的元素”等操作。键盘输入一些命令,可以执行上述操作。本题中,线性表元素为整数,线性表的第一个元素位置为1。线性表的最大长度为1000。

Input

各个命令以及相关数据,它们对应的格式如下:

在某个位置之前插入操作:insert,接下来的一行是插入的组数n,下面是n行数据,每行数据有两个值,分别代表位置与插入的元素值

清除线性表:clear

获取某个位置的元素:getelem,接下来一行是需要获取的元素位置

删除某个位置的元素:delete,接下来一行是被删除的元素位置

当输入的命令为exit时,程序结束

Output

当输入的命令为getelem时,请输出获取的元素值,

当输入的命令是delete时,请输出被删除的那个元素值

注意,所有的元素均占一行

Sample input

insert
2
1 1
2 2
delete
1
clear
insert
2
1 3
2 4
getelem
2
exit

Sample output

1
4

#include<vector>
#include
<iostream>
#include
<cstring>
using namespace std;
int main()
{
vector
<int>v;
vector
<int>::iterator it;
char a[15];
int i,p,x,n,s; //s作为计数
while(scanf("%s",a)!=EOF)
{
s
=1; //由于vector从0计数,而我们通常元素的计数从1开始
if(strcmp(a,"insert")==0)
{
scanf(
"%d",&n);
for(i=1;i<=n;i++)
{
cin
>>p>>x; //p是位置第p个,x是第p个元素的值
v.insert(v.begin()+p-1,x); //由于vector从0计数,所以插入第p个元素的位置需-1
}
}
else if(strcmp(a,"clear")==0)
{
v.clear();
}
else if(strcmp(a,"exit")==0)
break;
else if(strcmp(a,"getelem")==0)
{
cin
>>n;
for(it=v.begin();it!=v.end();it++,s++)
if(s==n)
{
cout
<<*it<<endl;
break;
}
}
else if(strcmp(a,"delete")==0)
{
cin
>>n;
for(it=v.begin();it!=v.end();s++)
if(s==n) //第n个元素
{
cout
<<*it<<endl;
it
=v.erase(it); //删除元素,返回值指向已删除元素的下一个位置
break;
}
else it++; //指向下一个位置
}
}
}