这个是求集合的并交差,其中的Sort算法一点不懂,拜脱详细解释下!

kakukeme 2010-10-06 04:41:00
# include <stdio.h>
# include <malloc.h>

typedef char ElemType;
typedef struct LNode //定义单链表结点类型
{
ElemType data;
struct LNode *next;
}LinkList;

void DispList(LinkList *L)
{
LinkList *p=L->next;
while (p!=NULL)
{
printf("%c",p->data);
p=p->next;
}
printf("\n");
}

void CreateListR(LinkList *&L, ElemType a[], int n)//尾插法建表
{
LinkList *s,*r;
int i;
L=(LinkList *)malloc(sizeof(LinkList)); //创建头结点
L->next=NULL;
r=L; //*r始终指向终端结点,开始时指向头结点
for (i=0; i<n; i++)
{
s=(LinkList *)malloc(sizeof(LinkList)); //创建新结点
s->data=a[i];
r->next=s; //将*s插入*r之后
r=s;
}
r->next=NULL; //终端结点next域置为NULL
}

void Sort(LinkList *& head) //单链表元素排序
{
LinkList *p=head->next, *q, *r;
if (p!=NULL) //若单链表中有一个或以上的数据结点
{
r=p->next; //*r保存*p结点后继结点的指针
p->next=NULL; // 构造只含一个数据结点的有序表
p=r;
while (p!=NULL)
{
r=p->next; //*r保存*p结点后继结点的指针
q=head;
while (q->next!=NULL && q->next->data < p->data)
q=q->next; //在有序表中插入*p的前驱结点*q
p->next=q->next; //将*p插到*q之后
q->next=p;
p=r;
}
}
}


void Union(LinkList *ha, LinkList *hb, LinkList *&hc)//求两有序集合的并
{
LinkList *pa=ha->next, *pb=hb->next, *s, *tc;
hc=(LinkList *)malloc(sizeof(LinkList)); //创建头结点
tc=hc;
while (pa!=NULL && pb!=NULL)
{
if(pa->data < pb->data)
{
s=(LinkList *)malloc(sizeof(LinkList));//复制结点
s->data=pa->data;
tc->next=s;
tc=s;
pa=pa->next;
}
else
if (pa->data >pb->data)
{
s=(LinkList *)malloc(sizeof(LinkList));//复制结点
s->data=pb->data;
tc->next=s;
tc=s;
pb=pb->next;
}
else
{
s=(LinkList *)malloc(sizeof(LinkList));//复制结点
s->data=pa->data;
tc->next=s;
tc=s;
pa=pa->next; //重复的元素只复制一个
pb=pb->next;
}
}
if(pb!=NULL) //复制余下的结点
pa=pb;
while (pa!=NULL)
{
s=(LinkList *)malloc(sizeof(LinkList));
s->data=pa->data;
tc->next=s;
tc=s;
pa=pa->next;
}
tc->next=NULL;
}

void InterSect(LinkList *ha, LinkList *hb, LinkList *&hc)//求有序集合的交
{
LinkList *pa=ha->next, *pb, *s, *tc;
hc=(LinkList *)malloc(sizeof(LinkList));
tc=hc;
while (pa!=NULL)
{
pb=hb->next;
while(pb!=NULL && pb->data < pa->data)
pb=pb->next;
if (pb!=NULL && pb->data == pa->data)
{
s=(LinkList *)malloc(sizeof (LinkList));
s->data=pa->data;
tc->next=s;
tc=s;
}
pa=pa->next;
}
tc->next=NULL;
}

void Subs(LinkList *ha, LinkList *hb, LinkList *&hc)//求两有序集合的差
{
LinkList *pa=ha->next, *pb, *s, *tc;
hc=(LinkList *)malloc(sizeof(LinkList));
tc=hc;
while (pa!=NULL)
{
pb=ha->next;
while (pb!=NULL && pb->data == pa->data)
pb=pb->next;
if(! (pb!=NULL && pb->data == pa->data))//若pa结点不在B中
{
s=(LinkList *)malloc(sizeof(LinkList)); //复制结点
s->data=pa->data;
tc->next=s;
tc=s;
}
pa=pa->next;
}
tc->next=NULL;
}


void main()
{
LinkList *ha, *hb, *hc;
ElemType a[]={'c','a','e','h'};
ElemType b[]={'f','h','b','g','d','a'};
CreateListR(ha,a,4);
CreateListR(hb,b,6);
printf("原集合A:");DispList(ha);
printf("原集合B:");DispList(hb);
Sort(ha);
Sort(hb);
printf("原集合A:");DispList(ha);
printf("原集合B:");DispList(hb);
Union(ha,hb,hc);
printf("集合的并C:");DispList(hc);
InterSect(ha,hb,hc);
printf("集合的交C:");DispList(hc);
Subs(ha,hb,hc);
printf("集合的差C:");DispList(hc);

}


说说这Sort算法在排序时所依据的原则!

...全文
194 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
jimmy87 2010-10-10
  • 打赏
  • 举报
回复
void Sort(LinkList *& head) *& head错了吧? 可以这样吗?
应该是struct LinkList *Sort(LinkList *head)这样的吧
qq775723294 2010-10-10
  • 打赏
  • 举报
回复
不就是一个简单的排序吗
胖企鹅 2010-10-10
  • 打赏
  • 举报
回复
这算法效率不高,最低级的遍历搜索
michael122 2010-10-08
  • 打赏
  • 举报
回复
不就是插入排序嘛
熊熊大叔 2010-10-06
  • 打赏
  • 举报
回复
随便找本数据结构或者算法书,看看插入排序就可以了
源码链接: https://pan.quark.cn/s/a4b39357ea24 在本研究中,我们将详细研究如何借助Python执行数据可视化,旨在剖析2018年期间中国四个主要城市——北京、上海、广州以及深圳的空气质量状况。通过绘制反映空气质量指数(AQI)与细颗粒物(PM2.5)变化趋势的图表,我们能够深入理解这些大都市全年的空气环境质量,并明确评估其优良天气所占的比重。 我们必须首先进行数据准备工作。在当前提供的压缩文件内,名为"2018天气"的文件极有可能是数据来源,其中可能收录了涉及四个城市每日空气质量监测的详细信息。这些数据通常涵盖日期、城市名称、AQI数值、PM2.5含量等核心参数。在Python编程环境中,我们惯常运用pandas库来对这类结构化数据进行高效的处理和分析。 1. **数据导入与初步处理**: - 利用`pandas.read_csv()`方法来导入存储为CSV格式的数据资料。 - 数据整理:对数据中的空白项、非正常数值进行修正,保证数据的精确性。 - 调整日期字段的格式,确保其能够适用于时间序列分析的需。 2. **数据深度分析**: - 针对每个城市的AQI和PM2.5数据执行统计性描述,例如计算平均值、中位数、标准偏差等指标。 - 确定空气质量良好天气的天数,即那些AQI值低于75(依据中国的空气质量评估标准)的日数。 3. **数据呈现**: - 运用matplotlib或seaborn工具绘制折线图,直观展示四个城市在2018年全年的AQI和PM2.5变化动态。 - 可通过采用不同的颜色方案和线条类型来区分不同城市的数据系列。 - 添加必要的图示元素,如日期坐标轴、城市名称标注、图表标题及图例说明,以提升图表的可读...

33,025

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧