编写一个程序,有以下功能。建立顺序表在顺序表中实现插入,删除和查找操作,建立一个有序顺序表并删除其中重复的元素用C语言编程
时间: 2024-09-29 09:08:18 浏览: 39
在C语言中,你可以通过结构体和函数来实现一个简单的顺序表(数组实现),包括插入、删除和查找操作。这里是一个基础的示例,我们将创建一个`ListNode`结构来表示节点,并提供三个功能的实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构
typedef struct ListNode {
int data;
struct ListNode* next;
} ListNode;
// 插入操作
void insert(ListNode** head, int value) {
ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));
if (!newNode) {
printf("Memory allocation failed.\n");
return;
}
newNode->data = value;
newNode->next = *head;
*head = newNode;
}
// 删除操作
void deleteNode(ListNode** head, int target) {
if (*head == NULL) {
printf("List is empty.\n");
return;
}
ListNode* current = *head;
if (current->data == target) {
*head = current->next;
free(current);
return;
}
while (current->next != NULL && current->next->data != target) {
current = current->next;
}
if (current->next != NULL) {
ListNode* temp = current->next;
current->next = current->next->next;
free(temp);
}
}
// 查找操作
int search(ListNode* head, int target) {
ListNode* current = head;
while (current != NULL) {
if (current->data == target) {
return 1; // 找到目标值,返回1
}
current = current->next;
}
return 0; // 没找到目标值,返回0
}
// 删除重复元素(创建有序顺序表)
void removeDuplicates(ListNode** head) {
if (*head == NULL || (*head)->next == NULL) {
return;
}
ListNode* current = *head;
while (current->next != NULL) {
if (current->data > current->next->data) {
// 如果当前节点大于下一个节点,交换位置
ListNode* temp = current->data;
current->data = current->next->data;
current->next->data = temp;
} else {
current = current->next;
}
}
}
// 测试
int main() {
ListNode* head = NULL;
insert(&head, 5); // 插入5
insert(&head, 3); // 插入3
insert(&head, 8); // 插入8
insert(&head, 3); // 再次插入3
printf("Before removing duplicates:\n");
printList(head);
removeDuplicates(&head);
printf("\nAfter removing duplicates:\n");
printList(head);
printf("Search for 3: %d\n", search(head, 3)); // 查找3是否存在
printf("Search for 9: %d\n", search(head, 9)); // 查找9是否存在
return 0;
}
// 辅助函数:打印链表
void printList(ListNode* node) {
while (node != NULL) {
printf("%d -> ", node->data);
node = node->next;
}
printf("NULL\n");
}
```
请注意,这个示例只实现了基本的顺序表功能,对于大型数据集和频繁的操作,考虑使用动态数组或更高效的数据结构会更好。
阅读全文