利用c语言设计一个有序顺序表,实现以下操作: 1.将元素x插入表中并保持有序; 2.查找值为x的元素,若找到则将其删除; 3.输出表中所有元素。 要求:对上述每个操作各设计为一个子函数,并设计一个主函数调用各子函数,以验证所设计的有序顺序表的正确性。
时间: 2024-09-24 18:19:33 浏览: 38
在C语言中,我们可以使用结构体来表示有序顺序表,同时定义三个功能函数:`insert_sorted()`, `delete_element()`, 和 `print_list()` 来分别实现插入、删除和打印操作。这里是一个简单的实现:
```c
#include <stdio.h>
// 定义顺序表节点结构
typedef struct Node {
int data; // 数据域
struct Node* next; // 指针域,指向下一个节点
} Node;
// 初始化顺序表头指针
Node* head = NULL;
// 插入元素到有序顺序表中
void insert_sorted(int x) {
Node* newNode = (Node*)malloc(sizeof(Node)); // 分配内存
newNode->data = x;
newNode->next = NULL;
if (head == NULL || x <= head->data) { // 如果列表为空或者新元素小于等于当前元素
newNode->next = head;
head = newNode;
} else {
Node* current = head;
while (current->next != NULL && current->next->data < x) {
current = current->next;
}
newNode->next = current->next;
current->next = newNode;
}
}
// 查找并删除值为x的元素
void delete_element(int x) {
if (head == NULL) return; // 空表无需处理
if (head->data == x) {
Node* temp = head;
head = head->next;
free(temp);
return;
}
Node* current = head;
while (current->next != NULL && current->next->data != x) {
current = current->next;
}
if (current->next != NULL) {
current->next = current->next->next;
free(current->next); // 释放已删除节点的内存
}
}
// 打印顺序表的所有元素
void print_list() {
Node* current = head;
while (current != NULL) {
printf("%d ", current->data);
current = current->next;
}
printf("\n");
}
// 主函数测试
int main() {
// 测试插入、查找和删除操作
insert_sorted(5);
print_list(); // 输出: 5
insert_sorted(3);
print_list(); // 输出: 3 5
if (delete_element(3)) {
printf("Element deleted successfully.\n");
print_list(); // 输出: 5
} else {
printf("Element not found.\n");
}
return 0;
}
```
这个程序首先初始化了一个空的顺序表,然后通过`main()`函数展示了如何向有序表中插入元素,以及查找并删除指定元素,最后打印出整个表的内容。注意,实际运行过程中可能需要加入错误处理代码来检查内存分配和遍历情况。
阅读全文