一步一步写算法(之通用数据结构)

简介: 原文: 一步一步写算法(之通用数据结构) 【 声明:版权所有,欢迎转载,请勿用于商业用途。  联系信箱:feixiaoxing @163.com】     上一篇博客介绍了通用算法,那么有了这个基础我们可以继续分析通用数据结构了。
原文: 一步一步写算法(之通用数据结构)

【 声明:版权所有,欢迎转载,请勿用于商业用途。  联系信箱:feixiaoxing @163.com】


    上一篇博客介绍了通用算法,那么有了这个基础我们可以继续分析通用数据结构了。我们知道在c++里面,既有数据又有函数,所以一个class就能干很多事情。举一个简单的例子来说,我们可以编写一个数据的class计算类。

class calculate{
	int m;
	int n;
public:
	
	calculate():m(0),n(0) {}
	calculate(int a, int b):m(a),n(b) {}
	~calculate() {}

	int add() { return m+n; }
	int sub() { return m-n; }
	int mul() { return m *n;}
	int div() { return (n!=0) ?m /n : -1;}
};
    那么我们可不可以仿造这个思路,在常用的数据结构里面添加一些函数指针呢?至于为什么要这些函数指针,主要是因为我们设计的数据结构是通用的数据类型,那么其中必然有一些譬如compare的函数需要具体数据类型的参与。现在,我们定义一个循环队列,

typedef struct _QUEUE
{
	int start;
	int end;
	int length;
	int count;
	void** head;

	int (*compare)(void*, void*);
	void (*print)(void*);
	void* (*find)(void*, void*);
}QUEUE;
    那么QUEUE的创建函数、打印函数有什么区别吗?
QUEUE* create_new_queue(int length)
{
	QUEUE* pQueue;
	if(0 == length)
		return NULL;

	pQueue = (QUEUE*)malloc(sizeof(QUEUE));
	assert(NULL != pQueue);

	pQueue->head = (void**)malloc(sizeof(void*)* length);
	assert(NULL != pQueue->head);

	pQueue->start = 0;
	pQueue->end = 0;
	pQueue->count = 0;
	pQueue->length = length;
	
	pQueue->compare = compare;
	pQueue->find = find;
	pQueue->print = print;
	return pQueue;
}

    有了函数指针之后,整个数据结构显得有点复杂。但是我们没有办法,这是设计通用数据结构必须花的一个代价。那么有了这个数据结构之后,如何才能实现对整个队列的数据打印呢?朋友们可以自己写一下,再看看我写的是否正确。

void print_value_in_queue(QUEUE* pQueue)
{
	int index ;
	int end;
	if(NULL == pQueue || 0 == pQueue->count)
		return;

	end = pQueue->start;
	if(end < pQueue->end)
		end = pQueue->end + pQueue->length;

	for(index = pQueue->start; index < end; index ++){
		pQueue->print(pQueue->head[index % pQueue->length]);
	}

	return;
}


总结:

    (1)剩下还有compare、find两个子函数,朋友们可以想想怎么利用?

    (2)通用数据结构有很多好处,写的越熟,用得越好。


目录
相关文章
|
3天前
|
机器学习/深度学习 存储 算法
数据结构与算法 动态规划(启发式搜索、遗传算法、强化学习待完善)
数据结构与算法 动态规划(启发式搜索、遗传算法、强化学习待完善)
9 1
|
6天前
|
搜索推荐 C语言
【C语言/数据结构】排序(归并排序|计数排序|排序算法复杂度)
【C语言/数据结构】排序(归并排序|计数排序|排序算法复杂度)
11 0
|
6天前
|
存储 算法
Leetcode 30天高效刷数据结构和算法 Day1 两数之和 —— 无序数组
给定一个无序整数数组和目标值,找出数组中和为目标值的两个数的下标。要求不重复且可按任意顺序返回。示例:输入nums = [2,7,11,15], target = 9,输出[0,1]。暴力解法时间复杂度O(n²),优化解法利用哈希表实现,时间复杂度O(n)。
19 0
|
13天前
|
存储 机器学习/深度学习 算法
|
17天前
|
存储 算法 Python
程序设计的艺术:算法与数据结构的魅力
程序设计的艺术:算法与数据结构的魅力
8 0
|
17天前
|
存储 算法
数据结构开篇(普普通通浅浅聊数据结构)什么是数据结构 、什么是算法、重要性、如何学好数据结构呢
数据结构开篇(普普通通浅浅聊数据结构)什么是数据结构 、什么是算法、重要性、如何学好数据结构呢
|
25天前
|
存储 人工智能 算法
有哪些数据结构与算法是程序员必须要掌握的?——“数据结构与算法”
有哪些数据结构与算法是程序员必须要掌握的?——“数据结构与算法”
|
27天前
|
存储 算法 Serverless
数据结构期末复习(六)查找算法
数据结构期末复习(六)查找算法
11 0
|
27天前
|
存储 人工智能 算法
数据结构期末复习(1)数据结构和算法 线性表
数据结构期末复习(1)数据结构和算法 线性表
16 0
|
27天前
|
存储 算法 搜索推荐
浙江大学数据结构陈越 第一讲 数据结构和算法
浙江大学数据结构陈越 第一讲 数据结构和算法
49 1