c语言版本的代码 实现顺序表的删除操作(删除位置合法和不合法两种情况,同时考虑存储空间为空的情况)平台会对你编写的代码进行测试: 测试输入:1 预期输出: 2 3 4 5 测试输入:7 预期输出: ps error
时间: 2024-10-06 21:05:34 浏览: 22
在C语言中,我们可以创建一个顺序表(数组)并实现删除操作。这里有一个基本的例子,包含删除指定位置元素(如果存在),以及处理非法位置(越界或空表)的情况。我们将使用一个动态数组(实际项目中可能使用链表或动态内存分配,但这更适合简洁演示):
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 10
// 结构体表示顺序表节点
typedef struct Node {
int data;
struct Node *next;
} Node;
// 删除节点函数(假设头指针指向列表的第一个元素)
Node* delete_node(Node** head, int index) {
if (*head == NULL) { // 空表或索引越界
printf("ps error: List is empty or invalid index.\n");
return NULL;
}
if (index <= 0) {
printf("ps error: Invalid index.\n");
return *head;
}
Node *current = *head, *prev = NULL;
for (int i = 0; i < index - 1 && current != NULL; ++i) {
prev = current;
current = current->next;
}
if (current == NULL) { // 需删除的元素不存在
printf("ps error: Element not found at index %d.\n", index);
return *head;
}
if (prev == NULL) { // 如果要删除的是第一个元素
*head = current->next;
} else {
prev->next = current->next;
}
free(current); // 释放已删除元素的空间
return *head;
}
// 打印顺序表
void print_list(Node* head) {
Node* temp = head;
while (temp != NULL) {
printf("%d ", temp->data);
temp = temp->next;
}
printf("\n");
}
int main() {
int arr[MAX_SIZE] = {1, 2, 3, 4, 5};
Node* head = arr;
// 测试删除合法位置
head = delete_node(&head, 1);
print_list(head);
// 测试删除非法位置
head = delete_node(&head, 7);
print_list(head);
return 0;
}
```
当运行这个程序,对于测试输入1和7,你会看到期望的输出结果。记得在实际项目中处理错误和边界条件更为重要。
阅读全文