zoukankan      html  css  js  c++  java
  • Problem O: 线性表的基本操作

    #include <iostream>
    #include <iomanip>
    #include <map>
    #include <string>
    #include <list>
    using namespace std;
    class MyList
    {
    public :
        list<int> elements;
        int len;
        int curLen;
        MyList(int _len):len(_len){}
        void append(int d){elements.push_back(d);}
        void insert(int p, int d)
        {
            list<int>::iterator pp;
            pp=elements.begin();
            for(int i=0; i<p; i++)
                pp++;
            elements.insert(pp,d);
        }
        void erase(int p)
        {
            list<int>::iterator pp;
            pp=elements.begin();
            for(int i=0; i<p; i++)
                pp++;
            elements.erase(pp);
    
        }
         void set(int p, int d)
         {
             list<int>::iterator pp;
             pp=elements.begin();
             for(int i=0; i<p; i++)
                pp++;
            *pp=d;
         }
         void show()
         {
             list<int>::iterator pp;
             for(pp=elements.begin(); pp!=elements.end(); pp++)
             {
                 if(pp==elements.begin())
                    cout<<*pp;
                 else
                    cout<<" "<<*pp;
             }
             cout<<endl;
         }
    };
    int main()
    {
        int cases, len, data, pos;
        char op;
        cin>>len;
        MyList myList(len);
        cin>>cases;
        for (int i = 0; i < cases; i++)
        {
            cin>>op;
            switch (op)
            {
            case 'A':
                cin>>data;
                myList.append(data);
                break;
            case 'I':
                cin>>pos>>data;
                myList.insert(pos, data);
                break;
            case 'E':
                cin>>pos;
                myList.erase(pos);
                break;
            case 'S':
                cin>>pos>>data;
                myList.set(pos, data);
            }
            myList.show();
        }
        return 0;
    }
    

      

    Problem O: 线性表的基本操作

    Time Limit: 1 Sec  Memory Limit: 128 MB
    Submit: 1068  Solved: 698
    [Submit][Status][Web Board]

    Description

    线性表是一类重要的且基础的数据结构。请定义MyList类,来模拟针对线性表的插入、删除等操作:

    1. 数据成员int *elements:线性表元素。

    2. 数据成员int len:线性表容量,即线性表的最大长度。

    3. 数据成员int curLen:线性表的当前容量,即当前拥有的元素个数。

    4. 构造函数MyList(int _len):构造最大容量为_len的线性表。

    5. void append(int d):在线性表的末尾追加元素d

    6. void insert(int p, int d):在线性表的第p个位置(0<=p<curLen)插入元素d

    7. void erase(int p):删除线性表的第p个位置(0<=p<curLen)上的元素。

    8. void set(int p, int d):设置线性表的第p个位置(0<=p<curLen)元素为d

    9. void show():显示当前线性表的所有元素。输出时,两两之间用一个空格隔开,首尾不能有空格。

    上述“p”是指下标,从0开始计算。

    Input

    1行的整数N>0,表示线性表的最大容量。

    2行的整数M>0,表示之后有M个操作。

    每个操作的类型用字母AIES分别表示追加、插入、擦除和设置。

    如果操作是A,则之后输入追加的元素值。

    如果操作是I,则之后输入插入的位置及元素值。

    如果操作是E,则之后输入擦除的位置。

    如果操作是S,则之后输入设置的位置及元素值。

    所有输入均在针对线性表的合法操作范围内。

    Output

    每次操作后,输出线性表的所有元素。

    Sample Input

    10

    10

    A 1

    A 2

    A 3

    A 4

    A 5

    A 6

    A 7

    I 3 10

    E 6

    S 1 15

    Sample Output

    1

    1 2

    1 2 3

    1 2 3 4

    1 2 3 4 5

    1 2 3 4 5 6

    1 2 3 4 5 6 7

    1 2 3 10 4 5 6 7

    1 2 3 10 4 5 7

    1 15 3 10 4 5 7

    HINT

    不能使用vectorset等容器。

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    int main()

    {

        int cases, len, data, pos;

        char op;

        cin>>len;

        MyList myList(len);

        cin>>cases;

        for (int i = 0; i < cases; i++)

        {

            cin>>op;

            switch (op)

            {

            case 'A':

                cin>>data;

                myList.append(data);

                break;

            case 'I':

                cin>>pos>>data;

                myList.insert(pos, data);

                break;

            case 'E':

                cin>>pos;

                myList.erase(pos);

                break;

            case 'S':

                cin>>pos>>data;

                myList.set(pos, data);

            }

            myList.show();

        }

        return 0;

    }

    作者:7oDo

    仅供参考,请勿抄袭。

    Hang Hang Hang !!!

  • 相关阅读:
    指针,数组,字符串的区别(高质量程序设计指南C++/C语言第7章)
    bitset初始化问题
    书籍
    编译器的工作过程
    C++函数传递指向指针的指针的应用
    程序员面试金典--二叉树的下一个结点
    程序员面试金典--对称的二叉树
    程序员面试金典--按之字形顺序打印二叉树
    程序员面试金典--阶乘尾零
    程序员面试金典--矩阵元素查找
  • 原文地址:https://www.cnblogs.com/Jie-Fei/p/9158718.html
Copyright © 2011-2022 走看看