随笔分类 -  数据结构与算法

摘要:红黑树 定义: 带有外部结点,且满足下列条件的二叉树: 1)每个结点都有标为红色,或黑色 2)根结点为红色 3)外结点为黑色 4)[红不相邻]每个红结点的儿子必为黑结点 5)根(包括子树的根)到外结点的每条路径上,标记为黑色的结点数相同 结点数与高度之间的关系: 定理: 1.具有n个内结点的红黑树, 阅读全文
posted @ 2018-03-05 15:25 gd_沐辰 阅读(169) 评论(0) 推荐(0) 编辑
摘要:本例子分为3个文件。 阅读全文
posted @ 2018-03-05 15:16 gd_沐辰 阅读(231) 评论(0) 推荐(0) 编辑
摘要:平衡树,又称AVL树。(以前苏联学者Adelson-Velskii和Landis的名字命名) 定义:所有结点的平衡因子绝对值≤1的二叉树(高度h控制在结点数n的对数范围之内 h≤O(logn)的树都属于平衡树(balanced tree))。 平衡因子:右子树的高hR与v的左子树高hL之差hR-hL 阅读全文
posted @ 2018-03-05 15:14 gd_沐辰 阅读(245) 评论(0) 推荐(0) 编辑
摘要:检索树 检索树的定义: 二叉检索树(或二叉排序树,二叉有序树)的简称,任一结点a,其左子树中结点的值均小于或等于a,右子树上结点值均大于a(左小右大)。 性质:中序序列是递增的有序序列。 1.检索树的构建方法: 创建一颗空树,通过遍历,进行有序插入,按照左小右大的原则。 检索树的构建算法: Bptr 阅读全文
posted @ 2018-03-05 15:00 gd_沐辰 阅读(368) 评论(0) 推荐(0) 编辑
摘要:#include "stdafx.h" #include<stdio.h> #include<conio.h> #include<Windows.h> #include<stdlib.h> #include<assert.h> //节点类型 typedef struct Node { int dat 阅读全文
posted @ 2018-01-09 18:38 gd_沐辰 阅读(411) 评论(0) 推荐(0) 编辑
摘要:二叉树的遍历与构建 遍历(traversal)指的是对树中每个结点访问一次且仅一次。 访问(visit)是指对结点进行某种处理,比如输出结点值,查找某个(或某些)结点,计算结点的层号、高度、子孙个数等等。 注意:遍历必须按“一定的规律”进行,因为二叉树是非线性结构。 遍历方法(即规律)很多,常见的有 阅读全文
posted @ 2018-01-09 18:36 gd_沐辰 阅读(301) 评论(0) 推荐(0) 编辑
摘要:二叉树的基本概念和性质 二叉树的定义:二叉树(binary tree)也称二分树,是二元位置树。每一个结点的度至多为2。 每个结点最多有两个儿子(左儿子、右儿子) 结点的两棵子树叫做左子树和右子树 二叉树的基本性质: 1) 非空二叉树中,第i层(i≥1)上结点的个数 ni≤2i-1 2)高为k(k≥ 阅读全文
posted @ 2018-01-09 18:30 gd_沐辰 阅读(572) 评论(0) 推荐(0) 编辑
摘要:书结构的基本概念 树的定义:用于描述层次关系、分枝关系、嵌套关系的基本数据结构。(首结点没有前驱,其他结点有且只有一个前驱,或有多个后继。) 树(tree)是n(n≥0)个结点的集合 若n=0,是一棵空树(null tree) n=1,是一棵单结点树 n>1,其中一个结点是树的根结点,简称根(roo 阅读全文
posted @ 2018-01-09 18:25 gd_沐辰 阅读(738) 评论(0) 推荐(0) 编辑
摘要:表结构的类实现 前面所讲的都是c语言来介绍,下面用c++的类实例。。。 1.顺序栈类 栈类的定义 栈顶指针、栈的存储空间(成员数据) 栈的初始化、进栈函数和退栈函数(成员函数) 1)类的定义: class Cstack //定义栈类 { private: int top; //栈顶指针 elemen 阅读全文
posted @ 2018-01-09 18:22 gd_沐辰 阅读(173) 评论(0) 推荐(0) 编辑
摘要:// HashList.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include<iostream> using namespace std; struct node { int r;//行标 int c;//列标 double dat;//数据 }; 阅读全文
posted @ 2018-01-09 18:21 gd_沐辰 阅读(168) 评论(0) 推荐(0) 编辑
摘要:散列表 或称Hash表或哈希表,通过科学的取地址方式,存放数据并便于查找。由此降低地址冲突的一个数据模式。 算法的实质: 完成 元素值x—>存储地址d的变换f,即 d=f(x) (1)直接地址存储法 条件:元素取值范围与集合大小n差不多。 比如:定义数组arr[10],来存放10个自然数。 (2)散 阅读全文
posted @ 2018-01-09 18:18 gd_沐辰 阅读(223) 评论(0) 推荐(0) 编辑
摘要:字符串 简称串,是有穷字符序列。字符个数称串长,空串(null string)的长度等于0。 串常量:用一对双引号括起来的字符序列 串变量:一维字符数组 应用较广: 1.文本编辑 2.对C源程序进行编辑、编译 3.处理用户输入数据、输入命令 4.模式匹配、模式识别 串运算:插入、删除、查找、替换(有 阅读全文
posted @ 2018-01-09 18:11 gd_沐辰 阅读(261) 评论(0) 推荐(0) 编辑
摘要:稀疏矩阵的顺序存储 在工程数学上学过矩阵,有多行多列,类似于多维数组。那么又如何将矩阵中的数值转换成数组的元素? 如图,左一是一个下三角矩阵,要将不为0的数值存放到一维数值中(右一)。 其中i是原矩阵的行标,j是原矩阵的列标,k是转换后数组的下标。 一般的非0元素极少可以用压缩法存储。。。 每个非0 阅读全文
posted @ 2018-01-09 18:09 gd_沐辰 阅读(241) 评论(0) 推荐(0) 编辑
摘要:栈 只允许在同一个端点处进行插入、删除的表结构称为栈(stack) 属性: 栈顶(top)指针 栈底(bottom) 进栈(push) 退栈(pop) 特点: 后进先出。或LIFO表 (last in first out) 顺序栈的进栈、出栈算法: #define EMPTY -1 //栈空指针值 阅读全文
posted @ 2018-01-09 18:04 gd_沐辰 阅读(159) 评论(0) 推荐(0) 编辑
摘要:前面介绍过链表,本人觉得链表在运用方面比较重要,下面给出一个实例。 学生管理系统 1.实现了链表的创建,以及一些增、删、改、查的基本操作 2.对于信息的存储采用的是文件的读写。将输入的信息保存在.txt中。 // Student.cpp : 定义控制台应用程序的入口点。 // #include "s 阅读全文
posted @ 2018-01-09 18:01 gd_沐辰 阅读(185) 评论(0) 推荐(0) 编辑
摘要:数组可以当顺序表使用,这个不难。 此处讲解下链表。。。。 复习下 1.是线性表的一种存储形式 2.每个表元素对应链表的一个结点(含值域和链域) 3.值域(value field)用来存储表元素值 4.链域(link field)用来存储相邻结点的地址 5.表尾结点的链域值为空(NULL,即常数0) 阅读全文
posted @ 2018-01-09 17:58 gd_沐辰 阅读(239) 评论(0) 推荐(0) 编辑
摘要:线性表 什么是线性表? 线性表(linear list):具有n(n≥0)个数据结点(元素)的序列 A=(a1,a2,…,an)。比如:数组 表结构的主要运算:增、删、改、查。 其次还有:存取、更新、合并、分裂、复制、排序 线性表有两个存储方式:顺序存储(顺序表)、链式存储(链表) 顺序表 按结点在 阅读全文
posted @ 2018-01-09 17:49 gd_沐辰 阅读(690) 评论(0) 推荐(0) 编辑
摘要:如何去评判一个算法的高效性、可行性并是正确的? 1.评价标准 算法评价(评估,评测)称为算法分析。 可以从以下几个方面: 1)算法的正确性 2)算法的有效性 3)操作界面 4)键壮性 5)易读性和易维护性 正确性: 能满足具体问题的需求,且对所有的合法的输入数据都正确。 一个正确的算法应当对所有合法 阅读全文
posted @ 2018-01-09 17:46 gd_沐辰 阅读(476) 评论(0) 推荐(0) 编辑
摘要:什么是数据? 1.数据是对客观事物的描述形式和编码形式的统称。 2.是计算机算法和程序的处理对象(输入数据)和计算结果(输出数据) 什么是数据结构? 将一些结点通过某种关系进行相关联,形成一个整体。 数据结构的种类: 下列所讲的数据结构一般是指逻辑结构(在计算机不一定按这种结构存储,非物理结构)。如 阅读全文
posted @ 2018-01-09 17:22 gd_沐辰 阅读(189) 评论(0) 推荐(0) 编辑