
数据结构与算法
dreamcs
lnsjc321@126.com
展开
-
排序
冒泡排序(bubble sort):每一次比较,将最大值放在最后,再次比较时,比较范围缩小一位插入排序法(insert sort):(1)首先比较头两个元素的大小,并排序(2)将下一元素插入排好序的数组中,从最后一个比较,一边比较,一边插入,直至比它小的而停止。(3) 重复(2)快速排序法(quick sort):(1)选择一个分界值,大于等于分界值的元素集中到数组的某一部分,小于分界值的原创 2009-02-11 23:32:00 · 615 阅读 · 0 评论 -
实现算法导论第三版中红黑树插入算法
#include #include #include #include #include enum RBNODE_COLOR{ RBNODE_COLOR_RED = 0, RBNODE_COLOR_BLACK};struct RBNode{ RBNode * p; RBNode * left; RBNode * right; int key; enum原创 2017-05-15 10:25:05 · 760 阅读 · 0 评论 -
实现算法导论第三版中的MergeSort
去掉了原算法中的无穷大值。代码如下:#include #include #include #include void mergeSort(char arr[], int p, int r);int main(){ char arr[]={'5', '2', '4', '7', '1', '8', '3', '2', '6'}; int count = sizeof(a原创 2017-05-05 19:58:57 · 717 阅读 · 0 评论 -
实现算法导论第三版中的BTree
只实现了插入、查找算法,未实现删除算法。#include #include #include #define BTreeKey char#define T 2 //minmum degree#define TRUE 1#define FALSE 0struct BTree{struct BTreeNode * root;};struct BTreeNode{in原创 2016-09-09 11:28:22 · 886 阅读 · 0 评论 -
KMP算法学习笔记--按定义计算next数组(个人参考)
具体理论,请看《大话数据结构》、《数据结构(C语言版)》严蔚敏。此文为此算法的补充说明。1.直接的子串搜索算法//函数功能:返回子串T在主串S中第一次被发现的位置//返回值:如果被发现 返回子串首字母在S中的位置 否则返回-1//注意:子串T和S从索引1开始int FindFirstPosition(const std::string & S, const std::s原创 2013-07-07 18:11:00 · 3016 阅读 · 0 评论 -
图的广度优先遍历现实
算法原理参见《算法导论》//MatrixGraph.h#pragma once#include struct MatrixGraph{ enum{MAXVEX=100}; static const int INFINITY; char vexs[MAXVEX]; //顶点类型 char int arc[MAXVEX][MAXVEX]; //邻接矩阵 in原创 2013-07-06 17:39:08 · 744 阅读 · 0 评论 -
图的深度遍历
图的深度遍历(Depth First Serch),即DFS。采用递归方法。如果当前顶点有一下层节点则没有被访问过,则访问,否则回溯。下面动画,展示了DFS算法的具体过程。原创 2013-07-06 15:30:36 · 918 阅读 · 0 评论 -
最长递增子序列长度问题
这个问题源于线性代数中的问题。问题描述:设一个整数序列为A,A={a0,a1,a2,......, an}。其中任意一个递增子序列为Sk,Sk={ai,....,aj,......}, 其中ai,aj为Ak序列中任意两个元素且i。ai。A的所有递增子序列集合为S(Sk),找出原创 2011-08-24 11:06:35 · 1080 阅读 · 2 评论 -
点状四叉树
1.四叉树定义定义:除叶子节点外,每个节点都有四个子结点。每个节点每有一个对应的矩形区域。如图所示。 2.四叉树节点类由上图编写四叉树节点类// 四叉树节点类型结构c原创 2011-09-07 13:13:30 · 2988 阅读 · 0 评论 -
20世纪十大算法
1946 蒙特卡洛方法 1947 单纯形法 1950 Krylov子空间迭代法1951 矩阵计算的分解方法 1957 优化的Fortran编译器 1959-61 计算矩阵特征值的QR算法 1962 快速排序算法 1965 快速傅立叶变换 1977 整数关系探测算法 1987 快速多极算法转载 2010-12-15 13:13:00 · 1082 阅读 · 0 评论 -
链地址法实现一个很简单的hash表
hash表 链地址法原创 2010-07-25 14:27:00 · 7085 阅读 · 0 评论 -
查找算法
二分法查找#include using namespace std;void insert_sort(int a[], int len);int search_binary(int arr[], int key, int len);int main(){ int intarr[6] = {3,6,2,1,23,9}; insert_sort(intarr,6)原创 2009-02-14 09:53:00 · 778 阅读 · 0 评论 -
递归常见问题
阶乘函数#include using namespace std;//阶乘函数 先搞懂其函数int factorial(int n){ if( 1==n) return 1; return n*factorial(n-1);}int main() { cout }斐波那契数列#include using namesp原创 2009-02-11 09:27:00 · 704 阅读 · 0 评论 -
单链表 解决josephus问题
// 此代码仅供个人学习之用SingleLinkedList// SingleLinkedList.h#ifndef SINGLELINKEDLIST_H_H#define SINGLELINKEDLIST_H_Htemplate class ListNode;template class List{public: List() : _first(原创 2009-02-11 09:15:00 · 1891 阅读 · 0 评论 -
二叉树及二叉搜索树
第十章 二叉树学习目的学习广义树的定义,熟悉树的有关术语理解树是一种非线性的数据结构理解很多有关树的操作都涉及到二叉树,所谓二叉树是指每个父结点最多包含两个子结点掌握一棵n个结点的完全二叉树的高度是 int(log2n),这样的对是沿着从根开始的路径来寻找数据的理解树的退化,面成为像链表一样的高效的存储结构学习二叉树的实现,使用tnode对象来保存数据以及指向左转载 2009-02-11 19:21:00 · 3226 阅读 · 0 评论 -
实现算法导论第三版中的二叉搜索树
使用C++实现。为了方便调试,加了一个输出函数。此函数,水平遍历树节点。#include #include #include #include #include struct TNode{ TNode * p; //parent node TNode * left; //left child node TNode * right; //right child node i原创 2017-05-09 17:31:02 · 437 阅读 · 0 评论