//Sequential list version 3.0
#include <iostream>
using namespace std;
#define eleType int
//1.define a structure
struct SequentialList {
eleType* elements;
int capacity;
int size;
};
//2.initialize
void initializeList(SequentialList* list, int capacity) {
list->elements = new eleType[capacity];
list->capacity = capacity;
list->size = 0;
}
//3.destroy
void destroyList(SequentialList* list) {
delete[] list->elements;
list->elements = nullptr;
list->size = 0;
list->capacity = 0;
}
//4.size and is it empty
int sizeOfList(SequentialList* list) {
return list->size;
}
bool isEmpty(SequentialList* list) {
return list->size == 0;
}
//5.insert
void insertElement(SequentialList* list, int index,eleType element) {
if (index<0 || index>list->size) {
throw std::invalid_argument(“invalid index”);
}
if (list->capacity == list->size) {
int newcapacity =(list->capacity==0) ? 4 : list->capacity * 2;
eleType* newlist = new eleType[newcapacity];
for (int i = 0; i < list->size; i++) {
newlist[i] = list->elements[i];
}
delete[] list->elements;
list->elements = newlist;
list->capacity = newcapacity;
}
for (int i = list->size; i > index; i–) {
list->elements[i] = list->elements[i – 1];
}
list->elements[index] = element;
list->size++;
}
//6.delete
void deleteElement(SequentialList* list, int index) {
if (index < 0 || index >= list->size) {
throw std::invalid_argument(“invalid index”);
}
for (int i = index; i < list->size – 1; i++) {
list->elements[i] = list->elements[i + 1];
}
list->size–;
}
//7.findindex
int findIndex(SequentialList* list, eleType element) {
for(int i=0;i<list->size;i++){
if (list->elements[i] == element) {
return i;
}
}
return -1;
}
//8.get
eleType getElement(SequentialList* list, int index) {
if (index < 0 || index >= list->size) {
throw std::invalid_argument(“invalid index”);
}
return list->elements[index];
}
//9.update
void updateElement(SequentialList* list, int index, eleType element) {
if (index < 0 || index >= list->size) {
throw std::invalid_argument(“invalid index”);
}
list->elements[index] = element;
}
int main() {
SequentialList mylist;
int capa=10;
initializeList(&mylist, capa);
cout << “isEmpty:” << isEmpty(&mylist)<<endl;
cout << “size:” << sizeOfList(&mylist) << endl;
for (int i = 0; i < capa; i++) {
insertElement(&mylist, i, i * 10);
}
cout << “isEmpty:” << isEmpty(&mylist) << endl;
cout << “size:” << sizeOfList(&mylist) << endl;
for (int i = 0; i < sizeOfList(&mylist); i++) {
cout << getElement(&mylist, i) << ‘ ‘;
}cout << endl;
insertElement(&mylist,3, 5050);
for (int i = 0; i < sizeOfList(&mylist); i++) {
cout << getElement(&mylist, i) << ‘ ‘;
}cout << endl;
cout << “isEmpty:” << isEmpty(&mylist) << endl;
cout << “size:” << sizeOfList(&mylist) << endl;
int id = findIndex(&mylist, 50);
if (id != -1) {
cout << “Found:” << getElement(&mylist, id) << endl;
deleteElement(&mylist, id);
}
else {
cout << “Not found!” << endl;
}
for (int i = 0; i < sizeOfList(&mylist); i++) {
cout << getElement(&mylist, i) << ‘ ‘;
}cout << endl;
cout << “isEmpty:” << isEmpty(&mylist) << endl;
cout << “size:” << sizeOfList(&mylist) << endl;
updateElement(&mylist, 5, 9090);
for (int i = 0; i < sizeOfList(&mylist); i++) {
cout << getElement(&mylist, i) << ‘ ‘;
}cout << endl;
cout << “isEmpty:” << isEmpty(&mylist) << endl;
cout << “size:” << sizeOfList(&mylist) << endl;
destroyList(&mylist);
for (int i = 0; i < sizeOfList(&mylist); i++) {
cout << getElement(&mylist, i) << ‘ ‘;
}cout << endl;
cout << “isEmpty:” << isEmpty(&mylist) << endl;
cout << “size:” << sizeOfList(&mylist) << endl;
return 0;
}