Problem D:リニアテーブルの基本操作

4514 ワード

Problem D:リニアテーブルの基本操作
Time Limit: 1セット  
メモリLimit: 128 MB
Submit: 344  
Solved: 173
[Submit][Sttus][Web Board]
Description
線形表は重要で基礎的なデータ構造である.MyListクラスを定義して、リニアテーブルへの挿入、削除などの操作をシミュレートしてください.
1.データメンバーint*elements:リニアテーブル要素.
2.データメンバーint len:リニアテーブル容量、つまり、線形テーブルの最大長さです.
3.データメンバーint curLen:線形テーブルの現在の容量、すなわち現在所有している要素の個数.
4.コンストラクタMyList(int culen):構造最大容量は_lenの線形表
5.voidアプリ(int d):リニアテーブルの末尾に要素dを追加します.
6.void insert(int p,int d):リニアテーブルのp番目の位置(0==p
7.void erase(int p):リニアテーブルのp番目の位置(0<=p)を削除します.
8.void set(int p,int d):リニアテーブルのp番目の位置(0<=p)を設定します.
9.void show():現在のリニアテーブルのすべての要素が表示されます.出力する場合、2つの間は1つのスペースで区切られています.先頭にはスペースがありません.
上記の「p」は下付きで、0から計算します.
Input
1行目の整数N>0は、線形テーブルの最大容量を表しています.
2行目の整数M>0は、その後M個の動作があることを示しています.
各操作の種類は、追加、挿入、消去、設定をアルファベットA、I、E、Sでそれぞれ表します.
操作がAの場合は、追加の要素値を入力します.
操作がIの場合は、挿入された位置および要素値を入力します.
操作がEの場合は、消去位置を入力します.
操作がSの場合は、設定された位置および要素値を入力します.
すべての入力は、線形表に対する合法的な操作範囲内です.
Output
操作毎に、リニアテーブルのすべての要素が出力されます.
Sample Input
1010 A 1 A A A 3 A 4 A 5 A 7 I 3 10 E 6 S 1 15
Sample Output
11 21 2 31 2 3 41 2 3 4 51 2 3 5 61 2 3 3 3 3 6 71 2 3 10 4 6 6 71 2 3 3 10 4 5 5 5 5 5 5 5 5 5 5 5 7
HINT
vector、setなどの容器は使用できません.
Apple Code
apple.ccintmain(){    intcases, len, data, pos;    charop;    cin>>len;    MyList myList(len);    cin>>cases;    for(inti = 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();    }    return0;}
#include
 
using namespace std;
class MyList
{
private:
    int *elements;
    int len,curLen;
public:
    MyList(int _len)
    {
        len = _len;
        elements = new int [len];
        curLen = 0;
    }
    void append (int d){ elements[curLen] = d;curLen ++;}
    void insert (int p, int d)
    {
        for(int i = curLen; i >= p; i--)
            elements[i+1] = elements[i];
        elements[p] = d;
        curLen++;
    }
    void erase(int p)
    {
        for(int i = p;i <= curLen; i++)
            elements[i] = elements[i+1];
        curLen--;
    }
    void set(int p, int d) {elements[p] = d;}
 
 
    void show()
    {
        for(int i = 0; i >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;
}