数据结构实验报告 单链表
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
信息学院
数据结构实验报告
学号:姓名:班级:
课程名称:数据结构实验名称:用单链表存储集合的元素,变成实现求解两个集合的并和交。
实验性质:①综合性实验√②设计性实验③验证性实验实验时间:2017.10 试验地点:
本实验所用设备:PC及VS2010
【数据结构】:
typedef struct Node
{
int num;
Node *next;
}Node,*LinkNode;
【算法思想】:
以单链表实现两表的交集与并集操作
【算法描述】:
bool LinkSameNum(LinkNode head, int x)//判断是否有相同的数
{
LinkNode p = head->next;
while (p)
{
if (p->num == x)
return true;
p = p->next;
}
return false;
}
void Creat(LinkNode &head, int n)//头插法建立链表
{
head = (LinkNode)malloc(sizeof(Node));
head->next = NULL;
LinkNode s;
int x;
for (int i = 0; i < n; i++)
{
x = rand() % 90 + 10;
if (LinkSameNum(head, x))//如果有相同的重新来过
{
i--;
continue;
}
s = (LinkNode)malloc(sizeof(Node));
s->num = x;
s->next = head->next;
head->next = s;
}
}
LinkNode JiaoJi(LinkNode head1, LinkNode head2)
{
LinkNode head=(LinkNode)malloc(sizeof(Node));
LinkNode tail=head;
tail->next = NULL;
LinkNode s,p1=head1->next, p2 = head2->next;
while (p1)
{
while (p2)
{
if (p2->num == p1->num)
{
s = (LinkNode)malloc(sizeof(Node));
s->num = p1->num;
s->next = NULL;
tail->next = s;
tail = s;
break;
}
p2 = p2->next;
}
p1 = p1->next;
p2 = head2->next;
}
return head;
}
LinkNode BingJi(LinkNode head1, LinkNode head2)
{
LinkNode head = (LinkNode)malloc(sizeof(Node));
head->next = NULL;
LinkNode tail = head;
LinkNode LinkJiaoji = JiaoJi(head1, head2);
LinkNode s, p1 = head1->next, p2 = head2->next,p3=LinkJiaoji->next;
while (p1)
{
s = (LinkNode)malloc(sizeof(Node));
s->num = p1->num;
s->next = tail->next;
tail->next = s;
tail = s;
p1 = p1->next;
}
while(p2)
{
while (p3)
{
if (p2->num == p3->num)
break;
p3 = p3->next;
}
if(!p3)
{
s = (LinkNode)malloc(sizeof(Node));
s->num = p2->num;
s->next = tail->next;
tail->next = s;
tail = s;
}
p3 = LinkJiaoji->next;
p2 = p2->next;
}
return head;
}
LinkNode ChaJi(LinkNode head1, LinkNode head2)
{
LinkNode head = (LinkNode)malloc(sizeof(Node));
head->next = NULL;
LinkNode tail = head;
LinkNode LinkJiaoji = JiaoJi(head1, head2);
LinkNode s, p1 = head1->next, p3 = LinkJiaoji->next;
while (p1)
{