`

两个有序数列的合并(链表的应用)(4)

 
阅读更多

//两个有序数列的合并
#include<stdio.h>
#include<stdlib.h>
typedef struct No{
int date;
No* next;
} Node;
Node *creat()
{
Node* p=NULL,*head=NULL,*tail=NULL;
int x;
head=(Node*)malloc(sizeof(Node));
head->date=-100;
head->next=NULL;
tail=head;
scanf("%d",&x);
while(x!=-1){
p=(Node*)malloc(sizeof(Node));
p->date=x;
p->next=NULL;
tail->next=p;
tail=p;
scanf("%d",&x);
}
return head;
}
void print(Node *head)
{
Node *p=head->next;
while(p!=NULL){
printf(p->next==NULL?"%d/n":"%d ",p->date);
p=p->next;
}
}
void insert(Node *head,int x)
{
Node *p=head,*q=NULL;
q=(Node*)malloc(sizeof(Node));
q->date=x;
q->next=NULL;
while(p->next!=NULL&&p->next->date<x){/*如果p->next->date<x放前面就不行,
因为访问p->next->date是非法的*/
p=p->next;
}
//printf("p->next=%d x=%d/n",p->next->date,x);这句也是非法的
if(p->next==NULL){
p->next=q;
}
else{
q->next=p->next;
p->next=q;
}
}
Node* sort(Node *head1,Node *head2)
{
Node *p1=head1->next,*p2=head2;
while(p1!=NULL){
insert(p2,p1->date);
p1=p1->next;
}
return p2;
}
main()
{
Node *head1,*head2,*head;
head1=creat();print(head1);
head2=creat();print(head2);
head=sort(head1,head2);
print(head);
return 0;
}

分享到:
评论

相关推荐

    算法题+斐波那契数列,两数之和,最长公共前缀+合并两个有序链表,寻找旋转排序数组中的最小值,最大子数组和,爬楼梯习题和解析

    算法题是计算机科学领域中用来测试和提升编程技能的重要...以下是一些常见的算法题及其解析:斐波那契数列,两数之和,最长公共前缀+合并两个有序链表,寻找旋转排序数组中的最小值,最大子数组和,爬楼梯习题和解析

    数据结构和算法必知必会的50个代码实现

    实现两个有序的链表合并为一个有序链表 实现求链表的中间结点 栈 用数组实现一个顺序栈 用链表实现一个链式栈 编程模拟实现一个浏览器的前进、后退功能 队列 用数组实现一个顺序队列 用链表实现一个链式队列 实现一...

    数据结构和算法必知必会的50个代码实现源码.zip

    支持增删操作实现单链表反转实现两个有序的链表合并为一个有序链表实现求链表的中间结点栈用数组实现一个顺序栈用链表实现一个链式栈编程模拟实现一个浏览器的前进、后退功能队列用数组实现一个顺序队列用链表实现一...

    数据结构和算法必知必会的50个代码实现.zip

    实现两个有序的链表合并为一个有序链表 实现求链表的中间结点 栈 用数组实现一个顺序栈 用链表实现一个链式栈 编程模拟实现一个浏览器的前进、后退功能 队列 用数组实现一个顺序队列 用链表实现一个链式队列 实现一...

    基于Java的算法与数据结构练习项目.zip

    链表合并合并两个有序链表。 链表检测与删除检测链表中的环,删除链表中的特定元素。 3. 动态规划 最长递增子序列找到数组中最长的递增子序列。 背包问题解决01背包问题。 斐波那契数列使用动态规划求解...

    数据结构和算法问题及实现

    * 实现两个有序的链表合并为一个有序链表 * 实现求链表的中间结点 ## 栈 * 用数组实现一个顺序栈 * 用链表实现一个链式栈 * 编程模拟实现一个浏览器的前进、后退功能 ## 队列 * 用数组实现一个顺序队列 * 用链表...

    50个必会的数据结构及算法实现源码

    问题:实现两个有序的链表合并为一个有序链表 问题:实现求链表的中间结点 栈 问题:用数组实现一个顺序栈 问题:用链表实现一个链式栈 队列 问题:用数组实现一个顺序队列 问题:用链表实现一个链式队列 ...

    数据结构答案

    - (2)非递减有序链表合并:将两个非递减有序链表合并成一个非递增有序链表,同样通过比较元素来决定插入位置,但这里允许重复元素。时间复杂度也为O(n)。 - (3)链表交集:给定两个递增排列的链表,求它们的交集...

    数列排序.zip

    5. 归并排序:同样基于分治思想,将数列分为两半分别排序,然后合并两个有序子序列。归并排序稳定且适用于大数据量,但需要额外的存储空间。 6. 堆排序:利用堆这种数据结构,可以快速找到最大或最小元素,并保持堆...

    算法:数据结构和算法必知必会的50个代码实现

    实现两个有序的链表合并为一个有序链表 实现求链表的中间结点 栈 用层叠实现一个顺序栈 用链表实现一个链式栈 编程模拟实现一个浏览器的前进,后退功能 阴离子 用重叠实现一个顺序数值 用链表实现一个链式骨架 实现...

    判断链表是否为回文链表leetcode-Algorithms:Coding_Interviews和Leetcode

    合并两个递增排序的链表 连续子序列的最大和 替换空格 二维数组中的查找 从尾到头打印链表 重建二叉树(用前序和中序构建) 从上到下打印二叉树(层序遍历) 用两个栈实现队列 斐波那契数列 旋转数组的最小数字 矩阵中...

    java算法大全源码包.zip

    若将两个有序表合并成一个有序表,称为二路归并。时间复杂度O(n log n) 。 (6)堆排序 利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。可以利用数组的特点快速定位指定索引的元素。

    数据结构与算法题解

    - 合并两个有序链表。 - **MergekSortedLists** - 合并多个有序链表。 - **ReorderList** - 重排链表。 - **CopyListwithRandomPointer** - 复制含有随机指针的链表。 - **SortList** - 排序链表。 - **...

    2008年程序员考试模拟试题--下午卷

    合并有序链表的基本思想是保持链表的有序性,通常采用的方法是双指针法,从两个链表的头节点开始比较,将较小的节点插入新链表,直到其中一个链表为空,然后将另一个链表接在新链表的末尾。 2. **插入排序**: ...

    Java面试 Java超级经典100问题 Java高级开发工程师必备 Java面试宝典

    合并两个有序链表18.判断二叉树A中是否包含子树B.19.二叉树的镜像20.顺时针打印矩阵、21.包含min函数的栈.22.判断一个栈是否是另一个栈的弹出序列23.层序遍历二叉树。24.后序遍历二叉搜索树。25.二叉树中和为某值的...

    c 数据结构 面试题 算法 面试题

    6. 合并两个已排序的链表:将两个有序链表合并成一个新的有序链表。 二、栈 栈是一种后进先出(LIFO)的数据结构。在C语言中,可以通过动态内存分配和指针来实现栈。常见的栈操作有: 1. 入栈(push):在栈顶添加...

Global site tag (gtag.js) - Google Analytics