通过结构体将数组封装为线性表,用c语言实现实现插入、删除、获取、修改、输出等操作。
时间: 2023-11-26 14:06:05 浏览: 111
好的,我来为您详细解答。
首先,我们需要定义一个结构体来表示线性表,例如:
```c
#define MAX_SIZE 100
typedef struct {
int data[MAX_SIZE]; // 存储线性表的数据
int length; // 当前线性表的长度
} List;
```
接着,我们就可以实现插入、删除、获取、修改、输出等操作了。
1. 插入操作
插入操作需要考虑两种情况:插入到线性表的开头和插入到线性表的中间。代码如下:
```c
int insert(List *list, int index, int value) {
if (list->length == MAX_SIZE) {
return -1; // 线性表已满,不能再插入元素
}
if (index < 0 || index > list->length) {
return -1; // 非法的索引值
}
for (int i = list->length - 1; i >= index; i--) {
list->data[i + 1] = list->data[i]; // 将要插入位置后的元素后移一位
}
list->data[index] = value; // 插入新元素
list->length++; // 线性表长度加1
return 0;
}
```
2. 删除操作
删除操作也需要考虑两种情况:删除线性表的开头元素和删除线性表的中间元素。代码如下:
```c
int delete(List *list, int index) {
if (index < 0 || index >= list->length) {
return -1; // 非法的索引值
}
for (int i = index; i < list->length - 1; i++) {
list->data[i] = list->data[i + 1]; // 将要删除位置后的元素前移一位
}
list->length--; // 线性表长度减1
return 0;
}
```
3. 获取操作
获取操作就是根据索引值获取线性表中的元素,代码如下:
```c
int get(List *list, int index) {
if (index < 0 || index >= list->length) {
return -1; // 非法的索引值
}
return list->data[index];
}
```
4. 修改操作
修改操作就是根据索引值修改线性表中的元素,代码如下:
```c
int update(List *list, int index, int value) {
if (index < 0 || index >= list->length) {
return -1; // 非法的索引值
}
list->data[index] = value;
return 0;
}
```
5. 输出操作
输出操作就是遍历线性表中的元素并输出,代码如下:
```c
void print(List *list) {
for (int i = 0; i < list->length; i++) {
printf("%d ", list->data[i]);
}
printf("\n");
}
```
完整代码如下:
```c
#include <stdio.h>
#define MAX_SIZE 100
typedef struct {
int data[MAX_SIZE]; // 存储线性表的数据
int length; // 当前线性表的长度
} List;
int insert(List *list, int index, int value) {
if (list->length == MAX_SIZE) {
return -1; // 线性表已满,不能再插入元素
}
if (index < 0 || index > list->length) {
return -1; // 非法的索引值
}
for (int i = list->length - 1; i >= index; i--) {
list->data[i + 1] = list->data[i]; // 将要插入位置后的元素后移一位
}
list->data[index] = value; // 插入新元素
list->length++; // 线性表长度加1
return 0;
}
int delete(List *list, int index) {
if (index < 0 || index >= list->length) {
return -1; // 非法的索引值
}
for (int i = index; i < list->length - 1; i++) {
list->data[i] = list->data[i + 1]; // 将要删除位置后的元素前移一位
}
list->length--; // 线性表长度减1
return 0;
}
int get(List *list, int index) {
if (index < 0 || index >= list->length) {
return -1; // 非法的索引值
}
return list->data[index];
}
int update(List *list, int index, int value) {
if (index < 0 || index >= list->length) {
return -1; // 非法的索引值
}
list->data[index] = value;
return 0;
}
void print(List *list) {
for (int i = 0; i < list->length; i++) {
printf("%d ", list->data[i]);
}
printf("\n");
}
int main() {
List list = {{1, 2, 3, 4, 5}, 5};
print(&list); // 输出:1 2 3 4 5
insert(&list, 2, 6);
print(&list); // 输出:1 2 6 3 4 5
delete(&list, 4);
print(&list); // 输出:1 2 6 3 5
printf("%d\n", get(&list, 2)); // 输出:6
update(&list, 3, 7);
print(&list); // 输出:1 2 6 7 5
return 0;
}
```
希望对您有所帮助。
阅读全文