与线性表有关的的这俩题该怎样程序实现

  1. 小明很喜欢玩一款名为祖玛的游戏,我们都知道青蛙可以向其中任意一个位置吐一种颜色的球,当有超过三个相同颜色的球挨着的时候,消去他们,小明想知道怎么知道是不是赢了,你能帮助他吗?给定一个包含整数的序列表示一串球,每个数字代表一种独有的颜色,青蛙会有m次向随机的位置吐一种颜色的球(数字),请你帮助小明判断青蛙吐了m次球后有没有赢,如果赢了输出“YES”,输了输出“NO”
    输入的第一行为一个数字,表示序列共有多少个球。第二行为一串数字,代表球序列,接下来一行为一个整数m,(m<100) ,接下来m行为青蛙的m次吐小球,每一行包含一个整数k和一个整数,代表向第k个球后面吐一个球。
    sample input:
    6
    1 1 3 2 2 5
    6
    6 5
    3 3
    2 1
    1 3
    2 2
    1 5
    sample output:
    YES
  2. 小明遇到了一个小小问题,他有一个长度为n的整型数字序列,现在给定三个操作,插入删除和查找,插入即为在指定位置前插入一个整型数据,删除即为删除指定位置的数,查找即给定一个数,找出它在序列中第一次出现的位置,字符I代表插入,字符D代表删除,字符S代表查找。现在你或许可以编写一个程序,来帮助小明解决这个问题。
    输入的第一行为两个整数n和m,(n<100000,m<100) 接下来一行是n个整数,代表这个序列,接下来会有m行操作,操作有3中形式,
    第一种:I 3 5 代表在序列第三个位置前面插入数字5
    第二种:D 4 代表删除序列第四个位置的数据
    第三种:S 8 代表查找在序列中第一次出现整型8的位置,如果查找不到输出-1
    sample input:
    8 5
    1 2 3 4 5 6 7 8
    I 3 5
    I 1 9
    D 2
    S 3
    S 100

sample output:
4
-1

考察c++ list的使用

第一题

#include<bits/stdc++.h>
using namespace std;
list<int> balls;
list<int>::iterator it;
void check() {//消除球 
    int lst=-1,combo=0;
    it=balls.begin();
    for(it=balls.begin();it!=balls.end();it++) {
        if(*it!=lst)lst=*it,combo=0;
        combo++;
        if(combo==3)break;
    }
    if(combo<3)return;
    balls.erase(it--);
    balls.erase(it--);
    balls.erase(it--);
}
int main() {
    int n,m,x,y;
    cin>>n;
    for(int i=1;i<=n;i++) {
        cin>>x;
        balls.push_back(x);
    }
    cin>>m;
    for(int i=1;i<=m;i++) {
        cin>>x>>y;
        it=balls.begin();
        advance(it,x);
        balls.insert(it,y);
        check();
    }
    if(balls.size()==0)cout<<"YES"; 
    else cout<<"NO";
    return 0; 
} 

第二题

#include<bits/stdc++.h>
using namespace std;
list<int> nums;
list<int>::iterator it;
int search(int x) {
    it=nums.begin();
    int j=0;
    for(;it!=nums.end();it++) {
        j++;
        if(*it==x)return j;
    }
    return -1;
}
int main() {
    int n,m,x,y;
    char ch;
    cin>>n>>m;
    for(int i=1;i<=n;i++) {
        cin>>x;
        nums.push_back(x);
    }
    for(int i=1;i<=m;i++) {
        cin>>ch;
        switch(ch) {
            case 'I'://插入 
                cin>>x>>y;
                it=nums.begin();
                advance(it,x-1);
                nums.insert(it,y);
                break;
            case 'D'://删除 
                cin>>x;
                it=nums.begin();
                advance(it,x-1);
                nums.erase(it);
                break;
            case 'S'://查找
                cin>>x;
                cout<<search(x)<<endl;
                break;
        }
    }
    return 0; 
} 

我觉得可以试下list