
本文共 4254 字,大约阅读时间需要 14 分钟。
#include
#include
#define ERROR -1
#define OK 1
typedef int Status;
typedef int ElemType;
typedef struct LNode{
ElemType data;
struct LNode * next;
} LNode, *LinkList;
//创建空链表
Status Init_LinkList(LinkList &L){
LinkList p;
p = (LinkList)malloc(sizeof(LNode));
if (!p) return ERROR;
L = p;
L->next = NULL;
return OK;
}
int x, y;
void show(){
printf("\t\t*********单链表(头插法)集合运算************\n");
printf("\n");
printf("\t\t\t1 集合A数据输入\n");
printf("\t\t\t2 集合B数据输入\n");
printf("\t\t\t3 集合A数据显示\n");
printf("\t\t\t4 集合B数据显示\n");
printf("\t\t\t5 集合A和集合B的并集\n");
printf("\t\t\t6 集合A和集合B的交集\n");
printf("\t\t\t7 集合A和集合B的差集\n");
printf("\t\t\t0 退出系统\n");
printf("\n");
printf("\t\t*********单链表(头插法)集合运算*************\n");
printf("\n");
}
// 输入
Status input(LinkList &L, int n){
LinkList p;
int i;
for (i = 1; i <= n; i++) {
printf("请输入集合的第%d个数:", i);
p = (LinkList)malloc(sizeof(LNode));
if (p != NULL) {
scanf("%d", &p->data);
p->next = L->next;
L->next = p;
} else {
return ERROR;
}
printf("集合输入完成!\n");
return OK;
}
// 输出
void Output(LinkList L){
if (L->next == NULL) {
printf("该链表是空链表!\n");
LinkList p;
for (p = L->next; p != NULL; p = p->next) {
printf("%d ", p->data);
printf("\n");
}
}
// 链表清空
Status ClearList_L(LinkList &L){
LinkList p, q;
p = L->next;
if (!p) return OK;
while (p) {
q = p;
p = p->next;
free(q);
L->next = NULL;
return OK;
}
// 并集
void and_set(LinkList La, LinkList Lb, LinkList &Lc){
if (Lc->next != NULL) {
ClearList_L(Lc);
LinkList p, q, s;
p = La->next;
while (p) {
q = Lc->next;
while (q && (q->data != p->data)) {
q = q->next;
if (!q) {
s = (LinkList)malloc(sizeof(LNode));
s->data = p->data;
s->next = Lc->next;
Lc->next = s;
}
p = p->next;
p = Lb->next;
while (p) {
q = Lc->next;
while (q && (q->data != p->data)) {
q = q->next;
if (!q) {
s = (LinkList)malloc(sizeof(LNode));
s->data = p->data;
s->next = Lc->next;
Lc->next = s;
}
p = p->next;
}
// 交集
void intersection(LinkList La, LinkList Lb, LinkList &Lc){
if (Lc->next != NULL) {
ClearList_L(Lc);
LinkList p, q, s, k;
p = La->next;
while (p) {
q = Lb->next;
while (q) {
if (q->data == p->data) {
break;
} else {
q = q->next;
if (q) {
s = Lc->next;
while (s) {
if (s->data == p->data) {
break;
} else {
s = s->next;
if (!s) {
k = (LinkList)malloc(sizeof(LNode));
k->data = p->data;
k->next = Lc->next;
Lc->next = k;
}
}
p = p->next;
}
// 差集
void difference_set(LinkList La, LinkList Lb, LinkList &Lc){
if (Lc->next != NULL) {
ClearList_L(Lc);
LinkList p, q, s, k;
p = La->next;
while (p) {
q = Lb->next;
while (q) {
if (q->data != p->data) {
break;
} else {
q = q->next;
if (!q) {
s = Lc->next;
while (s) {
if (s->data != p->data) {
break;
} else {
s = s->next;
if (!s) {
k = (LinkList)malloc(sizeof(LNode));
k->data = p->data;
k->next = Lc->next;
Lc->next = k;
}
}
next;
}
int main(){
int choice;
LinkList La, Lb, Lc;
Init_LinkList(La);
Init_LinkList(Lb);
Init_LinkList(Lc);
while (1) {
show();
scanf("%d", &choice);
switch(choice){
return 0;
// 交集功能未完成,请忽略
发表评论
最新留言
关于作者
