当前位置:实例文章 » JAVA Web实例» [文章]数据结构与算法——顺序表的基本操作(C语言详解版)

数据结构与算法——顺序表的基本操作(C语言详解版)

发布人:shili8 发布时间:2025-01-03 17:21 阅读次数:0

**数据结构与算法——顺序表的基本操作**

在计算机科学中,数据结构是指组织和存储数据的方式,而算法则是指解决问题的步骤。顺序表是一种常见的线性数据结构,它以一组连续的内存单元来存储元素。在本文中,我们将详细介绍顺序表的基本操作,包括创建、插入、删除和查找等功能。

###1. 创建顺序表创建一个顺序表涉及分配足够的内存空间来存储元素。我们可以使用动态内存分配函数 `malloc` 来实现这一点。

c// 创建一个空顺序表typedef struct {
 int *data;
 int size;
} SeqList;

SeqList* create_seq_list(int capacity) {
 // 分配足够的内存空间 SeqList* list = (SeqList*)malloc(sizeof(SeqList));
 if (!list) return NULL; // 内存分配失败 list->data = (int*)malloc(capacity * sizeof(int));
 if (!list->data) {
 free(list);
 return NULL; // 内存分配失败 }

 list->size =0;
 return list;
}

###2. 插入元素插入元素到顺序表中涉及在指定位置添加新元素,并调整后续元素的索引。
c// 在指定位置插入一个元素void insert_at(SeqList* list, int index, int value) {
 if (index < 0 || index > list->size) return; // 无效的索引 // 扩容内存空间 int new_capacity = list->size +1;
 int* new_data = (int*)realloc(list->data, new_capacity * sizeof(int));
 if (!new_data) {
 free(list->data);
 return; // 内存分配失败 }

 list->data = new_data;

 // 移动后续元素的索引 for (int i = list->size; i > index; --i) {
 list->data[i] = list->data[i -1];
 }

 list->data[index] = value;
 list->size +=1;
}

###3. 删除元素删除元素涉及从顺序表中移除指定位置的元素,并调整前后的元素索引。
c// 删除指定位置的元素void delete_at(SeqList* list, int index) {
 if (index < 0 || index >= list->size) return; // 无效的索引 // 移动后续元素的索引 for (int i = index +1; i <= list->size -1; ++i) {
 list->data[i -1] = list->data[i];
 }

 // 缩容内存空间 int new_capacity = list->size -1;
 int* new_data = (int*)realloc(list->data, new_capacity * sizeof(int));
 if (!new_data) {
 free(list->data);
 return; // 内存分配失败 }

 list->data = new_data;
 list->size -=1;
}

###4. 查找元素查找元素涉及在顺序表中找到指定的值,并返回其索引。
c// 在顺序表中查找一个元素int find(SeqList* list, int value) {
 for (int i =0; i < list->size; ++i) {
 if (list->data[i] == value) return i;
 }
 return -1; // 未找到}

###5. 示例代码
c#include <stdio.h>
#include <stdlib.h>

// 创建一个空顺序表SeqList* create_seq_list(int capacity) {
 // 分配足够的内存空间 SeqList* list = (SeqList*)malloc(sizeof(SeqList));
 if (!list) return NULL; // 内存分配失败 list->data = (int*)malloc(capacity * sizeof(int));
 if (!list->data) {
 free(list);
 return NULL; // 内存分配失败 }

 list->size =0;
 return list;
}

// 在指定位置插入一个元素void insert_at(SeqList* list, int index, int value) {
 if (index < 0 || index > list->size) return; // 无效的索引 // 扩容内存空间 int new_capacity = list->size +1;
 int* new_data = (int*)realloc(list->data, new_capacity * sizeof(int));
 if (!new_data) {
 free(list->data);
 return; // 内存分配失败 }

 list->data = new_data;

 // 移动后续元素的索引 for (int i = list->size; i > index; --i) {
 list->data[i] = list->data[i -1];
 }

 list->data[index] = value;
 list->size +=1;
}

// 删除指定位置的元素void delete_at(SeqList* list, int index) {
 if (index < 0 || index >= list->size) return; // 无效的索引 // 移动后续元素的索引 for (int i = index +1; i <= list->size -1; ++i) {
 list->data[i -1] = list->data[i];
 }

 // 缩容内存空间 int new_capacity = list->size -1;
 int* new_data = (int*)realloc(list->data, new_capacity * sizeof(int));
 if (!new_data) {
 free(list->data);
 return; // 内存分配失败 }

 list->data = new_data;
 list->size -=1;
}

// 在顺序表中查找一个元素int find(SeqList* list, int value) {
 for (int i =0; i < list->size; ++i) {
 if (list->data[i] == value) return i;
 }
 return -1; // 未找到}

int main() {
 SeqList* list = create_seq_list(10);
 insert_at(list,0,5);
 insert_at(list,2,3);
 delete_at(list,1);
 printf("%d
", find(list,5)); // 输出:0 return0;
}

本文介绍了顺序表的基本操作,包括创建、插入、删除和查找等功能。示例代码展示了如何使用这些函数来管理一个顺序表。

其他信息

其他资源

Top