
数据结构与算法
文章平均质量分 80
cqnuztq
这个作者很懒,什么都没留下…
展开
-
各种常见排序算法实现
将各种常见排序算法简单实现了一下,包括:1、简单插入排序;2、冒泡排序;3、简单选择排序;4、快速排序;5、希尔排序;6、堆排序;7、归并排序代码如下:#include#include#include#define LEN 10//初始化数组void init(int arr[], int len);//打印数组元素void print(int arr[], int le原创 2013-04-27 15:49:59 · 1525 阅读 · 0 评论 -
哈夫曼树的代码实现
定义哈夫曼树,又称最优树,是一类带权路径长度最短的树。树的带权路径长度,是树中所有叶子 节点的带权路径长度之和。通常记做WPL=W1*L1+W2*L2+...+Wn*Ln。例如:节点ABCDE的权值分别为:1,2,4,5,6。对于图1,WPL=4*3+2*3+1*3+5*3+6*1=42。对于图2,WPL=1*3+2*3+4*2+5*2+6*2=39。以上节点还可以列出其他的树原创 2013-05-13 10:20:28 · 32878 阅读 · 7 评论 -
C语言实现二叉树的递归遍历与非递归遍历
本文实现了对二叉树的递归遍历和非递归遍历,当然还包括了一些栈操作。 二叉树的遍历本质上其实就是入栈出栈的问题,递归算法简单且容易理解,但是效率始终是个问题。非递归算法可以清楚的知道每步实现的细节,但是乍一看不想递归算法那么好理解,各有各的好处吧。接下来根据下图讲讲树的遍历。 1、先序遍历:先序遍历是先输出根节点,再输出左子树,最后输出右子树。原创 2013-05-07 20:38:09 · 38881 阅读 · 8 评论 -
图的遍历
概述 遍历分为深度优先遍历和广度优先遍历,其对有向图和无向图都适用。深度优先,顾名思义,就是只要存在后续节点就一直往下走,直到没有后续节点或者后续节点已经被访问输出了;广度优先,就是节点一层一层的输出。举个例子, 上面的两个图,深度优先遍历的结果为ABCD;而广度优先遍历的结果为ABDC。 如何存储上面的图结构呢?可以采用数组表示法和邻接法。我这里只介绍数组原创 2013-05-21 16:48:53 · 22346 阅读 · 0 评论 -
二分查找
//二分查找/*递归算法int searchB1(int A[], int low, int high, int data);非递归算法int searchB2(int A[], int len, int data);*/#include#include#define Len 25//递归算法int searchB1(int A[], int low,原创 2012-12-07 11:18:48 · 479 阅读 · 0 评论 -
散列法解决1000个整数的搜索
/* *散列法解决1000个整数的搜索问题(为了方便显示结果,程序中将1000改为了100) */#include#include#include#include#define LEN 100typedef int dataType;typedef struct HNode{ dataType key; //关键字 int flag;原创 2012-12-30 11:52:27 · 699 阅读 · 0 评论 -
约瑟夫环
约瑟夫环:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。定义很简单,根据定义,采用循环链表来实现,有一点需要注意的是边界问题,把边界问题处理好了,程序就容易真正实现了。以下是代码://约瑟夫环#include#include原创 2013-05-02 16:59:14 · 1672 阅读 · 0 评论 -
改进的二分查找
//改进的二分查找//如果待查找的数组中存在相同元素,则返回相同元素第一个的下标/*递归算法int searchB1(int A[], int low, int high, int data);非递归算法int searchB2(int A[], int len, int data);*/#include#include#define Len 25//递原创 2012-12-07 11:31:37 · 938 阅读 · 0 评论 -
希尔排序C语言代码
/* *希尔排序 */#include#include#include#define LEN 10typedef int dataType;//初始化数组,赋值整数随机数void initArr(dataType arr[], int len);//希尔排序void shellSort(dataType arr[], int len);//交换两个数原创 2013-01-04 10:06:45 · 4844 阅读 · 1 评论 -
找出第k个最小的元素
/* *题目:编写程序,从数组x[0...n-1]中找出第k个最小的元素。算法可以对x中的元素进行排序 */#include#include#include#define LEN 10typedef int dataType;//初始化数组,数组元素为小于100的整数void intiArr(dataType A[], int len);//打印数组元素原创 2013-01-09 16:49:37 · 1192 阅读 · 0 评论 -
调用c语言库函数实现快速排序
//调用C语言的快速排序算法qsort();#include#include#include#define SIZE 100//从小到大排序int comp1(const void *x,const void *y){ return *(int *)x - *(int *)y;}//从大到小排序int comp2(const void *x原创 2012-12-07 11:05:01 · 1687 阅读 · 0 评论 -
只带两个参数的快速排序
/* *编写快速排序,函数qsort(),函数只带两个参数 */#include#include#include#define LEN 10typedef int dataType;//初始化数组,数组元素为小于100的整数void intiArr(dataType A[], int len);//打印数组元素void print(dataType A[原创 2013-01-11 16:16:50 · 1692 阅读 · 0 评论 -
用rand()实现bigrand()和randint(l,u)
/***C库函数rand()通常返回约15个随机位**使用该函数实现函数bigrand()和randint(l,u)**要求前者至少返回30个随机位**后者返回[l,u]范围内的一个随机整数*/#include#include#include#include//实现bigrand(),至少返回30个随机位int bigrand();//实现randi原创 2013-01-15 10:05:33 · 5515 阅读 · 5 评论