集合的交、并、差运算
【问题描述】
编制一个能演示执行集合的交、并和差运算的程序。
【任务要求】
- 集合元素用小写英文字母,执行各种操作应以对话方式执行。
- 算法要点:利用单链表表示集合;理解好三种运算的含义
3)扩展功能:输入集合中的元素为字符串
【测试数据】
自行设定,注意边界等特殊情况。
代码如下:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct LLinkList {
char data[20];
struct LLinkList *next;
} LLinkList, *LinkList; //定义结构体名称和结构体的类型
void menu() {
printf("\t\t**************************\t\n");
printf( "\t\t1.输入集合A,集合B中的元素\n"
"\t\t2.求两个集合的交集\n"
"\t\t3.求两个集合的并集\n"
"\t\t4.求两个集合的差集\n"
"\t\t5.输出A,B集合\n"
"\t\t6.清空集合A和集合B\n"
"\t\t7.查找集合中元素的位置\n"
"\t\t8.增加集合中的元素\n"
"\t\t9.删除集合中的元素\n"
"\t\t10.修改集合中的元素\n"
"\t\t0.退出系统\n");
printf("\t\t**************************\t\n");
}
//实现创建一个头结点
void Init(LinkList *L) {
*L = (LinkList)malloc(sizeof(LLinkList));
if(!(*L)) {
printf("创建头节点失败\n");
exit(1);
} else
(*L)->next = NULL;
}
//实现集合元素的输入
LinkList Input(LinkList L) {
//给集合输入数据采用单链表尾插法
LinkList p,temp;
p = (LinkList)malloc(sizeof(LLinkList));
if(p==NULL) {
printf("内存分配失败\n");
exit(1);
}
printf("请输入元素:");
scanf("%s",p->data);
if(L != NULL) {
temp = L;
while(temp->next != NULL) {
temp = temp->next;
}
temp->next = p; //插入数据
p->next = NULL;
} else {
L=p;
p->next=NULL;
}
return L;
}
LinkList Delete(LinkList L) {
//删除集合中相同的元素
LinkList p,s,q;
p=L->next;
if(!p) return;
while(p->next!=NULL) {
q=p;
while(q->next) {
//固定p所指结点,向后遍历,寻找与之数据域相同的结点
if(strcmp(q->next->data,p->data)==0) {
//在这里将q->next所指的结点存放数据与p作比较
s=q->next;
q->next=s->next;
free(s);
} else
q=q->next;
}
p=p->next;
}
}
LinkList Search(LinkList L,char str[20]) {
//查找集合中元素的位置
LinkList p;
int i=1;
p=L->next;
gets(str);
while(p->next!=NULL) {
if(strcmp(p->data,str)!=0) {
p=p->next;
i++;
}
}
printf("元素所在的位置为:%d\n",i);
}
LinkList Insert(LinkList L,int i) {
//向集合中插入元素
int j=-1;
LinkList p,q;
p=L;
q=(LinkList)malloc(sizeof(LLinkList));
q->next=NULL;
printf("请输入你想要插入的元素:");
scanf("%s",q->data);
while(p!=NULL) {
j++;
if(j==i-1) {
break;
}
p=p->next;
}
q->next=p->next;
p->next=q;
return L;
}
LinkList Backspace(LinkList L,int i) {
//删除集合中的元素
int j=-1;
LinkList p=L,q;
q=(LinkList)malloc(sizeof(LLinkList));
q->next=NULL;
while(p!=NULL)