数据结构
文章平均质量分 77
请叫我汪海
专注前端开发的iOS程序员,喜欢Debian和Python,以及各种有趣的东西,梦想成为一位独立游戏开发者,做自己喜欢的游戏。
展开
-
[C++]数据结构实验03:链式结构线性表的基本操作
/**********************************************************************************************************************************//* 实验三:线性表操作/* 1.创建线性表类。线性表的存储结构使用链表。/* 2.完成表首插入元素、删除指定元素、搜索表中是否有原创 2012-11-21 21:25:28 · 3003 阅读 · 0 评论 -
[C++]数据结构课程设计:迷宫老鼠1.0
/************************************************************************* 版权所有: 汪海的实验室 作者 : 汪海洋 日期 : 2013-03-11 描述 : 数据结构课程设计,使用堆栈解原创 2013-03-11 13:38:19 · 7855 阅读 · 8 评论 -
[C++]数据结构:公式化描述的队列Queue类
//公示化描述的队列类Queue#include using namespace std;//FIIFO对象template class Queue{ public: Queue(int MaxQueueSize=10); ~Queue(){delete []queue;} bool IsEmpty()const{return front==rear;} bool I原创 2012-11-28 20:11:28 · 1752 阅读 · 0 评论 -
[C++]数据结构:最大堆MaxHeap的创建与使用
优先队列是一种非常常见的数据结构,而最大最小树又是其中最具代表性的一种优先队列。在此详细的讲述一下最大树的插入、删除、初始化等基本操作的思路。在文章最后附上一段Demo源码提供测试,使用C++语言实现了最大堆。首先先介绍一下最大树的概念。最大树是每个节点的值都要大于或等于其子节点的值的树。而最大堆就是最大的完全二叉树。因为最大堆是完全二叉树,所以拥有n个元素的堆的高原创 2012-12-08 18:37:46 · 9091 阅读 · 0 评论 -
[C++]数据结构:基于二叉树类的二叉搜索树BSTree类的创建与使用
//链表描述二叉树的创建与遍历#include using namespace std;/**********************************//*以下内容是一个队列数据结构的定义*//*队列引入是为实现二叉树的逐层遍历*//**********************************/template class Node{ public:原创 2012-12-14 23:50:24 · 1865 阅读 · 0 评论 -
[C++]数据结构:二叉搜索树的结构特点,插入、删除算法
先来介绍一下,一棵非空的二叉搜索树满足以下特征:1.每个结点都有一个作为搜索依据的关键码,所有结点的关键码互不相同。2.左子树(如果存在)上的所有结点的关键码均小于根结点的关键码。3.右子树(如果存在)上的所有结点的关键码均大于根结点的关键码。4.根结点的左右子树也都是二叉搜索树。比如下图就是一棵二叉搜索树:下面来详细介绍一下二叉搜索树的相关操作。原创 2012-12-24 22:39:26 · 3211 阅读 · 0 评论 -
[C++]数据结构:平衡的二叉搜索树之AVL树的结构特点与基础插入删除操作
在向大家介绍AVL树之前,我们先来看一下二叉搜索树的缺点。BST的高度受输入顺序影响会有比较大的波动。最好的高度为O(log n):最坏的高度为O(n):这样不稳定的结构不是我们想要的数据结构,我们应当追求一种比较稳定比较平衡的结构。从上图的分析可以看出,并不是这种结构本身存在问题,而是我们在构造这棵二叉搜索树的时候如果稍加控制即可把高度控制在O(log n原创 2012-12-25 18:06:21 · 2888 阅读 · 2 评论 -
[C++]数据结构:排序算法Part2----快速排序、归并排序、箱子排序、基数排序
接上篇博文:[C++]数据结构:排序算法Part1----冒泡排序、选择排序、插入排序、堆排序5.快速排序:快速排序的核心思想是分而治之算法。所谓的分而治之,简单来说就是把复杂问题分成几个子问题,然后分别解决小问题,最后再将解组合起来,得到原问题的解。那么分而治之如何应用到排序算法中呢?在快速排序中,n个元素被分成了了三段。左端left,右端right,和中段m原创 2013-01-05 00:50:14 · 3771 阅读 · 0 评论 -
[C++]数据结构:公式化描述的堆栈Stack的简单创建与使用
//公式化描述的堆栈类Stack #include using namespace std; template class Stack{ public: Stack(int MaxStackSize=10); ~Stack(){delete[]stack;} bool IsEmpty()const{return top==-1;} bool IsFull()const原创 2012-11-23 21:43:00 · 1936 阅读 · 0 评论 -
[C++]数据结构:基于链表结构的Chain类和遍历器ChainIterator类
//基于链表的类Chain #include #includeusing namespace std; //节点类,定义了每个节点的存储类型和指针名称template class ChainNode{ public: T data; ChainNode *link; }; //链表类,封装了链表操作的相应方法temp原创 2012-11-22 21:43:48 · 3425 阅读 · 0 评论 -
[C++]数据结构:公式化描述的线性表LinearList的创建与使用
//基于公式的类LinearList#include #include #include using namespace std; templateclass LinearList{ public: LinearList(int MaxListSize=10); //构造函数,默认最大值为10 ~LinearList(){delete []element;}原创 2012-11-21 20:56:20 · 2641 阅读 · 2 评论 -
[C++]数据结构:使用最小堆创建霍夫曼编码树HuffmanTree的过程
二话不多说,首先我们先来看个霍夫曼编码树的栗子。假设我们想要压缩的是这个字符串:“beep boop beer!”首先统计它们的出现次数,得到下面这张表:然后根据出现的频率依次排序,放在一个优先队列Priority Queue中:接下来的任务就是把这个Priority Queue转换成二叉树。我们始终从Priority Queue的head取两个原创 2012-12-16 13:01:06 · 7608 阅读 · 4 评论 -
[C++]数据结构:排序算法Part1----冒泡排序、选择排序、插入排序、堆排序
1.冒泡排序:正所谓人如其名,冒泡排序正是使用了“冒泡”的方法对元素进行了排序。它的算法思想就是在每次遍历的时候从头到尾比较相邻的两个元素大小,将较小的元素“冒”到前面来,把最大的元素移向队尾,使得元素变得有序。我们把已经排好序的区域称为有序区,相对应的便是没排好顺序的无序区了。那么冒泡排序大致可以分为两类,一类是每次遍历的时候将较小的元素“冒”到前面来,把最小的元素移向队首,使得原创 2013-01-03 22:33:54 · 4397 阅读 · 3 评论 -
[C++]四种方式求解最大子序列求和问题
问题给定整数: A1,A2,…,An,求∑jk=iAk 的最大值(为方便起见,如果所有的整数均为负数,则最大子序列和为0)例如对于输入:-2,11,-4,13,-5,-2,答案为20,即从A2到A4分析这个问题之所以有意思,是因为存在很多求解它的算法。原创 2014-06-05 16:35:12 · 8252 阅读 · 3 评论 -
[C++]数据结构:线性表的公式化描述和链式描述的结构特点与基本操作
线性表的公式化描述的基本特点:关于线性表的概念,可以简单的理解成按照一定顺序排列的列表。但是这里的顺序并不是指元素内容的有序,而是指元素的位置的有序。就好像是有一个队伍,不一定按照高矮胖瘦进行排列,但是在队伍中每个人按照前后站着谁,都有自己相对固定的位置。再介绍一下公式化描述的概念。公式化描述是采用数组来表示一个对象的实例,数组中的每个位置为单元或者节点,每个数组单元需要足够大以便能容纳数原创 2013-01-05 16:23:14 · 3614 阅读 · 0 评论 -
[C++]数据结构:散列表的相关概念、两个主要问题以及散列查找成功(不成功)的平均查找长度
首先先看一下散列的定义:散列:用一个散列函数把关键字映射到散列表中的特定位置。在理想的情况下,如果元素e的关键字k,散列函数为f,那么e在散列表中的位置就是f(k)。这种转换是一种压缩映射,也就是说,散列值的空间通常远小于输入的空间,从函数的定义我们可以知道,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。简单的说散列函数就是一种将任意长度的消息压缩到某一原创 2013-01-01 03:28:37 · 4340 阅读 · 4 评论 -
[C++]数据结构:算法分析之八皇后问题
/************************************************************************//* 八皇后问题,是一个古老而著名的问题,是回溯算法的典型例题。/* 该问题是十九世纪著名的数学家高斯1850年提出:/* 在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,/* 即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少原创 2012-11-28 22:43:06 · 2486 阅读 · 1 评论 -
[C++]数据结构实验05:二叉树的遍历
/*************************************************************//* 三、二叉树的遍历/* 1.输入一个完全二叉树的层次遍历字符串,创建这个二叉树,/* 输出这个二叉树的前序遍历字符串、中序遍历字符串、/* 后序遍历字符串、结点数目、二叉树高度。/* 2.输入二叉树前序序列和中序序列(各元素各不相同),/* 创建这个二叉树,原创 2012-12-01 15:22:12 · 2763 阅读 · 0 评论 -
[C++]数据结构:从m叉搜索树谈到B-树的结构特点、阶数、高度、元素个数之间的关系
在介绍一下B-树之前,我们先来介绍一下m叉搜索树的概念。m叉搜索树必须满足以下结构特点:1)在对应的扩充搜索树(用外部节点代替零指针),每个内部节点最多可以有m个子女即m-1个元素。2)每个含有p个元素的节点有p+1个子女。3)考察含有p个元素的任意节点,设k1……kp是这些元素的关键值。这些元素按顺序排列,即k123……p。设c0……cp是节点的p+1个孩子。原创 2012-12-30 00:58:35 · 5704 阅读 · 1 评论 -
[C++]数据结构实验04:使用堆栈进行简单的四则运算
/************************************************************************************//* 实验04:堆栈的应用/* 1.输入一个数学表达式(假定表达式输入格式合法),计算表达式结果并输出。/* 2.数学表达式由单个数字和运算符“+”、“-”、“*”、“/”、“(、) ”构成,/* 例如 2 + 3原创 2012-11-24 10:56:35 · 3797 阅读 · 0 评论 -
[C++]数据结构:链表形式的堆栈LinkedStack类
//自定义链表形式的堆栈#includeusing namespace std;templateclass Node{ public: T data; Node *link; };templateclass LinkedStack{ public: LinkedStack(){top=0;} ~LinkedStack(); bool IsEmpty()co原创 2012-11-24 02:11:57 · 2051 阅读 · 0 评论 -
[Java]数据结构课程设计:迷宫老鼠2.0(完整项目代码与设计报告)
包含功能:1.自定义迷宫大小2.使用图的深度遍历随机生成迷宫3.用户使用鼠标绘制自定义迷宫4.单步求解迷宫5.一键求解迷宫6.声音特效完整项目下载:http://download.csdn.net/detail/wxg694175346/5179044程序截图:一、系统开发平台原创 2013-03-25 14:51:26 · 11789 阅读 · 9 评论 -
[C++]数据结构:链表二叉树的创建与四种遍历方式
//链表描述二叉树的创建与遍历#include using namespace std;/**********************************//*以下内容是一个队列数据结构的定义*//*队列引入是为实现二叉树的逐层遍历*//**********************************/template class Node{ public:原创 2012-11-29 18:08:55 · 2405 阅读 · 0 评论 -
[C++]数据结构:有序链表SortedChain的基本实现与操作
#includeusing namespace std;templateclass SortedChainNode{ public: E data; SortedChainNode *link;};templateclass SortedChain{ public: SortedChain(){first = 0;} ~SortedC原创 2012-12-03 18:53:19 · 1773 阅读 · 0 评论 -
[C++]数据结构:散列表HashTable的实现与简单应用
#include using namespace std;templateclass HashTable{ public: HashTable(int divisor=11); ~HashTable(){delete[]ht;delete[]empty;} bool Search(const K&k,E&e)const; Hash原创 2012-12-05 18:02:01 · 2469 阅读 · 1 评论 -
[C++]数据结构实验02:冒泡、插入、基数三种排序算法
/**********************************************************************************************//* 实验二:排序算法/* 1.输入2-10个不为零的正整数,遇到0,代表输入结束。/* 2.数字选择排序方法,1-冒泡排序,2-插入排序,3-基数排序。/* 3.使用所选排序方法的排序,结果输出所用原创 2012-11-21 21:24:48 · 1855 阅读 · 0 评论 -
[C++]数据结构实验01:使用递归实现简单的全排列
/*****************************************************************************//* 实验一:递归练习/* 1、 输入2-10个大于0的正整数,如果输入0作为结束。/* 2、 输出这几个整数的全排列,每个数之间用半角“,”隔开,/* 中间不要有空格,每个排列单独一行。/*********************原创 2012-11-21 21:24:15 · 2783 阅读 · 0 评论 -
[C++]数据结构:跳表SkipList的实现与使用
#include#include using namespace std;//E是查询值,K是返回值templateclass SkipNode{ public: SkipNode(int size){link=new SkipNode*[size];} ~SkipNode(){delete []link;} E data ; SkipNode**link;//一维指原创 2012-12-03 20:00:51 · 2997 阅读 · 0 评论 -
[C++]数据结构:二叉树中已知先序中序求后序的递归方法
#include using namespace std;const int MaxSize=20; //数组的最大尺寸int p; //一个临时的数字用来标记当前操作的数组的位置char MidOrder[MaxSize]; //用来存储中序遍历顺序的数组char PreOrder[MaxSize]; //用来存储先序遍历顺序的数组//初始化的方法void Init(原创 2012-12-05 21:47:26 · 2157 阅读 · 0 评论 -
[Other]B树 B+树 B*树 - 三大名树的基础简介
B树简述对于B树一直有博文说B树就是二叉搜索树,其实这种理解是错误的。B树和B-树是同一种树,只不过英语中B-tree被中国人翻译成了B-树,让人以为B树和B-树是两种树。实际上,两者就是同一种树,-是连字符而不是减号。详情可以参见维基百科:B树定义。概括来说,M阶B树就是一个节点可以拥有多于2个子节点的二叉查找树。条件一个M阶B树满足以下条件:定义任意非叶子结点最多只有M个儿子,且M>2根结点的原创 2014-06-05 17:28:25 · 2860 阅读 · 0 评论