- 浏览: 75010 次
- 性别:
- 来自: 北京
typedef int Item; typedef struct node { Item item; struct node *next; }Node,*List; void merge1(List la, List lb, List *lc) { Node *pa,*pb,*pc; pa=la->next; pb=lb->next; pc=(*lc)=la; while(pa && pb){ if(pa->item <= pb->item){ pc->next=pa; pc=pa; pa=pa->next; }else{ pc->next=pb; pc=pb; pb=pb->next; } } pc->next=pa?pa:pb; free(lb); } /*two non-headnode list merge*/ List __merge(List la, List lb) { List lc; if(la==NULL) return lb; if(lb==NULL) return la; if(la->item <= lb->item){ lc=la; lc->next=__merge(la->next,lb); }else{ lc=lb; lc->next=__merge(la,lb->next); } return lc; } List merge2(List la, List lb) { if(la->next==NULL){ free(la); return lb; } if(lb->next==NULL){ free(lb); return la; } List lc=malloc(sizeof(Node)); lc->next=__merge(la->next,lb->next); free(la); free(lb); return lc; }
发表评论
-
排序算法---计数排序
2011-11-27 14:57 600#include <stdio.h> vo ... -
排序算法---归并排序
2011-11-26 19:33 740#include <stdio.h> vo ... -
排序算法---交换排序(冒泡排序、快速排序)
2011-11-26 19:32 699#include <stdio.h> vo ... -
排序算法---选择排序(简单插入排序、堆排序)
2011-11-26 19:31 643#include <stdio.h> vo ... -
排序算法---插入排序(简单排序、shell排序)
2011-11-26 19:29 643#include <stdio.h> vo ... -
删除字符串中的特定字符和重复字符
2011-11-26 13:45 660#include <stdio.h> vo ... -
Linux编程-多线程、同步和互斥(转载)
2011-11-14 15:27 1203http://www.cnblogs.com/skynet/a ... -
寻找字符串中的最大数字子串
2011-09-22 17:17 1512#include <stdio.h> int f ... -
删除子字符串
2011-09-21 15:27 598#include <stdio.h> #incl ... -
c语言随机数
2011-09-18 17:15 682#include <stdio.h> #i ... -
链表逆序的递归/非递归算法
2011-09-01 23:37 1404/** *链表逆序的递归/非递归算法 */ # ... -
递归算法---字符串---全/部分组合和全排列
2011-08-30 23:01 1216#include <stdio.h> #i ... -
递归算法---0-1背包问题(面试宝典)
2011-08-28 21:11 1891/** *正整数n,m,从数列1、2、3、...、n中随 ... -
递归算法---字符串全组合(面试宝典)
2011-08-28 17:24 1249/** *求一字符串所有字串的组合 */ #i ... -
递归算法---求解多元一次方程
2011-08-28 10:38 1892/** * 求解x1+x2+x3+...+x10 = ... -
(zz)关于类的sizeof
2011-08-27 18:16 562http://blog.sina.com.cn/s/blog_ ... -
(zz)结构体字节对齐原则
2011-08-27 17:53 1574结构体默认的字节对齐一般满足三个准则: 结构体变量的首 ... -
list.h from linux-2.4
2011-08-25 09:59 601#ifndef _LIST_H_ #define _L ... -
The C Programming Lang (K&R) hash table
2011-08-25 09:52 929hash.h #include <stdio.h ... -
Josephus环
2011-08-23 11:20 695/*************************** ...
相关推荐
设ha和hb分别是指向两个带头结点的非递减(递增)有序单链表的头指针。要求设计一个算法,将这两个有序链表合并成一个非递增(递减)有序的单链表。要求结果链表仍使用原来两个链表的存储空间,不另外占用其它存储...
设ha和hb分别是两个带头结点的非递减有序单链表的表头指针,试设计一个算法,将这两个有序链表合并成一个非递减有序的单链表。要求结果链表仍使用原来两个链表的存储空间,不另外占用其他的存储空间。表中允许有重复...
- **合并链表**:将两个已排序的链表合并成一个有序链表。 在实现这些功能时,理解和熟练掌握链表的特性至关重要,这将帮助你编写出高效且健壮的代码。同时,良好的编程习惯,如适当的注释和错误处理,也是提升代码...
在解决问题的过程中,我们需要初始化这三个指针,`pa` 指向A链表的第二个节点(因为题目要求带头结点),`pb` 指向B链表的第二个节点,而`pc` 初始指向链表A的头结点。 接下来,我们使用一个`while`循环来遍历两个...
本题要求实现一个函数,将两个...L1和L2是给定的带头结点的单链表,其结点存储的数据是递增有序的;函数Merge要将L1和L2合并为一个非递减的整数序列。应直接使用原序列中的结点,返回归并后的带头结点的链表头指针。
2、掌握单链表的插入、删除、查找、求表长以及有序单链表的合并算法的实现 二、实现内容 1、单链表基本操作的实现 在带头结点的单链表h中第i个数据元素之前插入一个数据元素x ,首先需要在单链表中寻找到第i-1个结点...
下面是一个使用单链表实现链表合并的实例: ```cpp void Union(LinkList &La, LinkList &Lb, LinkList &Lc) { LinkList pa, pb, pc; pa = La->next; pb = Lb->next; Lc = La; pc = Lc; while (pa && pb) { if...
在这个场景中,我们关注的是如何使用单链表来实现一元多项式的乘法操作。一元多项式是由变量(通常为x)的幂次和系数组成的数学表达式,如3x^2 + 5x - 2。在编程中,我们通常需要处理多项式的各种运算,包括加、减、...
6. **合并链表**:首先创建两个非递减有序链表,然后合并成一个。合并时,比较两个链表的头部节点,将值较小的节点作为新链表的头部,然后继续比较下一个节点,直到一个链表为空,将另一个链表的剩余部分追加到新...
给定一个按整数值递增排序的带头结点的动态单链表L,我们需要在链表中插入值为x的结点,保持链表的有序性。为了实现这一操作,我们可以遍历链表,找到适当的位置将新结点插入。以下是一个简单的实现: ```java ...
// 利用数组初始化带头结点的单链表构造函数 ~LinkList(); int length(); // 求单链表表长 T get(int i); // 获取单链表中第i个结点的值 int locate(T temp); // 定位单链表中某个值的位置 void insert(int i,...
1.随机产生或键盘输入一组元素,建立一个带头结点的单向链表(无序)。 2.遍历单向链表。 3.把单向链表中元素逆置(不允许申请新的结点空间)。 4.在单向链表中删除所有的偶数元素结点。 5.编写在非递减...
5. **插入操作的时间复杂度**:在一个有序单链表中插入一个新结点,需要遍历链表找到适当的位置,时间复杂度为O(n)。 6. **队列操作**:在不带头结点的单链表中进行删除操作,如果队头结点即为待删除结点,那么队头...
Create_hsllist函数用于创建带头结点的单链表,Union函数用于求两个链表的并集,Intersection函数用于求两个链表的交集。 本文讨论了链表操作的三种算法:编写算法依次访问无头结点的单循环链表、判断带头结点的单...
#### 六、归并两个有序单链表 对于两个递增有序的单链表,可以通过比较当前结点的数据值来进行归并。具体过程包括: 1. 创建一个新的链表来保存合并后的结果。 2. 对于两个链表的当前结点进行比较,较小者添加到新...
(一)单链表的定义及基本操作 (1)用带表头的链表存放输入的数据,每读入一个数,按升序顺序插入到链表中,链表中允许两个结点有相同...请写出并在计算机上实现将这两个链表合并为一个带头结点的有序循环链表的算法。
问题(5)中,有序单链表插入新节点并保持有序需要遍历链表,所以时间复杂度为 O(n);问题(6)中,删除操作可能涉及修改队头或队尾指针,具体取决于要删除哪个节点;问题(7)和(10)涉及插入和删除操作的具体实现...
3. **将两个递增有序单链表A、B归并为一个递减有序单链表.cpp**:这个练习涉及到两个已排序链表的合并,但目标是生成一个降序链表。这需要比较两个链表的节点,每次选取较大的节点添加到结果链表中。 4. **删除...
对于不带头结点的单链表或带头结点的单循环链表,逆置过程类似,但需要特别处理头结点的情况。 3. **有序顺序表的合并**: - 合并两个有序的顺序表通常采用比较元素大小的方式,从两个表的头部开始,将较小的元素...
1. 链表的创建与有序表的合并:通过带头结点的链表表示有序表,输入数据后,使用OrderInsert进行插入,OrderMerge进行合并。 2. 升幂多项式的处理:输入多项式的系数和指数,构造升幂多项式,然后进行相加操作。 四...