集合运算
功能:使用链表来表示集合,完成集合的交、并、差等操作。
主要包含以下内容:
1、初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数;
2、完成最低要求:完成集合的各种基本运算;
代码
linklist.cpp
#include<stdio.h>
#include<malloc.h>
typedef char ElemType;
typedef struct LNode
{
ElemType data; //存放元素值
struct LNode *next; //指向后继结点
}LinkNode; //声明单链表节点类型
void CreateListF(LinkNode *&L,ElemType a[],int n) //头插法建立单链表
{
LinkNode *s;
L=(LinkNode *)malloc(sizeof(LinkNode)); //创建头结点
L->next=NULL; //创建头结点,其next域值为NULL
for(int i=0;i<n;i++) //循环建立数据结点s
{
s=(LinkNode *)malloc(sizeof(LinkNode)); //创建新结点
s->data=a[i]; //创建数据结点s
s->next=L->next; //将结点s插在原开始结点之前,头结点之后
L->next=s;
}
}
void CreateListR(LinkNode *&L,ElemType a[],int n) //尾插法建立单链表
{
LinkNode *s,*r;
L=(LinkNode *)malloc(sizeof(LinkNode)); //创建头结点
L->next=NULL;
r=L; //r始终指向尾结点,开始是指向头结点
for(int i=0;i<n;i++) //循环建立数据结点s
{
s=(LinkNode *)malloc(sizeof(LinkNode)); //创建新结点s
s->data=a[i]; //创建数据结点s
r->next=s; //将结点s插入r结点之后
r=s;
}
r->next=NULL; //尾结点的next域值为NULL
}
void InitList(LinkNode *&L) //初始化线性表
{
L=(LinkNode*)malloc(sizeof(LinkNode)); //创建头结点
L->next=NULL; //创建头结点,其next域值为NULL
}
void DestroyList(LinkNode *&L) //销毁线性表
{
LinkNode *pre=L, *p=pre->next; //pre指向结点p的前驱结点
while(p!=NULL) //扫描单链表L
{
free(pre); //释放pre结点
pre=p; //pre和p同步后移一个结点
p=pre->next;
}
free(pre); //循环结束时p为NULL,pre指向尾结点,释放它
}
bool ListEmpty(LinkNode *L) //判断线性表是否为空
{
return(L->next=&