C语言实现从顺序表中删除具有最小值的元素(假设唯一),并由函数返回被删除元素的值。空出的位置由最后一个元素填补。主要功能函数算法参考如下
时间: 2024-09-17 17:06:19 浏览: 73
c语言链表的基本操作之合并两个有序链表.zip
在C语言中,你可以通过创建一个结构体表示顺序表,并实现一个函数来找到并删除具有最小值的元素。这里是一个简单的示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义顺序表的结构体
typedef struct {
int value;
struct Node* next; // 指向下一个元素的指针
} Node;
// 动态分配一个新的节点
Node* createNode(int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (newNode != NULL) {
newNode->value = value;
newNode->next = NULL;
}
return newNode;
}
// 找到最小值并删除之,返回该值
int deleteMin(Node** head) {
if (*head == NULL) {
printf("List is empty.\n");
return -1; // 或者抛异常,如果需要处理这种情况
}
Node* minNode = *head;
Node* current = *head;
while (current != NULL && current->next != NULL) {
if (current->next->value < minNode->value) {
minNode = current->next;
}
current = current->next;
}
if (current->value == minNode->value) { // 如果当前元素是最小值
// 删除节点
*head = minNode->next; // 更新头节点指向下一个元素
free(minNode); // 释放内存
return minNode->value; // 返回删除的值
} else {
printf("No minimum element found in the list.\n");
return -1; // 同上
}
}
// 添加元素到顺序表
void insertElement(Node** head, int value) {
Node* newNode = createNode(value);
if (*head == NULL) {
*head = newNode;
} else {
Node* temp = *head;
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = newNode;
}
}
// 示例使用
int main() {
Node* head = NULL;
// 初始化列表
insertElement(&head, 5);
insertElement(&head, 3);
insertElement(&head, 9);
// 删除最小值并打印结果
int deletedValue = deleteMin(&head);
if (deletedValue != -1) {
printf("Deleted value: %d\n", deletedValue);
}
// 打印更新后的列表
Node* temp = head;
while (temp != NULL) {
printf("%d ", temp->value);
temp = temp->next;
}
printf("\n");
return 0;
}
```
这个程序首先定义了一个顺序表(链式结构),然后实现了`deleteMin`函数来查找并删除最小值,`createNode`用于动态创建新节点,以及插入元素的`insertElement`函数。在`main`函数中,我们演示了如何使用这些函数。
阅读全文