#include <iostream>
using namespace std;
class SeqList {
public:
int *array;
int size;
int capacity;
SeqList(int size);
~SeqList();
void toInsert(int index, int element);
void toDelete(int index);
void replace(int index, int element);
int getSize();
int get(int index);
void display();
};
SeqList::SeqList(int size) {
capacity = 1000;
this->size = size;
array = new int[capacity];
for (int i = 0; i < size; ++i) {
cin>>array[i];
}
}
SeqList::~SeqList() {
delete []array;
}
void SeqList::toInsert(int index, int element) {
--index;
if (index > size || index < 0) {
cout<<"Insert Error."<<endl;
return;
}
if (size + 1 > capacity) {
cout<<"Out of capacity."<<endl;
return;
}
for (int i = size - 1; i >= index; --i) {
cout<<array[i]<<" ";
array[i + 1] = array[i];
}
array[index] = element;
++size;
}
void SeqList::toDelete(int index) {
--index;
if (index >= size || index < 0) {
cout<<"Delete Error."<<endl;
return;
}
for (int i = index; i < size; ++i) {
array[i + 1] = array[i];
}
--size;
}
void SeqList::replace(int index, int element) {
--index;
if (index >= size || index < 0) {
cout<<"Replace Error."<<endl;
return;
}
array[index] = element;
}
int SeqList::get(int index) {
--index;
if (index >= capacity || index < 0) {
cout<<"Obtain Error."<<endl;
return -1;
}
return array[index];
}
void SeqList::display() {
for (int i = 0; i < size; ++i) {
if (i < size - 1) {
cout<<array[i]<<" ";
} else {
cout<<array[i]<<endl;
}
}
}
int SeqList::getSize() {
return size;
}
int main() {
int size;
cin>>size;
SeqList list(size);
int orders;
cin>>orders;
while (orders--) {
string command;
cin>>command;
if (command == "Insert") {
int index, element;
cin>>index>>element;
list.toInsert(index, element);
}
else if (command == "Delete") {
int index;
cin>>index;
list.toDelete(index);
}
else if (command == "Get") {
int index;
cin>>index;
if (list.get(index) == -1) {
cout<<"Out of bound"<<endl;
} else {
cout<<list.get(index)<<endl;
}
}
else if (command == "Size") {
cout<<list.getSize()<<endl;
}
else if (command == "Replace") {
int index, element;
cin>>index>>element;
list.replace(index, element);
}
else {
list.display();
}
}
return 0;
}
说明:
1、由于本程序操作的数组对象是动态内存分配的,所以capacity不宜设置过大。
2、增删改查之前都要检查索引位置是否合法,注意插入与删除对于索引位置的合法性检测有细微的差别,插入是允许索引位置比实际size大1的,而删除不可以。
3、此代码写的时候很严格的考虑了各种情况,但是测试的时候没有经过严格的检查,如果存在Bug(get函数查找失败的返回值为-1,如果顺序表当前索引位置为-1的话,就会出现Bug,本人也不知道如何解决元素与返回值冲突的问题,希望有大佬不吝赐教),欢迎各位大佬指正,另外如果代码风格不好的话,也请各位大佬指正。