C语言中数据结构之链表归并排序实例代码

C语言中数据结构之链表归并排序实例代码,第1张

概述C语言中数据结构之链表归并排序实例代码问题      设有两个无头结点的单链表,头指针分别为ha,hb,链中有数据域data,链域next,两链表的数据都按递增排序存放,现要求将hb表归到h

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语言中数据结构之链表归并排序实例代码所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1245043.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存