C語言中數(shù)據(jù)結構之鏈表歸并排序實例代碼
更新時間:2017年05月25日 14:16:18 作者:將進酒-杯莫停
這篇文章主要介紹了C語言中數(shù)據(jù)結構之鏈表歸并排序實例代碼的相關資料,需要的朋友可以參考下
C語言中數(shù)據(jù)結構之鏈表歸并排序實例代碼
問題
設有兩個無頭結點的單鏈表,頭指針分別為ha,hb,鏈中有數(shù)據(jù)域data,鏈域next,兩鏈表的數(shù)據(jù)都按遞增排序存放,現(xiàn)要求將hb表歸到ha表中,且歸并后ha仍遞增序,歸并中ha表中已有的數(shù)據(jù)若hb中也有,則hb中的數(shù)據(jù)不歸并到ha中,hb的鏈表在算法中不允許破壞。
源程序
#include <stdio.h>
#include<stdlib.h>
#define N1 6 /*鏈表La的長度*/
#define N2 6 /*鏈表Lb的長度*/
struct listnode
{
int data;
struct listnode *next;
};
void createlist(struct listnode * *,int);
void listinsert(struct listnode * *,struct listnode * *);
void readlist(struct listnode *);
int main()
{
struct listnode *ha=NULL,*hb=NULL;
printf("請按照升序序列輸入以下數(shù)字以建立鏈表La\n");
printf("Please Input %d numbers:",N1);
createlist(&ha,N1);
printf("請按照升序序列輸入以下數(shù)字以建立鏈表Lb\n");
printf("Please Input %d numbers:",N2);
createlist(&hb,N2);
listinsert(&ha,&hb);
readlist(ha);
printf("\n");
}
void createlist(struct listnode * *p,int n)
{ /*尾插法建立鏈表*/
struct listnode *t,*q;
int i;
t=(struct listnode *)malloc(sizeof(struct listnode));
scanf("%d",&t->data);
*p=t;
q=t;
for(i=n-1;i>0;i--)
{
t=(struct listnode *)malloc(sizeof(struct listnode));
scanf("%d",&t->data);
q->next=t;
q=t;
}
q->next=NULL;
}
void listinsert(struct listnode * *a,struct listnode * *b)
{ /*將兩個鏈表按遞增序列排序*/
struct listnode *pa,*pb,*other,*la,*pre;
la=(struct listnode *)malloc(sizeof(struct listnode));
la->next=*a;
pa=*a;
pb=*b;
pre=la;
while(pa&&pb)
{
if(pa->data<pb->data)
{
pre=pre->next;
pa=pa->next;
}
else if (pa->data>pb->data)
{
other=(struct listnode *)malloc(sizeof(struct listnode));
other->data=pb->data;
other->next=pa;
pre->next=other;
pre=other;
pb=pb->next;
}
else
{
pre=pre->next;
pa=pa->next;
pb=pb->next;
}
}
if(!pa)
{
while(pb)
{
other=(struct listnode *)malloc(sizeof(struct listnode));
other->data=pb->data;
pre->next=other;
pre=pre->next;
pb=pb->next;
}
pre->next=NULL;
}
*a=la->next;
free(la);
}
void readlist(struct listnode *p)
{ /*遍歷鏈表并輸出最終結果*/
struct listnode *q;
q=p;
printf("鏈表的排序結果為:\n");
while(q!=NULL)
{
printf("%3d",q->data);
q=q->next;
}
printf("\n");
}
運行結果

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關文章
opencv配置的完整步驟(win10+VS2015+OpenCV3.1.0)
OpenCV是計算機視覺中經(jīng)典的專用庫,其支持多語言、跨平臺,功能強大,這篇文章主要給大家介紹了關于opencv配置(win10+VS2015+OpenCV3.1.0)的相關資料,需要的朋友可以參考下2021-06-06

