您的位置:首页 > 编程语言 > C语言/C++

K个有序链表共N个结点在O(NlgK)时间合并为一个新的有序链表头文件C语言

2011-04-15 22:59 471 查看
<<算法导论>>上的一道思考题,昨天实现的.用到了优先队列.链表我给实现成了队列的方式,比较习惯这样.呵呵.

在这个头文件中,定义了两个数据结构的数据类型和宏,这是第一次尝试.中途遇到过问题, 就是数据多次定义.用了#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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐