程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C語言兩個無序單鏈表,排序後合並成一個有序鏈表

C語言兩個無序單鏈表,排序後合並成一個有序鏈表

編輯:關於C語言
 

算法思想:用冒泡法,對鏈表1和2進行排序,對排序後的兩個鏈表,從小到大進行循環,裝入鏈表3中。

#include<stdio.h>
#include<stdlib.h>


struct stud/*定義鏈表*/
{
int data;
struct stud *next;
};

 

void pai_xue(struct stud *head1,struct stud *head2,int count1,int count2)/*冒泡排序法*/
{

int i,j,temp=0;
struct stud *p;

for(i=0;i<count1-1;++i)
for(p=head1->next;p->next!=NULL;p=p->next)/*對鏈表1進行排序*/
{
if(p->data>p->next->data)
{
temp=p->data;
p->data=p->next->data;
p->next->data=temp;
}
}

for(i=0;i<count2-1;++i)
for(p=head2->next;p->next!=NULL;p=p->next)/*對鏈表2進行排序*/
{
if(p->data>p->next->data)
{
temp=p->data;
p->data=p->next->data;
p->next->data=temp;
}
}

printf("\n鏈表1排完序後\n");/*輸出鏈表1和2*/
p=head1->next;
while(p)
{
printf("%d",p->data);
p=p->next;
}
printf("\n");

printf("\n鏈表2排完序後\n");
p=head2->next;
while(p)
{
printf("%d",p->data);
p=p->next;
}
printf("\n");



}

void main()
{


struct stud *head1,*head2,*p,*q,*head3;
int count1=1,count2=1;

head3=(struct stud *)malloc(sizeof(struct stud *));/*定義鏈表頭結點,並分配空間*/
head3->next=NULL;

head1=(struct stud *)malloc(sizeof(struct stud *));
head2=(struct stud *)malloc(sizeof(struct stud *));
p=(struct stud *)malloc(sizeof(struct stud *));
q=(struct stud *)malloc(sizeof(struct stud *));

head1->next=NULL;
head2->next=NULL;

printf("輸入一個數據以999結束\n");
scanf("%d",&p->data);

while(p->data!=999)/*鏈表1輸入數據*/
{

count1++;
p->next=head1->next;
head1->next=p;
printf("輸入一個數據以999結束\n");
p=(struct stud *)malloc(sizeof(struct stud *));
scanf("%d",&p->data);

}


printf("現在開始給第二個鏈表輸入數據\n");

printf("輸入一個數據以999結束\n");
scanf("%d",&q->data);

while(q->data!=999)/*鏈表2輸入數據*/
{

count2++;
q->next=head2->next;
head2->next=q;
printf("輸入一個數據以999結束\n");
q=(struct stud *)malloc(sizeof(struct stud *));
scanf("%d",&q->data);

}


pai_xue(head1,head2,count1,count2);

 

 

 


head1=head1->next;
head2=head2->next;
while(head1!=NULL&&head2!=NULL)/*將排序好的鏈表1和2 的數據導入鏈表3*/
{
if(head1->data<=head2->data)
{
p=head1->next;

head1->next=head3->next;
head3->next=head1;

head1=p;
}

else
{
q=head2->next;

head2->next=head3->next;
head3->next=head2;

head2=q;
}
}

 

if(head1!=NULL)/*如果有鏈表1或2的數據不為空,將剩下的數據導入鏈表3中*/
{


p=head1;
while(p!=NULL)
{
q=p->next;
p->next=head3->next;
head3->next=p;
p=q;
}

}
if(head2!=NULL)
{

q=head2;
while(q!=NULL)
{
p=q->next;
q->next=head3->next;
head3->next=q;
q=p;
}

}


q=head3->next;/*將鏈表倒置,原來是由大到小,倒置成由小到大*/
head3->next=NULL;
while(q!=NULL)
{
p=q->next;
q->next=head3->next;
head3->next=q;
q=p;
}

printf("兩個鏈表合並後由小到大為\n");

p=head3->next;
while(p)
{
printf("%d",p->data);
p=p->next;
}
}
 

C語言兩個無序單鏈表,排序後合並成一個有序鏈表
C語言兩個無序單鏈表,排序後合並成一個有序鏈表
 

 

 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved