typedef struct {
int* elements;
size_t size;
size_t capacity;
} SequentialList;
//初始化顺序表
void SequentialListInit(SequentialList* list, int capactiy) {
list->elements = (int*)malloc(sizeof(int) * capactiy);
list->size = 0;
list->capacity = capactiy;
}
//销毁顺序表
void SequentialListDestroy(SequentialList* list) {
if (list->elements) {
free(list->elements);
list->capacity = 0;
}
}
//获取顺序表的大小
size_t SequentialListSize(const SequentialList* list) {
return list->size;
}
//1.插入操作
void SequentialListInsert(SequentialList* list, int index, int element) {
//判断索引是否合法
if (index < 0 || index > list->size) {
printf("Invalid index\n");
return;
}
//判断顺序表容量
if (list->size == list->capacity) {
//进行扩容
int* newElements = (int*)realloc(list->elements, sizeof(int) * list->capacity * 2);
if (newElements) { //如果扩容失败,返回
printf("Failed to allocate memory\n");
return;
}
//把新地址赋值给elements
list->elements = newElements;
list->capacity *= 2;
}
//移动元素
for (size_t i = list->size; i > index; --i) {
list->elements[i] = list->elements[i - 1];
}
//插入元素
list->elements[index] = element;
//更新顺序表大小
list->size++;
//更新顺序表容量
list->capacity--;
}
//2.删除元素操作
void SequentialListDelete(SequentialList* list, int index) {
//判断索引是否合法
if (index < 0 || index > list->capacity) {
printf("Invalid index\n");
return;
}
//移动元素,把索引后的元素往前挪
for (size_t i = index; i < list->size; ++i) {
list->elements[i] = list->elements[i + 1];
}
//更新顺序表大小
list->size--;
//更新顺序表容量
list->capacity++;
}
//元素的查找操作
size_t SequentialListFind(SequentialList* list, int element) {
//遍历顺序表进行查找
for (size_t i = 0; i < list->size; i++) {
if (list->elements[i] == element) {
return i;
}
}
return -1;
}
//顺序表的索引
size_t SequentialListIndex(SequentialList* list, int index) {
//判断索引是否合法
if (index < 0 || index > list->size) {
printf("Invalid index\n");
return 0;
}
//找到索引对应值返回
return list->elements[index];
}
//修改元素操作
void SequentialListSet(SequentialList* list, int index, int element) {
//判断给定索引是否合法
if (index < 0 || index > list->size) {
printf("Invalid index\n");
return;
}
//找到索引对应位置赋值
list->elements[index] = element;
}
#include
#include
typedef struct {
int* elements;
size_t size;
size_t capacity;
} SequentialList;
//初始化顺序表
void SequentialListInit(SequentialList* list, int capactiy) {
list->elements = (int*)malloc(sizeof(int) * capactiy);
list->size = 0;
list->capacity = capactiy;
}
//销毁顺序表
void SequentialListDestroy(SequentialList* list) {
if (list->elements) {
free(list->elements);
list->capacity = 0;
}
}
//获取顺序表的大小
size_t SequentialListSize(const SequentialList* list) {
return list->size;
}
//1.插入操作
void SequentialListInsert(SequentialList* list, int index, int element) {
//判断索引是否合法
if (index < 0 || index > list->size) {
printf("Invalid index\n");
return;
}
//判断顺序表容量
if (list->size == list->capacity) {
//进行扩容
int* newElements = (int*)realloc(list->elements, sizeof(int) * list->capacity * 2);
if (newElements) { //如果扩容失败,返回
printf("Failed to allocate memory\n");
return;
}
//把新地址赋值给elements
list->elements = newElements;
list->capacity *= 2;
}
//移动元素
for (size_t i = list->size; i > index; --i) {
list->elements[i] = list->elements[i - 1];
}
//插入元素
list->elements[index] = element;
//更新顺序表大小
list->size++;
//更新顺序表容量
list->capacity--;
}
//2.删除元素操作
void SequentialListDelete(SequentialList* list, int index) {
//判断索引是否合法
if (index < 0 || index > list->capacity) {
printf("Invalid index\n");
return;
}
//移动元素,把索引后的元素往前挪
for (size_t i = index; i < list->size; ++i) {
list->elements[i] = list->elements[i + 1];
}
//更新顺序表大小
list->size--;
//更新顺序表容量
list->capacity++;
}
//元素的查找操作
size_t SequentialListFind(SequentialList* list, int element) {
//遍历顺序表进行查找
for (size_t i = 0; i < list->size; i++) {
if (list->elements[i] == element) {
return i;
}
}
return -1;
}
//顺序表的索引
size_t SequentialListIndex(SequentialList* list, int index) {
//判断索引是否合法
if (index < 0 || index > list->size) {
printf("Invalid index\n");
return 0;
}
//找到索引对应值返回
return list->elements[index];
}
//修改元素操作
void SequentialListSet(SequentialList* list, int index, int element) {
//判断给定索引是否合法
if (index < 0 || index > list->size) {
printf("Invalid index\n");
return;
}
//找到索引对应位置赋值
list->elements[index] = element;
}
int main() {
//定义顺序表对象
SequentialList list;
//初始化顺序表
SequentialListInit(&list,1);
//把0-90插入到顺序表中
for (int i = 0; i < 10; i++) {
SequentialListInsert(&list, i, i*10);
}
//打印顺序表大小
printf("Szie:%d\n", SequentialListSize(&list));
//获取索引为2的元素
int element = SequentialListIndex(&list, 2);
printf("Index 2: %d\n", element);
//查找15这个元素
int index = SequentialListFind(&list, 15);
printf("Index of 15: %d\n", index);
//把索引为3的元素变成60
SequentialListSet(&list, 3, 60);
//遍历整个顺序表打印所有的元素
for (int i = 0; i < list.size; i++) {
printf("%d ", list.elements[i]);
}
//销毁顺序表
SequentialListDestroy(&list);
return 0;
}