C语言比较两组整数是否有相同的元素,不考虑元素的顺序,并忽略元素重复的情况,每组元素个数不超过100,若有相同的元素,则按从小到大的顺序输出。输入格式为,第一行输入第一个数组的长度,第二行依次输入第一个数组的各个元素,第三行输入第二个数组的长度,第四行依次输入第二个数组的各个元素
时间: 2024-05-14 09:16:43 浏览: 90
。您好,以下是我的回答:
您可以使用哈希表(hash table)来完成此题目。首先将第一个数组中的所有元素存入哈希表中,然后依次遍历第二个数组的元素,对于每一个元素,在哈希表中查找是否存在相同元素。若存在,则将此元素插入到一个列表中。最后对列表进行排序,并输出即可。
以下是C语言的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX 100
typedef struct node {
int val;
struct node* next;
} Node;
Node* createNode(int val) {
Node* node = (Node*) malloc(sizeof(Node));
node->val = val;
node->next = NULL;
return node;
}
void insert(Node* head, int val) {
Node* p = head;
while (p->next != NULL && p->next->val < val) {
p = p->next;
}
Node* node = createNode(val);
node->next = p->next;
p->next = node;
}
void printList(Node* head) {
Node* p = head->next;
while (p != NULL) {
printf("%d ", p->val);
p = p->next;
}
printf("\n");
}
void findCommon(int* nums1, int len1, int* nums2, int len2) {
Node* head = createNode(0);
for (int i = 0; i < len1; i++) {
insert(head, nums1[i]);
}
Node* p = head;
for (int i = 0; i < len2; i++) {
while (p->next != NULL && p->next->val < nums2[i]) {
p = p->next;
}
if (p->next != NULL && p->next->val == nums2[i]) {
insert(head, nums2[i]);
}
}
printList(head);
free(head);
}
int main() {
int len1, len2;
scanf("%d", &len1);
int nums1[MAX];
for (int i = 0; i < len1; i++) {
scanf("%d", &nums1[i]);
}
scanf("%d", &len2);
int nums2[MAX];
for (int i = 0; i < len2; i++) {
scanf("%d", &nums2[i]);
}
findCommon(nums1, len1, nums2, len2);
return 0;
}
```
感谢您的提问,希望我的回答能够帮助到您。
阅读全文