#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;
}

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐