题目描述
给出顺序表的初始数据,实现顺序表的定义、创建、插入、删除与查找操作。
输入
测试次数t
每组测试数据格式如下:
第一行: 正整数n,后跟n个整数
第二行: 插入位置 插入元素
第三行: 删除位置
第四行: 删除元素
第五行: 查找元素
输出
对每个顺序表,首先输出建表后的顺序表。
插入、删除操作,操作成功,输出操作后的顺序表。操作不成功,输出ERROR。
查找操作,查找成功,输出:1 元素位置(位置从1开始)比较次数。查找不成功,输出:0 0 比较次数。
样例输入
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
样例输出
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 StaticSearchTable{//class里面的函数,声明完了就行了,不要把函数体写在里面了乱得要死。
public:
int *elem;
int length;
int real_length;
public:
StaticSearchTable(){
cin>>length;
real_length=2*length;
elem=new int[real_length];
for(int i=1;i<length+1;i++)
{
cin>>elem[i];
}
}
void PrintTable();
bool Insert(int pos,int data);
bool Delete_loc(int pos);
bool Delete_elem(int data);
int Search(int key);
void judge(bool j);
};
bool StaticSearchTable::Insert(int pos,int data){
//cin>>pos>>data;
if(pos<1||pos>length)
{
return false;
}
else
{
for(int i=length;i>=pos;i--)
{
elem[i+1]=elem[i];
}
elem[pos]=data;
length++;
return true;
}
}
bool StaticSearchTable::Delete_loc(int pos) {
if(pos<1||pos>length)
{
return false;
}
else
{
if(pos!=length)
{
for(int i=pos+1;i<=length;i++)
{
elem[i-1]=elem[i];
}
}
length--;
return true;
}
}
bool StaticSearchTable::Delete_elem(int data){
for(int i=1;i<length+1;i++)
{
if(elem[i]==data)
{
for(;i<length;i++)
{
elem[i]=elem[i+1];
}
length--;
return true;
}
}
return false;
}
int StaticSearchTable::Search(int key){
int times=0;
for(int i=1;i<length+1;i++)
{
if(elem[i]!=key)
{
times++;
}
else
{
return times;
}
}
return times;
}
void StaticSearchTable::PrintTable(){
cout<<length<<' ';
int i;
for(i=1;i<length;i++)
{
cout<<elem[i]<<' ';
}
cout<<elem[i]<<endl;
}
void StaticSearchTable::judge(bool j)
{
if(j==true)
{
PrintTable();
}
else
{
cout<<"Error"<<endl;
}
}
int main()
{
int t;
cin>>t;
while(t--)
{
int pos,data;
StaticSearchTable s;
cin>>pos>>data;
bool ins=s.Insert(pos,data);
s.judge(ins);
//cout<<"ok"<<endl;
cin>>pos;
bool dele_loc=s.Delete_loc(pos);
s.judge(dele_loc);
cin>>data;
bool dele_elem=s.Delete_elem(data);
s.judge(dele_elem);
cin>>data;
int r=s.Search(data);
if(r==s.length)
{
cout<<"0 0 "<<r+1<<endl;
}
else
{
cout<<"1 "<<r+1<<' '<<r+1<<endl;
}
}
}