K个有序链表共N个结点在O(NlgK)时间合并为一个新的有序链表头文件C语言
2011-04-15 22:59
471 查看
<<算法导论>>上的一道思考题,昨天实现的.用到了优先队列.链表我给实现成了队列的方式,比较习惯这样.呵呵.
在这个头文件中,定义了两个数据结构的数据类型和宏,这是第一次尝试.中途遇到过问题, 就是数据多次定义.用了#ifdef这个宏,解决了这个问题.还有,优先队列中,存放的只是指向队列中结点的指针,这在以前对我来说简直就是一个很大很大的挑战.不过目前来看,我的水平有了长进.对于手动实现这个思考题,我感觉很好.凡是我能解决的问题,都把他变成代码.嗯.这样很好.接下来,还有5个文件.主文件的例程是很精妙的,一会就会看到了.
就说到这,开始贴了.
在这个头文件中,定义了两个数据结构的数据类型和宏,这是第一次尝试.中途遇到过问题, 就是数据多次定义.用了#ifdef这个宏,解决了这个问题.还有,优先队列中,存放的只是指向队列中结点的指针,这在以前对我来说简直就是一个很大很大的挑战.不过目前来看,我的水平有了长进.对于手动实现这个思考题,我感觉很好.凡是我能解决的问题,都把他变成代码.嗯.这样很好.接下来,还有5个文件.主文件的例程是很精妙的,一会就会看到了.
就说到这,开始贴了.
/* Head.h -- 通用头文件 */ #include <stdio.h> #include <stdlib.h> /* 队列宏定义与数据类型定义 */ #ifndef QUEUE_HAS_BEEN_DEFINED #define QUEUE_HAS_BEEN_DEFINED 1 #define FALSE (0) /* Without ';' ! */ #define TRUE (1) typedef int BOOL ; typedef int Item ; typedef struct queueNode { Item item ; struct queueNode * next ; } QueueNode ; typedef struct queue { QueueNode * front, * rear ; int current ; } * Queue ; #endif /* 最小堆宏定义与数据类型定义 */ #ifndef PRIORITYQUEUE_HAS_BEEN_DEFINED #define PRIORITYQUEUE_HAS_BEEN_DEFINED 1 #define FALSE (0) #define TRUE (1) #define PARENT(i) (i / 2) #define LEFT(i) (i * 2) #define RIGHT(i) (i * 2 + 1) typedef int BOOL ; typedef QueueNode * PriorityNode ; typedef struct priorityQueue { PriorityNode * heap ; int current, size ; } * PriorityQueue ; #endif
相关文章推荐
- K个有序链表共N个结点在O(NlgK)时间合并为一个新的有序链表实现文件C语言
- 链表的基本操作(创建,查找指定位置元素,删除指定元素,插入,倒置,去重,求集合的差,分别交换结点与交换结点值实现的冒泡排序,将两个有序链表合并成一个有序链表)c语言实现
- 将两个递增的有序链表合并为一个递增的有序链表(C语言编程实现)
- 将两个递增有序的单链表合并成一个递减有序的单链表,利用原结点空间
- 将k个有序链表合并成一个有序链表
- 在O(N lgK) 时间内合并K个有序链表
- 将两个递增有序的单链表合并成一个递减有序的单链表,利用原结点空间
- 将k个有序链表合并成一个有序链表
- 将两个递增的有序链表合并为一个递增的有序链表(C语言编程实现)
- 将两个非递减的有序链表合并为一个非递增的有序链表(C语言编程实现)
- 将两个非递减的有序链表合并为一个非递增的有序链表(C语言编程实现)
- O(N lgK) 时间内合并K个有序链表
- 将两个递增有序的带头结点的单链表A、B合并成为一个递增有序的带头结点的单链表
- 写程序。设ha和hb分别是两个带头结点的非递减有序单链表的头指针,试设计算法,将这两个有序链表合并成一个非递增有序的单链表。要求使用原链表空间,
- O(N lgK) 时间内合并K个有序链表
- O(N lgK) 时间内合并K个有序链表
- 请给出一个时间为O(nlgk)、用来将k个已排序链表的算法。此处n为所有输入链表中元素的总数。
- 合并k个有序链表,使其成为一个有序链表
- 已知两个链表head1 和head2 各自有序,请把它们合并成一个链表依然有序。(保留所有结点,即便大小相同)
- 已知两个链表head1 和head2 各自有序,请把它们合并成一个链表依然有序。(保留所有结点,即便大小相同)