c语言删除无序顺序表重复元素
时间: 2024-10-15 15:17:55 浏览: 43
在 C 语言中,删除无序顺序表(数组或链表)中的重复元素通常涉及遍历列表,同时使用哈希表或其他数据结构来跟踪已经遇到过的元素。这里是一个简单的例子,演示如何删除数组中重复的整数:
1. **数组**:
```c
#include <stdio.h>
void removeDuplicates(int arr[], int n) {
if (n == 0 || n == 1) return; // 如果数组只有一个元素或为空,无需操作
int i, j;
for (i = 0, j = 1; i < n - 1 && j < n; ++j) {
if (arr[i] != arr[j]) {
arr[++i] = arr[j]; // 将非重复元素移动到前面
}
}
arr[i + 1] = 0; // 如果最后一个元素未被覆盖,则赋值为0作为结束标志
}
int main() {
int arr[] = {1, 2, 3, 4, 2, 5, 6, 3};
int n = sizeof(arr) / sizeof(arr[0]);
removeDuplicates(arr, n);
printf("数组(去重后): ");
for (int i = 0; arr[i] != 0; ++i)
printf("%d ", arr[i]);
return 0;
}
```
2. **链表**:
对于链表,可以遍历节点并创建一个新的链表,只包含不同的元素。以下是基本思路:
```c
struct Node {
int data;
struct Node* next;
};
void deleteDuplicates(struct Node* head) {
if (!head) return;
struct Node *prev = NULL, *current = head, *next;
while (current) {
next = current->next;
while (next && current->data == next->data) {
free(next); // 直接删除重复的节点
next = next->next;
}
prev->next = current;
prev = current;
current = next;
}
prev->next = NULL; // 结束新链表
}
```
阅读全文