找出不是两个数组共有的元素c 语言
时间: 2024-06-13 12:09:43 浏览: 155
以下是两种在C语言中找出不是两个数组共有的元素的方法:
方法一:使用嵌套循环遍历两个数组,将不同的元素存储到第三个数组中。
```c
#include <stdio.h>
int main() {
int arr1[] = {1, 2, 3, 4, 5};
int arr2[] = {3, 4, 5, 6, 7};
int arr3[10];
int i, j, k = 0, flag;
for (i = 0; i < 5; i++) {
flag = 0;
for (j = 0; j < 5; j++) {
if (arr1[i] == arr2[j]) {
flag = 1;
break;
}
}
if (flag == 0) {
arr3[k] = arr1[i];
k++;
}
}
for (i = 0; i < 5; i++) {
flag = 0;
for (j = 0; j < 5; j++) {
if (arr2[i] == arr1[j]) {
flag = 1;
break;
}
}
if (flag == 0) {
arr3[k] = arr2[i];
k++;
}
}
if (k == 0) {
printf("两个数组没有不同的元素\n");
} else {
printf("两个数组不同的元素为:\n");
for (i = 0; i < k; i++) {
printf("%d ", arr3[i]);
}
printf("\n"); }
return 0;
}
```
方法二:使用哈希表存储第一个数组中的元素,然后遍历第二个数组,如果元素不在哈希表中,则为不同的元素。
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
typedef struct Node {
int data;
struct Node *next;
} Node;
typedef struct HashTable {
Node *table[MAX_SIZE];
} HashTable;
int hash(int data) {
return data % MAX_SIZE;
}
void insert(HashTable *hashTable, int data) {
int index = hash(data);
Node *node = (Node *) malloc(sizeof(Node));
node->data = data;
node->next = NULL;
if (hashTable->table[index] == NULL) {
hashTable->table[index] = node;
} else {
Node *p = hashTable->table[index];
while (p->next != NULL) {
p = p->next;
}
p->next = node;
}
}
int search(HashTable *hashTable, int data) {
int index = hash(data);
Node *p = hashTable->table[index];
while (p != NULL) {
if (p->data == data) {
return 1;
}
p = p->next;
}
return 0;
}
int main() {
int arr1[] = {1, 2, 3, 4, 5};
int arr2[] = {3, 4, 5, 6, 7};
int i, flag;
HashTable hashTable;
for (i = 0; i < MAX_SIZE; i++) {
hashTable.table[i] = NULL;
}
for (i = 0; i < 5; i++) {
insert(&hashTable, arr1[i]);
}
for (i = 0; i < 5; i++) {
flag = search(&hashTable, arr2[i]);
if (flag == 0) {
printf("%d ", arr2[i]);
}
}
printf("\n");
return 0;
}
```
阅读全文