亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C語言中怎么實現鏈表歸并排序

發布時間:2021-07-02 16:59:25 來源:億速云 閱讀:319 作者:Leah 欄目:編程語言

C語言中怎么實現鏈表歸并排序,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

C語言中數據結構之鏈表歸并排序實例代碼

問題

       設有兩個無頭結點的單鏈表,頭指針分別為ha,hb,鏈中有數據域data,鏈域next,兩鏈表的數據都按遞增排序存放,現要求將hb表歸到ha表中,且歸并后ha仍遞增序,歸并中ha表中已有的數據若hb中也有,則hb中的數據不歸并到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("請按照升序序列輸入以下數字以建立鏈表La\n"); 
 printf("Please Input %d numbers:",N1); 
 createlist(&ha,N1); 
 printf("請按照升序序列輸入以下數字以建立鏈表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"); 
}

運行結果

C語言中怎么實現鏈表歸并排序

關于C語言中怎么實現鏈表歸并排序問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

闻喜县| 当雄县| 金川县| 巨野县| 清流县| 班戈县| 客服| 仙游县| 蓝山县| 荆州市| 潮州市| 上饶市| 宝山区| 抚松县| 阿尔山市| 白河县| 小金县| 盐城市| 锦州市| 诏安县| 洪洞县| 剑川县| 盐山县| 谷城县| 枣阳市| 吉木萨尔县| 江源县| 邓州市| 荔波县| 乌兰县| 左云县| 崇仁县| 铜山县| 阳西县| 云阳县| 都江堰市| 柯坪县| 萨迦县| 元谋县| 忻城县| 正阳县|