欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-09-07 20:05:49
Description 请你定义一个线性表,可以对表进行“在某个位置之前插入一个元素”、“删除某个位置的元素”、“清除所有元素”、“获取某个位置的元素”等操作。键盘输入一些命令,可以执行上述操作。本题中,线性表元素为整数,线性表的第一个元素位置为1。线性表的最大长度为1000。 Input 各个命令 ......

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++;                        //指向下一个位置
        }
    }
}