数据结构
文章平均质量分 79
fantasy_linux
这个作者很懒,什么都没留下…
展开
-
数据结构之链表基本操作
链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 相比于线性表顺序结构,操作复杂。由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多,但是查原创 2016-01-21 19:19:23 · 732 阅读 · 0 评论 -
数据结构之二叉树
今天和大家讨论的是二叉树,在讨论二叉树之前,我们在之前也接触了一维的线性存储结构,比如数组,双端链表,以及对双端的链表的封装形成栈和队列,之后又将数组和双端链表的结合形成hash表,在存储和查找方面解决了很多问题,但是一维线性存储结构仍然存在问题,比如一维的线性数据结构在查找时的效率只能达到o(n)的时间复杂度,所以为了解决上述问题,我们引入树型数据结构。 最常见的树型结构为二原创 2016-02-28 22:20:03 · 445 阅读 · 0 评论 -
SeqList(顺序表的实现)
顺序表也就是我们常说的数组,今天就是把对于数组 的各种操作封装成类,下面就来看具体的实现: 我们先来看test.h的内容:#ifndef _TEST_H_#define _TEST_H#include #include #include using namespace std;templateclass SeqList{public: SeqList(原创 2016-04-06 17:04:06 · 2401 阅读 · 0 评论 -
各种排序的排序思想和实现
今天主要和大家讨论九大排序算法,包括冒泡排序、插入排序、选择排序、shell排序、归并排序、快速排序、计数排序、基数排序、堆排序。通过和大家的讨论,相信对大家的在今后的学习和面试肯定会有很大的帮助。下面分别来说明各种排序的排序的思想和其实现。 (1)冒泡排序: 排序思想:设数组a[0..n-1],令i = 0; j从原创 2016-02-27 20:00:27 · 856 阅读 · 0 评论 -
算法导论之红黑树
红黑树是一颗二叉搜索树,它在每个节点增加了一个存储位来表示节点的颜色,可以是RED或BLACK。通过对任何一条从根到叶子的简单路径上各个节点的颜色进行约束,红黑树确保没有一条路径会比其他路径长出2倍,因而是近似平衡的。 树中每个节点包含5个属性:color、key、left、right和p。如果一个节点没有子节点或父节点,则该节点相应指针属性的值为NULL。我们可以把这些NULL视原创 2016-03-02 15:13:24 · 437 阅读 · 0 评论 -
数据结构之动态数组实现
动态数组,是相对于静态数组而言。静态数组的长度是预先定义好的,在整个程序中,一旦给定大小后就无法改变。而动态数组则不然,它可以随程序需要而重新指定大小。动态数组的内存空间是从堆(heap)上分配(即动态分配)的。是通过执行代码而为其分配存储空间。当程序执行到这些语句时,才为其分配。程序员自己负责释放内存。 为什么要使用动态数组?在实际的编程中,往往会发生这种情况,即所需的内原创 2016-02-15 12:52:27 · 630 阅读 · 0 评论 -
数据结构之二叉搜索树
一颗二叉搜索树是以一颗二叉树组织的,这样一颗可以使用一个链表数据结构来表示,其中每个节点都是一个对象,除了key之外,每个节点还包含属性left、right和p,它们分别指向节点的左孩子、右孩子和双亲。如果某个孩子结点和父节点不存在,则相应属性的值为NULL,根节点是树中唯一一个父指针为NULL的节点。 6原创 2016-02-29 19:36:16 · 332 阅读 · 0 评论 -
数据结构之哈希表的实现
散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表,函数f(key)为哈希(原创 2016-02-14 17:38:15 · 468 阅读 · 0 评论 -
数据结构之通用双端链表
双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表。本章中的双端链表为通用双端链表,其数据域类型为void *,可以接收任意类型的指针,达到通用的效果。首先我们来看dlist.h文件中结构体的声明和接口的声明://链表节点类型ty原创 2016-02-14 09:37:27 · 444 阅读 · 0 评论 -
数据结构之单向链表
本文章主要介绍单向链表的一些面试题,链表相对于数组主要是在插入和删入上降低了时间复杂度,但对于单向链表来说,只能从头结点开始遍历到尾节点,无法实现从尾节点向头结点的遍历;下面则是一些对于单向链表常常考察的知识。 1.初始化链表 2.链表的销毁 3.头部插入 4.头部删除 5.尾部插入原创 2016-02-06 14:28:29 · 492 阅读 · 0 评论 -
#每日一题# 2016腾讯笔试题之一
最长回文子序列 题目大概的意思是这样:例如:cabbeaf:回文子序列有:c,a,aa,bb,aba,abba,e,f,最长的就是abba,所以输出长度为4 该题目可以转换为该字符串和它反转的字符串的最长公共子序列。 最长公共子序列:其定义是,一个序列s,如果分别是两个或多个已知序列的子序列,且是所有符合此条件序列中最长的,则s称为已知序列的最长公共子序列。原创 2016-04-08 16:18:53 · 537 阅读 · 0 评论