基于单链表实现集合的并交差运算实验报告
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
while(p!=NULL)
{
i++;
p=p->next;
}
return i;
}
/*查看单链表是否为空*/
bool ListEmpty(LinkList *L)
{
return L->next==NULL;
}
/*求单链表中某个数据元素值*/
bool GetElem(LinkList *L,int i, ElemType &e)
数据关系:R1={ ai 1,ai|ai 1,aiD,i2,...,n}
基本操作:
InitList(&L)
操作结果;构造一个空的线性表L
DestroyList(&L)初始条件:线性表L已存在 操作结果:销毁线性表L ClearList(&L)初始条件:线性表L已存在 操作结果:将L置为空表ListEmpty(L)初始条件:线性表已存在 操作结果:若L为空表,则返回TRUE否则返回FALSE
return true;
}
}
/*删除单链表*/
void DestroyList(LinkList *&L)
{
LinkList *p=L;
LinkList *q=p->next;
while(q!=NULL)
{
free(p);
p=q;
q=p->next;
}
free(p);
}
3.4解题思路:
1.先通过CreateListR函数将集合a和b中的元素添加 到顺序表ha和hb中 ,添加过程使用的是顺序表原有的Initlist函数(初始化表) 和ListInsert函数 (向表中插 入元素) 。
LinkList *p=L->next; while(p!=NULL){
printf("%c",p->data);
p=p->next;
}
printf("\n");
}
/*求单链表的长度*/
int ListLength(LinkList *L)
{
LinkList *p=L->next;
int i= 0;
操作结果:用此时的i+1返回该元素在线性表的位序ListInsert(&L,i,e)
初始条件:线性表存在,1<=i<=ListLength(L)+1;操作结果:在L中第i个位置之前插入新的数据元素,e,L ListDelete(&L,i,&e)初始条件:线性表L已存在且非空,1<=i<=ListLength(L)操作结果:删除L的第i个数据元素,并用e返回其值,
ListLength(L)初始条件:线性表已存在
操作结果:返回L中数据元素的个数GetElem(L,i)
初始条件:线性表已存在,1<=i<=ListLength(L)操作结果:用e返回L中第i个数据元素的值LocateElem(L,i,e)初始条件:线性表已存在,用循环遍历整个线性表,如果 中的元素相同;
{
p=p->next;
j++;
}
if(p==NULL)
{
return false;
}
else
{
s=(LinkList *)malloc(sizeof(LinkList)); s->data=e;
s->next=p->next;
p->next=s;
return true;
}
}
/*输出单链表*/void DispList(LinkList *L){
{
LinkList *p=L;
int i= 0;
while(p!=NULL&&p->data!=e)
{p=p->next; i++;
}if(p==NULL)
{return0;
}
else
{return i;
}
}
/*删除单链表中第i个元素*/
bool ListDelete(LinkList *&L,int i,ElemType &e){
基于单链表实现集合的并交差运算实验报告
一
2.2:编写一个程序,实现顺序表的各种基本运算
(1)初始化单链表h;
(2)依次采用尾插法插入a,b,c,d,e元素;
(3)输出单链表h
(4)输出单链表h的长度
(5)判断单链表h是否为空
(6)输出单链表h的第三个元素
(7)输出元素在a的位置
(8)在第4个元素位置上插入f元素
{
L=(LinkList *)malloc(sizeof(LinkList));
L->next=NULL;
}
/*向单链表中插入数据元素*/
bool ListInsert(LinkList *&L,int x,char e)
{
int j= 0;
LinkList *p=L, *s;
while(p!=NULL&&j<x-1)
(9)输出单链表h
(10)删除L的第3个元素
(11)输出单链表
(12)释放单链表
2.2:编写一个程序,采用单链表表示集合(集合中不存在重复的元素),并将其按照递增的方式排序, 构成有序单链表, 并求这样的两个集合的并 交和差。
三 来自百度文库验内容
3.1线性表的抽象数据类型:
ADT List{
数据对象;D={ai|aiElemSet ,i1,2,...,n,n0}
2.因为原集合是无序的, 所以我通过sort函数 (选择排
序),使得集合变得有序
3.得到有序集合ha和hb后, 便可以使用Union函数 (类似归并的思想写出来的求并集的函数) ,求出ha和hb的 并集。
int j= 0;
LinkList *p=L, *q; while(p!=NULL&&j<i- 1)
{
p=p->next;
j++;
}if(p==NULL) return false;
else
{
q=p->next; if(q==NULL) return false;
e=q->data; p->next=q->next; free(q);
{
LinkList *p=L;
int j= 0;
while(p!=NULL&&j<i)
{
p=p->next;
j++;
}
if(p==NULL)
{
return false;
}
else
{
e=p->data; return true;
}
}
/*在单链表中查找元素*/
int LocateElem(LinkList *L,ElemType e)
1
}ADT List
3.2存储结构的定义;
typedef char ElemType; typedef struct LNode{
ElemType data;
struct LNode *next;
}LinkList;
3.3基本操作实现
/*单链表的初始化*/
void InitList(LinkList *&L)
{
i++;
p=p->next;
}
return i;
}
/*查看单链表是否为空*/
bool ListEmpty(LinkList *L)
{
return L->next==NULL;
}
/*求单链表中某个数据元素值*/
bool GetElem(LinkList *L,int i, ElemType &e)
数据关系:R1={ ai 1,ai|ai 1,aiD,i2,...,n}
基本操作:
InitList(&L)
操作结果;构造一个空的线性表L
DestroyList(&L)初始条件:线性表L已存在 操作结果:销毁线性表L ClearList(&L)初始条件:线性表L已存在 操作结果:将L置为空表ListEmpty(L)初始条件:线性表已存在 操作结果:若L为空表,则返回TRUE否则返回FALSE
return true;
}
}
/*删除单链表*/
void DestroyList(LinkList *&L)
{
LinkList *p=L;
LinkList *q=p->next;
while(q!=NULL)
{
free(p);
p=q;
q=p->next;
}
free(p);
}
3.4解题思路:
1.先通过CreateListR函数将集合a和b中的元素添加 到顺序表ha和hb中 ,添加过程使用的是顺序表原有的Initlist函数(初始化表) 和ListInsert函数 (向表中插 入元素) 。
LinkList *p=L->next; while(p!=NULL){
printf("%c",p->data);
p=p->next;
}
printf("\n");
}
/*求单链表的长度*/
int ListLength(LinkList *L)
{
LinkList *p=L->next;
int i= 0;
操作结果:用此时的i+1返回该元素在线性表的位序ListInsert(&L,i,e)
初始条件:线性表存在,1<=i<=ListLength(L)+1;操作结果:在L中第i个位置之前插入新的数据元素,e,L ListDelete(&L,i,&e)初始条件:线性表L已存在且非空,1<=i<=ListLength(L)操作结果:删除L的第i个数据元素,并用e返回其值,
ListLength(L)初始条件:线性表已存在
操作结果:返回L中数据元素的个数GetElem(L,i)
初始条件:线性表已存在,1<=i<=ListLength(L)操作结果:用e返回L中第i个数据元素的值LocateElem(L,i,e)初始条件:线性表已存在,用循环遍历整个线性表,如果 中的元素相同;
{
p=p->next;
j++;
}
if(p==NULL)
{
return false;
}
else
{
s=(LinkList *)malloc(sizeof(LinkList)); s->data=e;
s->next=p->next;
p->next=s;
return true;
}
}
/*输出单链表*/void DispList(LinkList *L){
{
LinkList *p=L;
int i= 0;
while(p!=NULL&&p->data!=e)
{p=p->next; i++;
}if(p==NULL)
{return0;
}
else
{return i;
}
}
/*删除单链表中第i个元素*/
bool ListDelete(LinkList *&L,int i,ElemType &e){
基于单链表实现集合的并交差运算实验报告
一
2.2:编写一个程序,实现顺序表的各种基本运算
(1)初始化单链表h;
(2)依次采用尾插法插入a,b,c,d,e元素;
(3)输出单链表h
(4)输出单链表h的长度
(5)判断单链表h是否为空
(6)输出单链表h的第三个元素
(7)输出元素在a的位置
(8)在第4个元素位置上插入f元素
{
L=(LinkList *)malloc(sizeof(LinkList));
L->next=NULL;
}
/*向单链表中插入数据元素*/
bool ListInsert(LinkList *&L,int x,char e)
{
int j= 0;
LinkList *p=L, *s;
while(p!=NULL&&j<x-1)
(9)输出单链表h
(10)删除L的第3个元素
(11)输出单链表
(12)释放单链表
2.2:编写一个程序,采用单链表表示集合(集合中不存在重复的元素),并将其按照递增的方式排序, 构成有序单链表, 并求这样的两个集合的并 交和差。
三 来自百度文库验内容
3.1线性表的抽象数据类型:
ADT List{
数据对象;D={ai|aiElemSet ,i1,2,...,n,n0}
2.因为原集合是无序的, 所以我通过sort函数 (选择排
序),使得集合变得有序
3.得到有序集合ha和hb后, 便可以使用Union函数 (类似归并的思想写出来的求并集的函数) ,求出ha和hb的 并集。
int j= 0;
LinkList *p=L, *q; while(p!=NULL&&j<i- 1)
{
p=p->next;
j++;
}if(p==NULL) return false;
else
{
q=p->next; if(q==NULL) return false;
e=q->data; p->next=q->next; free(q);
{
LinkList *p=L;
int j= 0;
while(p!=NULL&&j<i)
{
p=p->next;
j++;
}
if(p==NULL)
{
return false;
}
else
{
e=p->data; return true;
}
}
/*在单链表中查找元素*/
int LocateElem(LinkList *L,ElemType e)
1
}ADT List
3.2存储结构的定义;
typedef char ElemType; typedef struct LNode{
ElemType data;
struct LNode *next;
}LinkList;
3.3基本操作实现
/*单链表的初始化*/
void InitList(LinkList *&L)