DataStructure
文章平均质量分 64
Alex123980
分享经验,传递快乐
展开
-
堆结构的C++模板类实现
数据结构中堆的概念不同于“堆栈”,它是指一种完全二叉树,这种二叉树的任一节点的关键字大于(或小于)其子树的所有节点,即最大堆(最小堆)。堆结构的构建采用数组表示,与之前的二叉树的线性存储结构类似,主要成员函数包括插入、删除根节点等函数。插入数值时直接在数组的尾端增加元素,从尾端开始往上迭代判断是否满足堆的有序性条件。删除根节点函数,将根节点关键字返回,同时将数组的最后一个元素置于根节点,从根节点开原创 2016-06-03 21:38:42 · 1210 阅读 · 1 评论 -
String类的具体实现
C语言字符串的表示形式只有char型数组,而C++语言增加了string的封装类,集成了一些实用的成员函数,其实也是对运算符的重载,以便于用户的使用,如判断运算符>、String类的头文件#ifndef STRING_H_#define STRING_H_#include using namespace std;class String{ char *str; int len;原创 2017-03-24 15:25:43 · 960 阅读 · 0 评论 -
单链表的逆转问题
单链表的逆转问题,需要3个临时变量temp1,temp2,temp3,他们是连续的3个节点,将temp2的next指针指向temp1,3个变量向后平移一位,循环执行以上步骤。具体算法如下:templatevoid LinkedList::ReverseLinkedList(){ if(!head->next) return; LinkNode* temp1=head->next;转载 2016-06-10 10:09:34 · 474 阅读 · 0 评论 -
集合数据结构的C++实现
本文定义集合Set类为链表LinkedList类的派生类,并定义了集合插入、移除、求并、求交、求差等成员函数,集合数据结构最大的特点是元素不存在重复的情况,不管是插入、合并等等。具体实现的程序代码如下://set.h#ifndef SET_H#define SET_H#include "linkedlist.h"templateclass Set: public LinkedList原创 2016-06-11 16:13:18 · 823 阅读 · 0 评论 -
哈夫曼树数据机构的建立及哈夫曼编码与解码的C++实现
纠结了两天,终于解决了这个问题,分享给大家自己的思路。将一组无序数列建立最小堆,从最小堆中弹出两个最小的元素作为左右儿子其和为父节点构建一个树,将父节点加入最小堆,再次调用以上方法重复构建树,最终即可构建一棵哈夫曼树,哈夫曼树的特点有3个:1、 所有的序列元素集中在叶节点上 2、没有度为1的节点 3、哈夫曼树的任意非叶节点的左右子树交换后仍是哈夫曼树 4、n个叶子结点的哈夫曼树共有2n-1个原创 2016-06-08 21:46:48 · 4574 阅读 · 0 评论 -
最短路径问题的相关算法
图中两节点间的最短路径是指两个不同顶点之间的所有路径中,边的权值之和最小的那一条路径。两节点分别为源点(source)和终点(destination),根据源点是否固定将问题细分为单源最短路径问题和多源最短路径问题,根据图中边是否有权值分为无权图和有权图的最短路径问题。无权图的单源最短路径算法:void Unweighted ( Vertex S ){ Enqueue(S, Q);wh原创 2016-06-07 20:16:24 · 553 阅读 · 0 评论 -
完全二叉搜索树结构的C++实现
二叉搜索树是一种二叉树,且树的所有节点满足其左子树的所有节点小于该节点,其右子树的所有节点大于该节点。若二叉树的深度为H,当前H-1层二叉树的是满二叉树且第H层的所有节点集中在左边,则称该树为完全二叉树。本文想要建立一种数据结构,能够综合二叉搜索树和完全二叉树的特点。首先考虑采用那种存储方式:数组和链表。二叉搜索树多采用链式存储,而完全二叉树多采用的数组存储方式,因为它的数组元素都被利用起来,不存原创 2016-06-07 14:27:56 · 1579 阅读 · 0 评论 -
根据二叉树前序遍历和中序遍历序列求解后序遍历的算法
问题模型:已知某二叉搜索树前序遍历序列为1,2,3,4,5,6,中序遍历为3,2,4,1,6,5,设计程序计算后序序列。关于这个问题你可以通过前序遍历和中序遍历创建一颗树,然后通过后序遍历进行求解,当然还可以直接根据已知两序列直接推理后序序列,本文将对这种分析进行介绍。利用递归的思想,从前序序列可以确定根节点即首位元素,根据中序序列可以确定左右子树的节点集合,然后针对左右子树分别进行继续判原创 2016-06-06 20:27:59 · 2949 阅读 · 0 评论 -
连通图中节点的遍历
首先复习一些基本概念:连通:如果从v到w存在一条(无向)路径,则称v和w是连通的。路径:v到w的路径是一系列顶点{v,v1,…,vn,w}的集合,其中任一对相邻的顶点间都有图中的边。路径的长度:路径中的边数(如果带权,则是所有边的权重和)。如果v到w之间的所有顶点都不同,则称简单路径。回路:起点等于终点的路径。连通图:图中任意两顶点均连通。连通分量:无向图的极大连通子图。极原创 2016-06-06 16:34:48 · 4232 阅读 · 0 评论 -
图的邻接表数据结构的C++实现方法
图的邻接表表示方法采用链表的方式针对每个节点创建一个属于自己的链表,其中头指针为节点自身,其后的所有元素为与自己相连的其他节点,头结点只需记录节点的名字和序号,链表的其他节点还需记录两点之间边的权值,本文实现了其插入、创建、打印等方法,以下为该类的C++实现代码。//graphlinkedtable.h#ifndef GraphLinkedTable_H#define GraphLinke原创 2016-06-06 14:44:05 · 4502 阅读 · 1 评论 -
图的邻接矩阵表示的C++类实现
任何的抽象数据类型(Abstract Data Type)都由3要素组成,名称、数据对象集合操作集。对于图的数据结构,其名称为Graph(图),数据对象集由一个非空的有限顶点集合和一个有限边集合组成,操作集包括插入顶点、插入边等。教材上对于图的实现形式主要介绍了两种:邻接矩阵和邻接表,本文采用临街矩阵的表示图,初步实现简单的图类,可以进行创建图、插入边、打印图等操作。//graphadjcen原创 2016-06-05 15:41:20 · 5562 阅读 · 1 评论