编写顺序表删除算法,删除第2题的顺序表中最大元素的值(若有多个,则删除第一个),输出删除的元素值,并输出删除后新的顺序表中所有元素。 c语言
时间: 2024-10-19 09:09:29 浏览: 21
在C语言中,编写顺序表(数组)删除最大元素并输出的函数可以按照以下步骤进行:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义顺序表结构体
typedef struct {
int data; // 元素值
int size; // 长度
int capacity; // 存储空间大小
} List;
// 初始化顺序表
List* create_list() {
List* list = (List*) malloc(sizeof(List));
list->data = -1; // 初始值设为负一,后续查找最大值时不会误判
list->size = 0;
list->capacity = 5; // 初始容量
return list;
}
// 删除并返回最大元素
int delete_max(List* list) {
if (list->size == 0) { // 空表直接返回
printf("列表为空,无法删除最大元素\n");
return -1;
}
int max_index = 0; // 最大值索引
for (int i = 1; i < list->size; i++) {
if (list->data[i] > list->data[max_index]) {
max_index = i;
}
}
// 删除最大元素
int removed_value = list->data[max_index];
for (int i = max_index; i < list->size - 1; i++) {
list->data[i] = list->data[i + 1];
}
list->size--;
free(list->data[max_index]); // 释放最大元素的空间
list->data[max_index] = -1; // 更新最大值位置为无效值
return removed_value;
}
// 打印顺序表
void print_list(List* list) {
if (list->size == 0) {
printf("列表为空\n");
} else {
printf("删除最大元素前:\n");
for (int i = 0; i < list->size; i++) {
printf("%d ", list->data[i]);
}
printf("\n");
printf("删除后的列表:\n");
}
for (int i = 0; i < list->size; i++) {
printf("%d ", list->data[i]);
}
printf("\n");
}
int main() {
List* list = create_list();
// 添加一些元素到列表...
int deleted_value = delete_max(list);
print_list(list);
// 清理内存
free(list);
return 0;
}
```
在这个示例中,我们首先创建了一个顺序表结构,然后定义了初始化、删除最大元素、打印列表等功能。在`main`函数中,你需要添加实际的数据并调用相应的方法。
阅读全文