当前位置:实例文章 » 其他实例» [文章]数据结构【数组、串、广义表】

数据结构【数组、串、广义表】

发布人:shili8 发布时间:2025-02-22 13:14 阅读次数:0

**数据结构**

在计算机科学中,数据结构是指组织和存储数据的方式。它定义了如何将数据表示为一个或多个值的集合,并规定了这些值之间的关系和操作。数据结构是程序设计中的基本概念,它直接影响到程序的性能、效率和可维护性。

在本文中,我们将讨论三种常见的数据结构:数组、串和广义表。

**1. 数组**

数组是一种线性的数据结构,元素按一定顺序排列。每个元素都有一个唯一的索引或下标,可以通过该下标来访问和操作元素。

### 数组的定义

ctypedef struct {
 int *data;
 int size;
} Array;


### 数组的操作* **初始化**:创建一个空数组,设置其大小。
* **插入**:在指定位置插入一个新元素。
* **删除**:从指定位置删除一个元素。
* **查找**:通过下标找到对应的元素。

c// 初始化void initArray(Array *arr, int size) {
 arr->data = (int *)malloc(size * sizeof(int));
 arr->size = size;
}

// 插入void insertElement(Array *arr, int index, int value) {
 if (index < 0 || index >= arr->size) {
 printf("Index out of bounds!
");
 return;
 }
 for (int i = arr->size -1; i >= index; i--) {
 arr->data[i +1] = arr->data[i];
 }
 arr->data[index] = value;
}

// 删除void deleteElement(Array *arr, int index) {
 if (index < 0 || index >= arr->size) {
 printf("Index out of bounds!
");
 return;
 }
 for (int i = index; i < arr->size -1; i++) {
 arr->data[i] = arr->data[i +1];
 }
 arr->size--;
}

// 查找int findElement(Array *arr, int value) {
 for (int i =0; i < arr->size; i++) {
 if (arr->data[i] == value) {
 return i;
 }
 }
 return -1;
}


**2.串**

串是一种线性的数据结构,元素按一定顺序排列。每个元素都有一个唯一的索引或下标,可以通过该下标来访问和操作元素。

###串的定义
ctypedef struct {
 char *data;
 int size;
} String;


###串的操作* **初始化**:创建一个空串,设置其大小。
* **插入**:在指定位置插入一个新元素。
* **删除**:从指定位置删除一个元素。
* **查找**:通过下标找到对应的元素。

c// 初始化void initString(String *str, int size) {
 str->data = (char *)malloc(size * sizeof(char));
 str->size = size;
}

// 插入void insertChar(String *str, int index, char value) {
 if (index < 0 || index >= str->size) {
 printf("Index out of bounds!
");
 return;
 }
 for (int i = str->size -1; i >= index; i--) {
 str->data[i +1] = str->data[i];
 }
 str->data[index] = value;
}

// 删除void deleteChar(String *str, int index) {
 if (index < 0 || index >= str->size) {
 printf("Index out of bounds!
");
 return;
 }
 for (int i = index; i < str->size -1; i++) {
 str->data[i] = str->data[i +1];
 }
 str->size--;
}

// 查找int findChar(String *str, char value) {
 for (int i =0; i < str->size; i++) {
 if (str->data[i] == value) {
 return i;
 }
 }
 return -1;
}


**3. 广义表**

广义表是一种非线性的数据结构,元素可以是任何类型的值,包括其他广义表。

### 广义表的定义
ctypedef struct {
 int *data;
 int size;
} GeneralizedList;


### 广义表的操作* **初始化**:创建一个空广义表,设置其大小。
* **插入**:在指定位置插入一个新元素。
* **删除**:从指定位置删除一个元素。
* **查找**:通过下标找到对应的元素。

c// 初始化void initGeneralizedList(GeneralizedList *list, int size) {
 list->data = (int *)malloc(size * sizeof(int));
 list->size = size;
}

// 插入void insertElement(GeneralizedList *list, int index, int value) {
 if (index < 0 || index >= list->size) {
 printf("Index out of bounds!
");
 return;
 }
 for (int i = list->size -1; i >= index; i--) {
 list->data[i +1] = list->data[i];
 }
 list->data[index] = value;
}

// 删除void deleteElement(GeneralizedList *list, int index) {
 if (index < 0 || index >= list->size) {
 printf("Index out of bounds!
");
 return;
 }
 for (int i = index; i < list->size -1; i++) {
 list->data[i] = list->data[i +1];
 }
 list->size--;
}

// 查找int findElement(GeneralizedList *list, int value) {
 for (int i =0; i < list->size; i++) {
 if (list->data[i] == value) {
 return i;
 }
 }
 return -1;
}


在本文中,我们讨论了三种常见的数据结构:数组、串和广义表。每种数据结构都有其特点和操作方法。通过理解这些基本概念,可以更好地设计和实现程序,提高性能和效率。

相关标签:算法数据结构
其他信息

其他资源

Top