Description
给出顺序表的初始数据,实现顺序表的定义、创建、插入、删除与查找操作。
Input
测试次数t
每组测试数据格式如下:
第一行: 正整数n,后跟n个整数
第二行: 插入位置 插入元素
第三行: 删除位置
第四行: 删除元素
第五行: 查找元素
Output
对每个顺序表,首先输出建表后的顺序表。
插入、删除操作,操作成功,输出操作后的顺序表。操作不成功,输出ERROR。
查找操作,查找成功,输出:1 元素位置(位置从1开始)比较次数。查找不成功,输出:0 0 比较次数。
Sample Input1
2
5 10 20 14 25 50
1 13
10
10
23
7 88 99 77 11 22 33 44
7 100
1
80
22
Sample Output1
5 10 20 14 25 50
6 13 10 20 14 25 50
ERROR
5 13 20 14 25 50
0 0 6
7 88 99 77 11 22 33 44
8 88 99 77 11 22 33 100 44
7 99 77 11 22 33 100 44
ERROR
1 4 4
#include <iostream>
using namespace std;
class Tap
{
private:
int n;
int *tap;
public:
Tap(){n=0;tap=NULL;};
Tap(int n):n(n)
{
tap=new int [n+1];
for(int i=0;i<n;i++)
{
cin>>tap[i];
}
putout();
}
void putout()
{
cout<<n<<" ";
for(int i=0;i<n;i++)
{
cout<<tap[i]<<" ";
}
cout<<endl;
}
void To_Delete_index(int i)
{
if(i<1||i>n)
{
cout<<"ERROR"<<endl;
return;
}
for(--n,i--;i<=n;i++)
{
tap[i]=tap[i+1];
}
putout();
}
void To_Input(int index,int num)
{
if(index<1||index>n+1)
{
cout<<"ERROR"<<endl;
return;
}
for(int i=n;i>=index;i--)
{
tap[i]=tap[i-1];
}
tap[index-1]=num;
n++;
putout();
}
void To_Delete_value(int num)
{
for(int i=0;i<n;i++)
{
if(num==tap[i])
{
for(--n;i<=n;i++)
{
tap[i]=tap[i+1];
}
putout();
return;
}
}
cout<<"ERROR"<<endl;
}
void To_Find_value(int num)
{
int index=0;
for(int i=n-1;i>=0;i--)
{
index++;
if(num==tap[i])
{
cout<<"1 "<<i+1<<" "<<index<<endl;
return;
}
}
cout<<"0 0 "<<n+1<<endl;
}
};
int main()
{
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
Tap t(n);
int index,num;
cin>>index>>num;
t.To_Input(index,num);
cin>>index;
t.To_Delete_index(index);
cin>>num;
t.To_Delete_value(num);
cin>>num;
t.To_Find_value(num);
}
return 0;
}