C++数据结构(1)顺序表模板
·
#define eleType int
struct SequentialList {
eleType *elements;//顺序表地址
int size;//实际大小
int capacity;//代表实际容量
};
//顺序表的初始化
void initializeList(SequentialList* list, int capacity) {
list->elements = new eleType[capacity];//分配capacity大小的空间
list->size = 0;//初始化为0表示size为空
list->capacity = capacity;
}
//顺序表的销毁
void destroyList(SequentialList* list) {
delete[] list->elements;
}
int size(SequentialList* list) {
return list->size;
}
bool isEmpty(SequentialList* list) {
return list->size == 0;
}
//插入操作
void insert(SequentialList* list, int index, eleType element) {
//判断是否合法
if (index<0 || index>list->size) {
throw std::invalid_argument("Invalid index");
}
//判断是否装满
if (list->size == list->capacity) {
int newCapacity = list->capacity * 2;//扩大容器大小
eleType* newElements = new eleType[newCapacity];//给顺序表分配新的更大空间
for (int i = 0; i < list->size; i++) {//从原内存空间拷贝
newElements[i] = list->elements[i];
}
delete[] list->elements;//删除原有空间
list->elements = newElements;//将指针指向新的顺序表
list->capacity = newCapacity;//更新现有容器大小
}
//进行插入操作
for (int i = list->size; i > index; i--) {
list->elements[i] = list->elements[i - 1];//用前一个位置来覆盖当前位置,实现index后的所有元素后移
}
list->elements[index] = element;
list->size++;
}
//删除操作
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--;
}
//查找
int findElement(SequentialList* list, eleType element) {
for (int i = 0; i < list->size; i++) {
if (list->elements[i] == element) {
return i;
}
}
return -1;
}
//查找索引
eleType getElement(SequentialList* list, int index) {
//判断是否合法
if (index < 0 || index >= list->size) {
throw std::invalid_argument("Invalid index");
}
return list->elements[index];
}
//元素修改
void updateElement(SequentialList* list, int index, eleType value) {
//判断是否合法
if (index < 0 || index >= list->size) {
throw std::invalid_argument("Invalid index");
}
list->elements[index] = value;//修改
}
测试:
//测试
int main() {
SequentialList myList;//创建
initializeList(&myList, 10);
for (int i = 0; i < 10; i++) {
insert(&myList, i, i * 10);
}
cout << "Size:" << size(&myList) << endl;
cout << "Is empty:" << isEmpty(&myList) << endl;
for (int i = 0; i < size(&myList); i++) {
cout << getElement(&myList, i) << " ";
}
updateElement(&myList, 1, 520);
cout << endl;
for (int i = 0; i < size(&myList); i++) {
cout << getElement(&myList, i) << " ";
}
return 0;
}

更多推荐
所有评论(0)