SDUTOJ 2119 数据结构实验之链表四:有序链表的归并
2014-03-06 19:30
369 查看
题目描述
分别输入两个有序的整数序列(分别包含M和N个数据),建立两个有序的单链表,将这两个有序单链表合并成为一个大的有序单链表,并依次输出合并后的单链表数据。输入
第一行输入M与N的值;第二行依次输入M个有序的整数;
第三行依次输入N个有序的整数。
输出
输出合并后的单链表所包含的M+N个有序的整数。示例输入
6 5 1 23 26 45 66 99 14 21 28 50 100
示例输出
1 14 21 23 26 28 45 50 66 99 100
提示
不得使用数组!这个题如果用数组做,就算是用冒泡再排一下序都不会超时吧,但是这个题要求用链表,我就用链表做了一下都知道调试指针是很费劲的事情,确实是这样,我做的这个题用了大量的指针,参考的同学不要被吓到.....(本解题方法中head节点中没有数据,数据从head->next节点中开始存储,这样有利于链表的插入排序,如果你还不知道链表的插入排序,参考http://blog.csdn.net/codeblf2/article/details/18416513)...
#include <stdio.h> #include <stdlib.h> #include <string.h> struct linshi { int data; struct linshi *next;//创建链表所用的结构体 }; struct linshi *head1,*head2,*p,*q,*r,*s;//定义全局变量,可以省略函数间传递指针这个麻烦的过/ //程 void set(int); //函数声明 void chuli(void); void set(int k)//创建链表的过程就不多解释了.. { int a; while(k--) { scanf("%d",&a); q=(struct linshi *)malloc(sizeof(struct linshi)*1); q->data=a; p->next=q; q->next=NULL; p=p->next; } return ; } void chuli(void) { r=head2->next;//用r来遍历以head2为首的链表 while(r!=NULL) { s=(struct linshi *)malloc(sizeof(struct linshi)*1);//开辟新的链结,以便于添加 s->data=r->data;//我已开始就死在了这里,一开始我的语句是s=r;但怎么都不对,后来想了想,s=r会对r进行操作,假设s添加在链表的最后,那么r->next必定为空,一定会出错的。 s->next=NULL; p=head1->next;//每次p必须从head1->next开始,否则的话就不准了 q=head1;//q记录p的上一个节点,以便于插入新的链结 while(p!=NULL)//下面这些就是链表插入排序了,不多解释,不会的去看http://blog.csdn.net/codeblf2/article/details/18416513 { if(s->data<p->data) { q->next=s; s->next=p; break; } q=p; p=p->next; } if(p==NULL) { s->next=NULL; q->next=s; } r=r->next; } p=head1->next;//下面这些插入排序中也有... while(p!=NULL) { printf("%d",p->data); if(p->next!=NULL) { printf(" "); } p=p->next; } printf("\n"); } int main() { int m=0,n=0; head1=(struct linshi *)malloc(sizeof(struct linshi)*1); head1->next=NULL; head2=(struct linshi *)malloc(sizeof(struct linshi)*1); head2->next=NULL; p=(struct linshi *)malloc(sizeof(struct linshi)*1); q=(struct linshi *)malloc(sizeof(struct linshi)*1); r=(struct linshi *)malloc(sizeof(struct linshi)*1);//给上面定义的指针开内存 scanf("%d%d",&m,&n); p=head1;//更新p指针 set(m);//开始建立第一个链表 p=head2; set(n);//建立第二个链表,因为创建方法一样,所以我就写成了一个函数.... chuli(); return 0; }
相关文章推荐
- 数据结构学习笔记
- 数据结构:栈的链式实现(C语言描述)
- 牛人整理分享的面试知识:操作系统、计算机网络、设计模式、Linux编程,数据结构总结 转载
- 数据结构基础(4)————next数组的理解
- 基于节点列表的项集表示框架的频繁模式(项集)挖掘研究进展
- BZOJ 3224: Tyvj 1728 普通平衡树
- 数据结构之优先级队列、堆及堆排序
- 数据结构之优先级队列、堆及堆排序
- 数据结构之哈希表的java实现
- 数据结构之哈希表的java实现
- 数据结构之哈希表的java实现
- 快速排序 - 数据结构和算法96
- CUGB专题训练之数据结构:A - Balanced Lineup(线段树单点或RMQ)
- 二叉树中节点的最大距离
- 记录-数据结构第一章上机练习题
- 数据结构的基本概念 单链表的应用
- 关于数据结构的详细介绍,自己总结的 ,勿喷。谢谢
- 数据结构--线段树--lazy延迟操作
- 数据结构--线段树--lazy延迟操作
- 数据结构--线段树--基本操作