编写一个c语言代码设计一个有序顺序表,实现以下操作: 1.将元素x插入表中并保持有序; 2.查找值为x的元素,若找到则将其删除; 3.输出表中所有元素。 •要求:对上述每个操作各设计为一个子函数,并设计一个主函数调用各子函数,以验证所设计的有序顺序表的正确性。
时间: 2024-09-24 22:30:49 浏览: 47
实现两个链表的合并(数据结构课程设计c语言版).doc
在C语言中,我们可以使用结构体和指针来设计一个简单的有序顺序表。这里是一个简单的实现,包含了你提到的三个功能:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义一个结构体表示有序顺序表节点
typedef struct Node {
int data;
struct Node* next;
} Node;
// 初始化一个空的顺序表
Node* createList() {
return NULL;
}
// 插入元素x并保持有序
void insertSorted(Node** head, int x) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = x;
newNode->next = *head;
if (*head == NULL || newNode->data <= (*head)->data) {
*head = newNode;
return;
}
Node* current = *head;
while (current->next != NULL && current->next->data < newNode->data) {
current = current->next;
}
newNode->next = current->next;
current->next = newNode;
}
// 查找值为x的元素并删除
void deleteElement(Node** head, 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 printList(Node* head) {
if (head == NULL) {
printf("The list is empty.\n");
} else {
printf("Elements in the list: ");
while (head != NULL) {
printf("%d ", head->data);
head = head->next;
}
printf("\n");
}
}
// 主函数测试
int main() {
Node* head = createList();
// 测试插入、查找和删除
insertSorted(&head, 5); // 插入5
insertSorted(&head, 2); // 插入2
insertSorted(&head, 8); // 插入8
printList(head); // 输出当前列表
deleteElement(&head, 2); // 删除2
printList(head); // 再次输出修改后的列表
return 0;
}
```
阅读全文