導航:首頁 > 源碼編譯 > 兩個鏈表合並用排序演算法排序

兩個鏈表合並用排序演算法排序

發布時間: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是怎麼定義的?

閱讀全文

與兩個鏈表合並用排序演算法排序相關的資料

熱點內容
卡爾曼濾波演算法書籍 瀏覽:768
安卓手機怎麼用愛思助手傳文件進蘋果手機上 瀏覽:843
安卓怎麼下載60秒生存 瀏覽:802
外向式文件夾 瀏覽:235
dospdf 瀏覽:430
怎麼修改騰訊雲伺服器ip 瀏覽:387
pdftoeps 瀏覽:492
為什麼鴻蒙那麼像安卓 瀏覽:735
安卓手機怎麼拍自媒體視頻 瀏覽:185
單片機各個中斷的初始化 瀏覽:723
python怎麼集合元素 瀏覽:480
python逐條解讀 瀏覽:832
基於單片機的濕度控制 瀏覽:498
ios如何使用安卓的帳號 瀏覽:882
程序員公園采訪 瀏覽:811
程序員實戰教程要多長時間 瀏覽:974
企業數據加密技巧 瀏覽:134
租雲伺服器開發 瀏覽:813
程序員告白媽媽不同意 瀏覽:335
攻城掠地怎麼查看伺服器 瀏覽:600