导航:首页 > 源码编译 > 两个链表合并用排序算法排序

两个链表合并用排序算法排序

发布时间:2022-09-07 14:53:01

A. 设计两个有序单链表的合拼排序算法 在线等·谢谢了····

设定两个指针,最初位置分别为两个单链表的起始位置
比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到该单链表的下一位置
重复上面一步直到某一指针达到序列尾
将另一序列剩下的所有元素直接复制到合并序列尾

需要程序的话追问我 不过我只会c++和pascal

B. Java合并两个排序的链表问题(剑指offer)

1、先将两个链表分别进行各自排序。如果题目已说明原来的两个链表是已经排好序的话,此步可以省略。
2、新建一个空链表,按照顺序(或者由小到大或者由大到小),依次将两个链表的数据排列到新的链表中。
这样最后得到的链表就是最终合并的链表。

C. C语言 链表合并并排序

/**********start**********//以下是伪代码,有些变量需要定义
if(heada->num
<=
headb->num)//判断第一个节点是在a还是b上,小的作为新链表的头结点,然后设置指示指针pa,pb,p分别在a链表,b链表,新链表上向后移动
{head=heada;
pa=heada->next;
pb=headb;}
else
{head=headb;
pa=heada;
pb=headb->next;}
p=head;
while(pa
&&
pb)//当a,b链表都没到达尾部时,比较a,b链表上当前指示指针pa,pb所指节点的大小,并把新链表的p指向较小的(pa或pb所指的),然后向后移动一下
{
if
(pa->num<=pb->num)
{p->next=pa;p=p->next;pa=pa->next}
else
{p->next=pb;p=p->next;pb=pb->next}
}
if(pa)//说明a链表没到尾部,b链表已结束,直接把a链表剩下的部分接在新链表最后
{
p->next=pa;
tail=taila;
}
if(pb)//同上b链表后面的部分接在新链表后
{
p->next=pb;
tail=tailb;
}
tail->next=NULL;
/***********end***********/

D. 设有两个单链表,一个升序,一个降序.设编写算法,将这两个链表合并为一个有序链表

  1. 将降序的改变一下排序方式,改为升序嘛。

  2. 使用merge()合并两个升序链表。

E. 设计链表合并算法,将两个已排序(升序)的单链表,合并成一个链表而不改变其有序性。用c语言编写。

#include <stdio.h>
#include <malloc.h>
typedef struct node
{
int data;
struct node *next;
}List;
List *create(List *head,int n)//创建链表
{
List *p,*q;
q=(List *)malloc(sizeof(List));
q->data=n;
q->next=NULL;
p=head;
while(p->next!=NULL)p=p->next;
p->next=q;
return head;
}
void print(List *head)//输出链表
{
List *p;
p=head->next;
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
}
List *LINK(List *head1,List *head2)//连接链表
{
List *p;
p=head1;
while(p->next!=NULL)p=p->next;
p->next=head2->next;
return head1;
}
main()
{
int i;
List *head1,*head2,*link1;
head1=(List *)malloc(sizeof(List));
head1->next=NULL;
head2=(List *)malloc(sizeof(List));
head2->next=NULL;
for(i=1;i<=5;i++)head1=create(head1,i);//输入链表1
printf("链表1:\n");
print(head1);
printf("\n链表2:\n");
for(i=6;i<=10;i++)head2=create(head2,i);//输入链表2
print(head2);
link1=LINK(head1,head2);
printf("\n连接后的链表:\n");
print(link1);
}

F. 实现两个链表的合并

一、 需求分析: 题目: 实现两个链表的合并 问题描述: 1. 建立两个链表 A 和 B,链表元素个数分别为 m 和 n 个。 2. 假设元素分别为(x1,x2,„xm),和(y1,y2, „yn)。把它 们合并成一个线形表 C,使得: 当 m>=n 时,C=x1,y1,x2,y2,„xn,yn,„,xm 当 n>m 时,C=y1,x1,y2,x2,„ym,xm,„,yn 输出线性表 C。 由题目的相关信息可以分析得到:首先我们需要建立两个链 表 AB,A 链表的元素个数为 m;B 链表的元素个数为 n;在将 A\B 链 表进行合并,更具 m 和 n 的大小关系决定链表 C 的元素顺序;再将 C 经行直接插入排序得到一个新的链表 D;最后输出 ABCD 的相关信 息。
二、 算法的流程图
开始
Creat
A 链表 B 链表
Creat
Mergel(A,B) 合并成 C 对 C 排序生成 D

G. 编写算法将两个递增单链表合并成一个递减的线性表


/*将两个递增单链表合并成一个递减单链表*/

/*

算法思想:两个链表已经按元素值递增次序排序,将其合并时,均从第一个结点起进行比较,将较小的

结点链入链表中,同时后移工作指针。由于结果链表是递减的,故使用头插法建立新链表。比较结束后,

可能会有一个链表非空,此时用头插法将剩下的结点依次插入新链表中即可。

*/

void Union_List(LinkList& La,LinkList& Lb)

{

LNode *r, *pa = La->next, *pb = Lb->next; //pa,pb分别是La,Lb的工作指针

La->next = NULL; //将La作为结果链表的头指针

while (pa&&pb)

{

if (pa->data <= pb->data)

{

r = pa->next; //r暂存pa的后继结点指针

pa->next = La->next; //头插法插入pa所指结点

La->next = pa;

pa = r;

}

else

{

r = pb->next;

pb->next = La->next;

La->next = pb;

pb = r;

}

}

while (pa) //处理剩下的结点

{

r = pa->next;

pa->next = La->next;

La->next = pa;

pa = r;

}

while (pb)

{

r = pb->next;

pb->next = La->next;

La->next = pb;

pb = r;

}

free(Lb);

}

H. (C语言数据结构) 设计两个有序顺序表的合并排序算法。

#include
#include
typedef
struct
node//定义结构体
{
int
score;
struct
node
*next;
}node;
node
*create(int
n)//创建链表
{
node
*head,*tail,*p;
head=tail=null;
int
i;
for(i=1;i<=n;i++)
{
p=(node
*)malloc(sizeof(node));
p->next=null;
printf("please
input
%d
score:",i);
scanf("%d",&p->score);
if(head==null)
head=tail=p;
else
{
tail->next=p;
tail=p;
}
}
return
head;
}
node
*range(node
*head)//排序
{
node
*p,*q;
int
score,i,n=0;
p=head;
while(p)
{
n++;
p=p->next;
}
for
(i=0;i
next!=null)//内循环
{
q=p->next;
if
(p->score>q->score)//值交换
{
score=p->score;
p->score=q->score;
q->score=score;
}
p=q;
}
}
return
head;
}
node
*connect(node
*head1,node
*head2)//合并
{
node
*p;
p=head1;
while(p->next!=null)
p=p->next;
p->next=head2;
return
head1;
}
void
output(node
*head)//输出
{
node
*p;
p=head;
while(p)
{
printf("%d
",p->score);
p=p->next;
}
printf("\n");
}
int
main()
{
node
*head,*hea1,*head2;
int
n1,n2;
printf("please
input
a
n1:");//第一个链表的成绩个数
scanf("%d",&n1);
hea1=create(n1);
printf("第一个链表的成绩:");
output(hea1);
printf("please
input
a
n2:");//第二个链表的成绩个数
scanf("%d",&n2);
head2=create(n2);
printf("第二个链表的成绩:");
output(head2);
head=connect(hea1,head2);
head=range(head);
printf("合并后,并排好序:");
output(head);
return
0;
}

I. C语言编程 把两个链表排序,并合并成一个排序后的链表

我重新编写:
struct student *m,*p,*q,*head3;
p=(struct student *)malloc(sizeof(struct student));
p=head1;
while(p->next!=NULL)p=p->next;
p->next=head2;//将链表2接到链表1末尾,两链表合为一个
p=head1;
然后排序是按照什么排序?struct student是怎么定义的?

阅读全文

与两个链表合并用排序算法排序相关的资料

热点内容
卡尔曼滤波算法书籍 浏览:769
安卓手机怎么用爱思助手传文件进苹果手机上 浏览:844
安卓怎么下载60秒生存 浏览:803
外向式文件夹 浏览:240
dospdf 浏览:431
怎么修改腾讯云服务器ip 浏览:392
pdftoeps 浏览:496
为什么鸿蒙那么像安卓 浏览:736
安卓手机怎么拍自媒体视频 浏览:186
单片机各个中断的初始化 浏览:724
python怎么集合元素 浏览:481
python逐条解读 浏览:833
基于单片机的湿度控制 浏览:499
ios如何使用安卓的帐号 浏览:883
程序员公园采访 浏览:812
程序员实战教程要多长时间 浏览:979
企业数据加密技巧 浏览:135
租云服务器开发 浏览:814
程序员告白妈妈不同意 浏览:336
攻城掠地怎么查看服务器 浏览:601