题目描述
给出顺序表的初始数据,实现顺序表的定义、创建、插入与查找操作
--算法说明--
顺序表:一维数据数组、最大长度、实际长度
插入操作:将位置i和后面的数据全部后移一位,在指定位置i插入一个数据,实际长度加1
--程序要求--
若使用C++只能include一个头文件iostream;若使用C语言只能include一个头文件stdio
程序中若include多过一个头文件,不看代码,作0分处理
不允许使用第三方对象或函数实现本题的要求
输入
第一行输入t表示有t个测试实例
每个测试实例包含3行输入:
第1行:数字n表示数据的数目,后跟n个数据,所有数据之间用单个空格隔开
第2行:插入新数据位置(从0开始)、新数据
第3行:要查找的数据
输出
每个测试实例输出两行
第1行输出插入数据后的结果,数据之间用单个空格隔开,最后一个数据后面无空格
第2行输出要查找的数据的位置(从0开始),若数据不存在,则输出ERROR
输入样例
3
5 11 22 33 44 55
1 77
22
4 99 88 77 66
4 55
33
6 1 2 3 4 5 6
0 9
5输出样例
11 77 22 33 44 55
2
99 88 77 66 55
ERROR
9 1 2 3 4 5 6
5
代码如下
#include <iostream>
using namespace std;
class Table{
public:
int length; //顺序表长度
int *elem; //顺序表数组
int listsize; //顺序表所开的数组的实际长度
public:
Table(){
cin>>length;
listsize=100;
elem = new int[listsize];
for(int i = 1; i< length+1; i++)
cin>>elem[i];
}
~Table(){};
void PrintTable(){
//cout<<length<<' ';
for(int i = 1; i< length; i++)
cout<<elem[i]<<' ';
cout<<elem[length]<<endl;
}
bool Insert(int loc,int temp_elem){
if(loc <= 0 || loc>length+1)
return false;
length++;
if(length>listsize){
listsize=2*listsize;
int *new_elme = new int [listsize];
for(int i = 0; i < length+1; i++)
new_elme[i] = elem[i];
delete[] elem;
elem = new_elme;
}
for(int i = length; i > loc; i--)
elem[i]=elem[i-1];
elem[loc]=temp_elem;
return true;
}
int Search(int key){
int i;
if(length==0)
cout<<"ERROR"<<endl;
elem[0]=key;
for(i = length; i >= 0; i--)
if(elem[i] == elem[0])
break;
if(i==0)
cout<<"ERROR"<<endl;
else
cout<<i-1<<endl;
}
};
int main()
{
int t;
cin>>t;
while(t--){
Table test;
int loc,data,key;
cin>>loc>>data;
if(test.Insert(loc+1,data))
test.PrintTable();
else
cout<<"ERROR"<<endl;
cin>>key;
test.Search(key);
}
return 0;
}
写这篇是为了给我舍友一个大逼兜,借鉴的同学记得改一下变量名什么的