在C语言编程中,处理数字重复问题是一个常见的任务。无论是数据清洗、数据分析还是算法设计,去除重复数字都是提升数据处理效率的关键步骤。本文将深入探讨C语言中几种高效消除重复数字的技巧,并提供详细的代码示...
在C语言编程中,处理数字重复问题是一个常见的任务。无论是数据清洗、数据分析还是算法设计,去除重复数字都是提升数据处理效率的关键步骤。本文将深入探讨C语言中几种高效消除重复数字的技巧,并提供详细的代码示例。
排序是消除重复数字最直接的方法。在C语言中,我们可以使用冒泡排序、选择排序、插入排序等基本排序算法对数字进行排序,然后遍历排序后的数组,去除相邻重复的数字。
#include
void bubbleSort(int arr[], int n) { for (int i = 0; i < n-1; i++) { for (int j = 0; j < n-i-1; j++) { if (arr[j] > arr[j+1]) { int temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } }
}
int main() { int arr[] = {3, 6, 2, 8, 2, 3, 6, 10}; int n = sizeof(arr)/sizeof(arr[0]); bubbleSort(arr, n); for (int i = 0; i < n; i++) { if (i > 0 && arr[i] != arr[i-1]) { printf("%d ", arr[i]); } else if (i == 0) { printf("%d ", arr[i]); } } return 0;
} #include
void selectionSort(int arr[], int n) { for (int i = 0; i < n-1; i++) { int min_idx = i; for (int j = i+1; j < n; j++) { if (arr[j] < arr[min_idx]) { min_idx = j; } } int temp = arr[min_idx]; arr[min_idx] = arr[i]; arr[i] = temp; }
}
int main() { int arr[] = {3, 6, 2, 8, 2, 3, 6, 10}; int n = sizeof(arr)/sizeof(arr[0]); selectionSort(arr, n); for (int i = 0; i < n; i++) { if (i > 0 && arr[i] != arr[i-1]) { printf("%d ", arr[i]); } else if (i == 0) { printf("%d ", arr[i]); } } return 0;
} 散列表(哈希表)是一种基于散列函数的数据结构,可以快速查找和删除元素。在C语言中,我们可以使用散列表来存储数字,并检查新数字是否已经存在于散列表中。
#include
#include
#include
#define TABLE_SIZE 10
typedef struct Node { int data; struct Node* next;
} Node;
Node* hashTable[TABLE_SIZE];
unsigned int hash(int key) { return key % TABLE_SIZE;
}
void insert(int key) { if (hashTable[hash(key)] == NULL) { hashTable[hash(key)] = (Node*)malloc(sizeof(Node)); hashTable[hash(key)]->data = key; hashTable[hash(key)]->next = NULL; }
}
bool search(int key) { Node* temp = hashTable[hash(key)]; while (temp != NULL) { if (temp->data == key) { return true; } temp = temp->next; } return false;
}
void removeDuplicates(int arr[], int n) { for (int i = 0; i < n; i++) { if (!search(arr[i])) { insert(arr[i]); } }
}
int main() { int arr[] = {3, 6, 2, 8, 2, 3, 6, 10}; int n = sizeof(arr)/sizeof(arr[0]); removeDuplicates(arr, n); for (int i = 0; i < n; i++) { printf("%d ", arr[i]); } return 0;
} 本文介绍了C语言中两种消除重复数字的技巧:使用排序算法和使用散列表。排序算法简单易懂,但效率较低,适用于小规模数据集。散列表则提供了更高效的解决方案,适合处理大规模数据集。在实际应用中,根据具体需求选择合适的方法至关重要。