C 语言数组输出重复元素60


在 C 语言编程中,数组是一种保存相同数据类型多个值的集合。在某些情况下,我们可能想要输出数组中重复出现的元素。本文将探讨在 C 语言中实现数组重复元素输出的几种方法。

方法 1:使用 for 循环和 if 语句

这种方法通过遍历数组并使用 if 语句检查每个元素是否已经输出过,来查找重复元素。一旦找到重复元素,就会将其打印到控制台。以下是该方法的实现:```c
#include
#include
int main() {
int arr[] = {1, 2, 3, 4, 5, 1, 2, 3};
int size = sizeof(arr) / sizeof(arr[0]);
for (int i = 0; i < size; i++) {
int count = 1;
for (int j = i + 1; j < size; j++) {
if (arr[i] == arr[j]) {
count++;
}
}
if (count > 1) {
printf("%d ", arr[i]);
}
}
return 0;
}
```

方法 2:使用哈希表

哈希表是一种数据结构,它将键值对存储在数组中,并使用哈希函数快速检索元素。为了找到数组中的重复元素,我们可以使用哈希表存储元素及其出现次数。然后,我们可以遍历哈希表并打印出现次数大于 1 的元素。以下是该方法的实现:```c
#include
#include
#define HASHTABLE_SIZE 10
typedef struct {
int key;
int value;
} HashItem;
HashItem* hashtable[HASHTABLE_SIZE];
int hash(int key) {
return key % HASHTABLE_SIZE;
}
void insert(int key) {
int index = hash(key);
HashItem* item = hashtable[index];
if (item == NULL) {
hashtable[index] = malloc(sizeof(HashItem));
hashtable[index]->key = key;
hashtable[index]->value = 1;
} else {
while (item != NULL) {
if (item->key == key) {
item->value++;
break;
}
item = item->next;
}
if (item == NULL) {
item = malloc(sizeof(HashItem));
item->key = key;
item->value = 1;
item->next = hashtable[index];
hashtable[index] = item;
}
}
}
void print_duplicates() {
for (int i = 0; i < HASHTABLE_SIZE; i++) {
HashItem* item = hashtable[i];
while (item != NULL) {
if (item->value > 1) {
printf("%d ", item->key);
}
item = item->next;
}
}
}
int main() {
int arr[] = {1, 2, 3, 4, 5, 1, 2, 3};
int size = sizeof(arr) / sizeof(arr[0]);
for (int i = 0; i < size; i++) {
insert(arr[i]);
}
print_duplicates();
return 0;
}
```

方法 3:使用 set 数据结构

C 语言中没有内置的 set 数据结构,但是我们可以使用第三方库或自己实现一个。set 数据结构本质上是一个无序集合,它不包含重复的元素。我们可以将数组元素插入到 set 中,然后遍历 set 以打印重复元素。以下是使用 set 数据结构输出重复元素的示例代码:```c
#include
#include
typedef struct node {
int data;
struct node* next;
} Node;
typedef struct set {
Node* head;
} Set;
void insert(Set* set, int data) {
Node* new_node = malloc(sizeof(Node));
new_node->data = data;
new_node->next = NULL;
if (set->head == NULL) {
set->head = new_node;
} else {
Node* current = set->head;
while (current->next != NULL) {
current = current->next;
}
current->next = new_node;
}
}
int is_duplicate(Set* set, int data) {
Node* current = set->head;
while (current != NULL) {
if (current->data == data) {
return 1;
}
current = current->next;
}
return 0;
}
void print_duplicates(int arr[], int size) {
Set set;
= NULL;
for (int i = 0; i < size; i++) {
if (is_duplicate(&set, arr[i])) {
printf("%d ", arr[i]);
} else {
insert(&set, arr[i]);
}
}
}
int main() {
int arr[] = {1, 2, 3, 4, 5, 1, 2, 3};
int size = sizeof(arr) / sizeof(arr[0]);
print_duplicates(arr, size);
return 0;
}
```

本文讨论了在 C 语言中输出数组重复元素的三种方法。每种方法都有其优缺点。for 循环和 if 语句方法简单易懂,但效率较低。哈希表方法效率较高,但实现起来更复杂。set 数据结构方法提供了良好的性能和易用性之间的平衡。根据数组大小和特定需求,程序员可以选择最合适的输出重复元素的方法。

2024-11-01


上一篇:C 语言中函数调用的全面指南

下一篇:C 语言输出空格的技巧和方法