设A和B是两个按元素值递增有序的单链表,写一算法将A和B归并为按按元素值递减有序的单链表C,试分析算法的时间复杂度。(利用上篇带有头结点的线性链表操作)

#include <stdio.h>
#include <malloc.h>
typedef int DataType;
#include "LinList.h"

void main()
{
SLNode *head_A,*head_B,*c,*pa,*pb,*pc;
int i,j,x;

ListInitiate(&head_A);//初始化链表a

ListInsert(head_A,0,1);//a递增链表
ListInsert(head_A,1,3);
ListInsert(head_A,2,5);
ListInsert(head_A,3,7);

pa=head_A->next;

ListInitiate(&head_B);//初始化链表b

ListInsert(head_B,0,2);//b递增链表
ListInsert(head_B,1,3);
ListInsert(head_B,2,6);
ListInsert(head_B,3,8);
ListInsert(head_B,4,9);
ListInsert(head_B,5,12);

pb=head_B->next;

ListInitiate(&c);

/*
设a链表长度为an,b链表长度为bn,
算法时间复杂度:O(an+bn)
*/
while(pb!=NULL && pa!=NULL)
{
pc=(SLNode *)malloc(sizeof(SLNode));

if(pa->data <= pb->data)
{
pc->data=pa->data;
pa=pa->next;
}
else
{
pc->data=(pb->data);
pb=pb->next;
}

//插入步骤
pc->next=c->next;
c->next=pc;

}
if(pa==NULL)//如果a链表读完了,把剩下的b链表赋给c
{
while(pb!=NULL)
{
pc=(SLNode *)malloc(sizeof(SLNode));
pc->data=pb->data;
pb=pb->next;

pc->next=c->next;
c->next=pc;
}
}
else//如果b链表读完了,把剩下的a链表赋给c
{
while(pa!=NULL)
{
pc=(SLNode *)malloc(sizeof(SLNode));
pc->data=pa->data;
pa=pa->next;

pc->next=c->next;
c->next=pc;
}
}

printf("输出a递增链表:\n");
for(i=0;i<ListLength(head_A);i++)
{
ListGet(head_A,i,&x);
printf("%d ",x);
}
printf("\n\n");

printf("输出b递增链表:\n");
for(i=0;i<ListLength(head_B);i++)
{
ListGet(head_B,i,&x);
printf("%d ",x);
}
printf("\n\n");

printf("输出c链表:\n");
for(i=0;i < ListLength(c);i++)
{
ListGet(c,i,&x);
printf("%d ",x);
}
printf("\n\n");

Destroy(&head_A);
Destroy(&head_B);
Destroy(&c);
}

时间: 2024-10-10 20:56:25

设A和B是两个按元素值递增有序的单链表,写一算法将A和B归并为按按元素值递减有序的单链表C,试分析算法的时间复杂度。(利用上篇带有头结点的线性链表操作)的相关文章

链接分析算法之:SALSA算法

SALSA算法的初衷希望能够结合PageRank和HITS算法两者的主要特点,既可以利用HITS算法与查询相关的特点,也可以采纳PageRank的“随机游走模型”,这是SALSA算法提出的背景.由此可见,SALSA算法融合了PageRank和HITS算法的基本思想,从实际效果来说,很多实验数据表明,SALSA的搜索效果也都优于前两个算法,是目前效果最好的链接分析算法之一. 从整体计算流程来说,可以将SALSA划分为两个大的阶段:首先是确定计算对象集合的阶段,这一阶段与HITS算法基本相同:第二个

3.4 网页分析算法

在搜索引擎中,爬虫爬取了对应的网页之后,会将网页存储到服务器的原始数据库中,之后搜索引擎会对这些网页进行分析并确定各网页的重要性,即会影响用户的检索的排名结果.对于这些重要性的确定及排名结果的确定需要算法来解决,所以先来了解一下算法. 搜索引擎的网页分析算法主要分为3类:基于用户行为的网页分析算法.基于网络拓扑的网页分析算法.基于网页内容的网页分析算法.接下来我们分别对这些算法进行讲解. 搜索引擎的网页分析算法主要分为3类:基于用户行为的网页分析算法.基于网络拓扑的网页网页分析算法.基于网页内容

【微软100题】一个台阶总共同拥有n 级,假设一次能够跳1 级,也能够跳2 级,求总共同拥有多少总跳法,并分析算法的时间复杂度

package ms100; /** * 一个台阶总共同拥有n 级,假设一次能够跳1 级.也能够跳2 级,求总共同拥有多少总跳法.并分析算法的时间复杂度 *注: 这道题近期常常出现.包含MicroStrategy 等比較重视算法的公司都曾先后选用过个这道题作为面试题或者笔试题. 首先我们考虑最简单的情况: 假设仅仅有1 级台阶,那显然仅仅有一种跳法. 假设有2 级台阶,那就有两种跳的方法了:一种是分两次跳.每次跳1 级:第二种就是一次跳2 级. 如今我们再来讨论普通情况: 我们把n 级台阶时的跳

一个台阶总共有n 级,如果一次可以跳1 级,也可以跳2 级,求总共有多少总跳法,并分析算法的时间复杂度

package ms100; /** * 一个台阶总共有n 级,如果一次可以跳1 级,也可以跳2 级,求总共有多少总跳法,并分析算法的时间复杂度 *注: 这道题最近经常出现,包括MicroStrategy 等比较重视算法的公司都曾先后选用过个这道题作为面试题或者笔试题. 首先我们考虑最简单的情况: 如果只有1 级台阶,那显然只有一种跳法, 如果有2 级台阶,那就有两种跳的方法了:一种是分两次跳,每次跳1 级:另外一种就是一次跳2 级. 现在我们再来讨论一般情况: 我们把n 级台阶时的跳法看成是n

对于近似有序序列(即除掉少数K个元素后是有序序列且K&lt;&lt;n),试分析直接插入排序,冒牌排序和简单选择排序的时间复杂度

学弟问的一道数据结构的题,关于一些排序算法的时间复杂度. 针对近似有序序列, ①当使用直接插入排序时,其基本操作为数组中元素的移动.最好情况下,待排序列有序,无需移动,此时时间复杂度为O(n), 当为近似有序序列是,其基本操作执行的次数是K次当前循环的最大值的和,即时间复杂度为O(k.n)由于k远小于n, 综合考虑直接插入排序的时间复杂度为O(n) ②当使用冒泡排序时,默认为普通冒泡排序,其基本操作为元素间比较的次数,因此无论 是否是近似有序,时间复杂度均为O(n^2) ③当使用简单排序时,其基

(原创)大数据时代:基于微软案例数据库数据挖掘知识点总结(Microsoft 关联规则分析算法)

前言 本篇继续我们的微软挖掘算法系列总结,前几篇我们分别介绍了:Microsoft决策树分析算法.Microsoft聚类分析算法.Microsoft Naive Bayes 算法.Microsoft 时序算法,后续还补充了二篇结果预测篇.Microsoft 时序算法——结果预算+下期彩票预测篇,看样子有必要整理一篇目录了,不同的算法应用的场景也是不同的,每篇文章都有它自己的应用场景介绍,有兴趣的同学可以参阅.本篇我们总结微软挖掘算法系列中一款比较重要的算法:Microsoft关联规则分析算法,根

链接分析算法之:HITS算法

转自 http://blog.csdn.net/hguisu/article/details/8013489 HITS(HITS(Hyperlink - Induced Topic Search) ) 算法是由康奈尔大学( Cornell University ) 的Jon Kleinberg 博士于1997 年首先提出的,为IBM 公司阿尔马登研究中心( IBM Almaden Research Center) 的名为"CLEVER"的研究项目中的一部分. HITS算法是链接分析中非

微软数据挖掘算法:Microsoft 关联规则分析算法(7)

前言 本篇继续我们的微软挖掘算法系列总结,前几篇我们分别介绍了:微软数据挖掘算法:Microsoft 决策树分析算法(1).微软数据挖掘算法:Microsoft 聚类分析算法(2).微软数据挖掘算法:Microsoft Naive Bayes 算法(3).微软数据挖掘算法:Microsoft 时序算法(5),后续还补充了二篇微软数据挖掘算法:结果预测篇(4).微软数据挖掘算法:Microsoft 时序算法之结果预测及其彩票预测(6),看样子有必要整理一篇目录了,不同的算法应用的场景也是不同的,每

微软数据挖掘算法:Microsoft 决策树分析算法(1)

介绍: Microsoft 决策树算法是分类和回归算法,用于对离散和连续属性进行预测性建模. 对于离散属性,该算法根据数据集中输入列之间的关系进行预测. 它使用这些列的值(也称之为状态)预测指定为可预测的列的状态. 具体地说,该算法标识与可预测列相关的输入列. 例如,在预测哪些客户可能购买自行车的方案中,假如在十名年轻客户中有九名购买了自行车,但在十名年龄较大的客户中只有两名购买了自行车,则该算法从中推断出年龄是自行车购买情况的最佳预测因子. 决策树根据朝向特定结果发展的趋势进行预测. 对于连续