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.cc
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.cc
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;
}
#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;
}