帮我用c语言有序链表写一个实现小写字母交并差运算的算法
时间: 2023-05-21 22:06:17 浏览: 64
好的,以下是实现小写字母交并差运算的算法:
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
typedef struct node
{
char data;
struct node *next;
} list_node, *list_ptr;
list_ptr create_node(char data)
{
list_ptr node = (list_ptr)malloc(sizeof(list_node));
if(node)
{
node->data = data;
node->next = NULL;
}
return node;
}
list_ptr create_list()
{
list_ptr head = create_node(0);
list_ptr tail = head;
char ch;
printf("请输入小写字母,以回车结束:\n");
while((ch = getchar()) != '\n')
{
if(ch >= 'a' && ch <= 'z')
{
tail->next = create_node(ch);
tail = tail->next;
}
}
return head;
}
bool is_in_list(list_ptr list, char data)
{
list_ptr p = list->next;
while(p != NULL)
{
if(p->data == data)
return true;
p = p->next;
}
return false;
}
void print_list(list_ptr list)
{
list_ptr p = list->next;
while(p != NULL)
{
printf("%c ", p->data);
p = p->next;
}
printf("\n");
}
list_ptr intersection(list_ptr list1, list_ptr list2)
{
list_ptr result = create_node(0);
list_ptr tail = result;
list_ptr p = list1->next;
while(p != NULL)
{
if(is_in_list(list2, p->data))
{
tail->next = create_node(p->data);
tail = tail->next;
}
p = p->next;
}
return result;
}
list_ptr union_list(list_ptr list1, list_ptr list2)
{
list_ptr result = create_node(0);
list_ptr tail = result;
list_ptr p = list1->next;
while(p != NULL)
{
tail->next = create_node(p->data);
tail = tail->next;
p = p->next;
}
p = list2->next;
while(p != NULL)
{
if(!is_in_list(result, p->data))
{
tail->next = create_node(p->data);
tail = tail->next;
}
p = p->next;
}
return result;
}
list_ptr difference(list_ptr list1, list_ptr list2)
{
list_ptr result = create_node(0);
list_ptr tail = result;
list_ptr p = list1->next;
while(p != NULL)
{
if(!is_in_list(list2, p->data))
{
tail->next = create_node(p->data);
tail = tail->next;
}
p = p->next;
}
return result;
}
int main()
{
list_ptr list1 = create_list();
list_ptr list2 = create_list();
printf("集合1:");
print_list(list1);
printf("集合2:");
print_list(list2);
printf("交集:");
print_list(intersection(list1, list2));
printf("并集:");
print_list(union_list(list1, list2));
printf("差集(集合1-集合2):");
print_list(difference(list1, list2));
printf("差集(集合2-集合1):");
print_list(difference(list2, list1));
return 0;
}