题目: 设计一个有序顺序表,实现以下操作: 将元素x插入表中并保持有序; 查找值为x的元素,若找到则将其删除; 输出表中所有元素。 要求: 对上述每个操作各设计为一个子函数,并设计一个主函数调用各子函数,以验证所设计的有序顺序表的正确性。利用c语言
时间: 2024-09-26 15:06:44 浏览: 36
在 C 语言中,我们可以创建一个简单的有序顺序表(通常是基于数组实现),并且包含三个主要操作:插入、查找和输出。这里是一个简单的实现:
```c
#include <stdio.h>
// 定义节点结构体
typedef struct Node {
int data;
struct Node* next;
} Node;
// 初始化空链表
Node* createEmptyList() {
return (Node*)malloc(sizeof(Node));
}
// 插入元素
void insert(int x, Node** head) {
Node* newNode = createEmptyList();
if (*head == NULL || (*head)->data > x) { // 如果表为空或新元素小于当前最小值
newNode->data = x;
newNode->next = *head;
*head = newNode;
} else {
Node* current = *head;
while (current->next != NULL && current->next->data < x) {
current = current->next;
}
newNode->data = x;
newNode->next = current->next;
current->next = newNode;
}
}
// 查找并删除元素
int findAndDelete(int x, Node** head) {
if (*head == NULL) {
return -1; // 表为空,找不到
}
Node* current = *head;
while (current != NULL) {
if (current->data == x) {
int removedValue = current->data;
*head = current->next;
free(current);
return removedValue; // 返回删除的元素
}
current = current->next;
}
return -1; // 没找到元素
}
// 输出链表元素
void printList(Node* head) {
Node* temp = head;
while (temp != NULL) {
printf("%d ", temp->data);
temp = temp->next;
}
printf("\n");
}
// 主函数测试
int main() {
Node* listHead = createEmptyList();
// 插入元素
insert(5, &listHead);
insert(2, &listHead);
insert(8, &listHead);
// 输出
printf("Original list: ");
printList(listHead);
// 删除元素并输出
int deletedValue = findAndDelete(5, &listHead);
if (deletedValue != -1) {
printf("Deleted value: %d\n", deletedValue);
}
printList(listHead);
return 0;
}
```
这个程序实现了题目要求的有序顺序表,并包含了插入、查找和输出功能。`main` 函数首先创建了一个空列表,然后插入一些元素,接着查找并删除指定元素,最后打印出结果以验证其正确性。
阅读全文