精华内容
下载资源
问答
  • 数据结构-多维数组

    千次阅读 2016-11-20 19:54:50
    多维数组和广义表是一种复杂的非线性结构,它们的逻辑特征是:一个数据元素可能多个直接前驱和多个直接后继。 矩阵的存储 矩阵是科学与工程计算问题中常用的数学对象之一。 特殊矩阵 ...

    多维数组:

    多维数组和广义表是一种复杂的非线性结构,它们的逻辑特征是:一个数据元素可能有多个直接前驱和多个直接后继。

    矩阵是科学与工程计算问题中常用的数学对象之一。

    所谓特殊矩阵是指非零元素或零元素的分布有一定规律的矩阵。常见的有对称矩阵、三角矩阵和对角矩阵等。

    设矩阵Amn中有s个非零元素,若s远远小于矩阵元素的总数(即s<<m×n),则称A为稀疏矩阵。

    展开全文
  • 常用数据结构常用算法,

    万次阅读 多人点赞 2018-08-08 20:32:54
    1. 常见数据结构 人们进行程序设计时通常关注两个重要问题,一是如何将待处理的数据存储到计算机内存中,即数据表示;二是设计算法操作这些数据,即数据处理。数据表示的本质是数据结构设计,数据处理的本质是算法...

    1. 常见数据结构

    人们进行程序设计时通常关注两个重要问题,一是如何将待处理的数据存储到计算机内存中,即数据表示;二是设计算法操作这些数据,即数据处理。数据表示的本质是数据结构设计,数据处理的本质是算法设计。PASCAL之父,瑞士著名计算机科学家沃思(Niklaus Wirth)教授曾提出:算法+数据结构=程序。可以看出数据结构和算法是程序的两个重要组成部分,数据结构是指数据的逻辑结构和存储方法,而算法是指对数据的操作方法。尽快如C++的标准模板类STL已经设计好各种”轮子“,我们还是有必要了解轮子的构造的,这样我们就具备了因地制宜的能力,根据具体场景选择合适的数据结构和算法去解决问题。

    1.1 线性表

    线性表按存储方式可分为顺序表和链表。线性表的基本运算是指对线性表的操作,常见的包括:求长度、置空表、遍历、查找、修改、删除、插入、排序等。此外还有复杂的运算,比如线性表的合并、反转、求中值、删除重复元素等。

    顺序表对应数组,STL中vector也是这样实现的。顺序表的特点是元素按逻辑顺序依次存储在一块连续的存储空间中,故是一种随机存取结构。操作时间复杂度:查询、修改、求长度O(1),插入、删除、遍历O(n)。

    链表包括单链表、循环链表、双向链表和静态链表等。链表采用动态存储分配方式,需要时申请,不需要时释放。操作时间复杂度:插入、删除O(1),查询、修改、遍历、求长度O(n)。空间性能方面,顺序表的存储空间是静态分配的,需提前确定其大小,更改的话容易造成浪费。适用于存储规模确定,不经常变更或变更不大的场合;动态链表是动态分配空间的,不容易溢出。适用于长度变化大的场合。但由于要存储指针,故空间利用率较低。

    C++的STL中有很多和线性表相关的容器,如向量(vector)、列表(list)等顺序容器。

    <pre name="code" class="cpp">//使用容器,要包含头文件
    #include<vector>
    using std::vector;
    //定义向量对象
    vector<int> ivec;      //定义向量对象ivec
    vector<int> ivec1(ivec);  //定义向量对象ivec1,并用ivec初始化
    vector<int> ivec2(n,i) ;  //定义向量对象ivec2,包含n个值为i的元素
    vector<int> ivec3(n);    //定义包含n个值为0的向量
    vector<int>::iterator it;  //定义迭代器,类比指针
    vector<vector<int> > vivec; //定义二维向量,”>“之间要有空格

     

    <span style="white-space:pre">    </span>向量vector常用接口可参见<a target=_blank href="http://www.cplusplus.com/reference/vector/vector/">向量vector常用接口</a>,列表list的操作与向量相似,具体可参见<a target=_blank href="http://www.cplusplus.com/reference/list/list/">列表list常用接口
    </a>
     

    2.2 栈、队列和串

    栈(stack)是限定在尾部进行插入和删除操作的线性表。允许插入和删除操作的称为栈顶(top),另一端称为栈底(bottom)。因此,栈的操作是后进先出原则进行的。栈的基本运算包括:置空栈、入栈、出栈、取栈顶元素和判空。由于栈是受限的线性表,故可以由顺序表和链表来实现。

    队列也是受限的线性表。它只允许在一端插入,称为队尾(rear);另一端删除,称为对头(front),在队尾插入称为入队,对头删除称为出队。基本运算包括:置空队、入队、出队、取队头和判队空。它也可以由顺序表或者链表来实现。

    串也称字符串,是由字符构成的有限序列。串中任意个连续字符构成的串称为子串,原串称为主串。前缀子串指第一个字符到某个字符构成的子串,后缀子串是某个字符到最后一个字符构成的子串。串的基本操作包括:赋值、串连接、求长度、求子串、比较串大小、插入、修改、删除等。串的模式匹配算法包括朴素模式匹配算法、KMP算法和BM算法等,需要研究一下。

     

    此外,还有多维数组和广义表、树(二叉树、B-tree、红黑树等)和图,这里不做详解,今后再做总结。

    2.常见算法

    常见算法有查找和排序两种,其中查找是计算机数据处理经常用到的一种重要应用,当需要反复在海量数据中查找制定记录时,查找效率成为系统性能的关键。查找算法分为静态查找和动态查找,其中静态查找包括:顺序查找、二分查找和分块查找;动态查找包括:二叉排序树和平衡二叉树。此外还有理论上最快的查找技术——散列查找。这里只给出二分查找的代码。排序的目的是便于查找,比如电话号码查找、书的目录编排、字典查询等。常用的排序算法有:插入排序、冒泡排序、堆排序、选择排序和归并排序等,它们的性能对比见下图。

     

    2.1 二分查找

    二分查找又称折半查找,它要求待查序列按关键码有序。它的基本思想是先确定待查记录所在的区间,然后逐步缩小范围直到找到或找不到该记录为止。折半查找要求线性表用顺序表作为存储结构,它特别需要注意的是边界控制的问题。该算法C++描述如下:

    int Search_Bin(int a[], int n, int target)//a[0]不用,a[1]~a[n]存储数据
    {
        int low = 1;
        int high = n;
        while(low<=high)
        {
            int mid = low+(high-low)/2; //防止溢出
            if(a[mid]==target) return mid;
            else if(a[mid]>target) high=mid-1;
            else low=mid+1;
        }
        return 0;
    }
     

    2.2 直接插入排序

    直接插入排序的原理可类比打牌时整理手中牌的过程,即不断地将新来的元素插到有序序列的合适位置。它是一种稳定的排序算法,特别适合于待排序序列基本有序的情况。该算法C++描述如下:

    void InsertSort(int r[],int n) //r[0]不用,n为元素个数
    {
        for(int i=2;i<=n;i++) //从2~n循环,共n-1趟排序
        {
            if(r[i]<r[i-1])
            {
                r[0]=r[i];
                r[i]=r[i-1];
            }
            for(int j=i-2;r[j]>r[0];j--) //边查边后移
                r[j+1]=r[j];
            r[j+1]=r[0];
        }
    }
     

    2.3 冒泡排序

    冒泡排序的方法是在待排序的元素中选择两个相邻的元素进行比较,反序则交换,直至没有反序为止。为了减少记录的重复比较,这里给出改进版的起泡排序,它是一种稳定的排序算法。

     

    //普通版
    void BubbleSort(int r[],int n)
    {
        for(int i=1;i<n;i++) //n-1 趟
        {
            for(int j=1;j<=n-i;j++) //内循环,每一趟减少一个比较元素
            {
                if(r[j]>r[j+1]) //相邻元素比较,交换
                {
                    r[0]=r[j];
                    r[j]=r[j+1];
                    r[j+1]=r[0];
                }
            }
        }
    }
    //改进版
    void BubbleSort(int r[],int n)
    {
        int pos=n;
        while(pos!=0)
        {
            int bound=pos; //比较边界,之后的为有序,无序比较
            int pos=0;
            for(int i=1;i<bound;i++)
            {
                if(r[i]>r[i+1])
                {
                    pos=i; //记录打破有序的位置
                    r[0]=r[i];r[i]=r[i+1];r[i+1]=r[0];
                }
                    
            }
        }
    }

    2.4 快速排序

    快速排序是起泡排序的改进算法,由于起泡排序是在相邻位置进行的,故要比较移动多次才能到达目的地,而快排元素的比较和移动是从两端向中间进行的,移动的距离比较远,更靠近目的地,因此效率较高。

    int Partion(int r[],int first,int end)
    {
        int i=first;
        int j=end;
        int pivot=r[i];
        while(i<j)
        {
            while(i<j && r[j]>pivot) j--; //右侧扫描,不符合条件左移
            r[i]=r[j];
            while(i<j && r[i]<pivot) i++; //左侧扫描,不符合条件右移
            r[j]=r[i];
        }
        r[i]=pivot;
    }
    void Qsort(int r[],int i,int j)
    {
        if(i<j)
        {
            int pivotloc = Partion(r,i,j);//每趟排好一个元素
            Qsort(r,i,pivotloc-1);
            Qsort(r,pivotloc+1,j);
        }
    }

    2.5 简单选择排序

    选择排序的基本方法是:每趟选择待排序序列中关键码最小的元素,顺序添加到已排好序的有序序列后面,直到全部记录排序完毕。

    void SelectSort(int r[],int n)
    {
        for(int i=1;i<n;i++) //n-1趟排序
        {
            int index=i;
            for(int j=i+1;j<=n;j++)
            {
                if(r[j]<r[index])
                {
                    index=j; //记录最小元素的索引
                }
            }
            if(index!=i) //若r[i]即为最小,无序交换
            {
                r[0]=r[i];r[i]=r[index];r[index]=r[0];
            }
        }
    }
     

    2.6 堆排序

    堆排序通过构造大根堆或者小根堆的数据结构来记录简单选择排序中前一趟的比较结果,从而减少比较次数,提高整个排序的效率。这里以大根堆为例,给出堆排序算法的C++描述。

    void Sift(int r[],int k,int m) //用数组记录堆,k是要调整的节点,通过调整使得满足堆的性质
    {
        int i=k,j=2*i;//初始化,找到k的左孩子
        while(j<=m)
        {
            if(j<m && r[j]<r[j+1]) j++;//寻找左右孩子中较大的一个
            if(r[i]>r[j]) break;//满足条件,跳出
            else
            {
                r[0]=r[i];
                r[i]=r[j];
                r[j]=r[0];
                i=j; j=2*i;//比较节点下移
            }
        }
    }
    void HeapSort(int r[],int n)
    {
        for(int i=n/2;i>=0;i--) //构建堆
            Sift(r,i,n);
        for(int i=n;i>1;i--)
        {
            r[0]=r[1];r[1]=r[i];r[i]=r[0];//输出堆顶元素
            Sift(r,1,i-1); //调整使满足堆的性质
        }
    }
     

    2.7 归并排序

    归并排序的基本思想是:将两个或两个以上的有序序列归并成一个有序序列.

    //归并两个有序序列
    void Merge(int r[],int r1[],int s,int m,int t)
    {
        int i=s,j=m+1,k=s;
        while(i<=m && j<=t)
        {
            if(r[i]<r[j])
                r1[k++]=r[i++];
            else
                r1[k++]=r[j++];
        }
        while(i<=m) r1[k++]=r[i++];
        while(j<=t) r1[k++]=t[j++];
    }
    //递归归并
    void MergeSort(int r[],int r1[],int s,int t)
    {
        if(s==t) r1[s]=r[s];
        else
        {
            int m=(s+t)/2;
            MergeSort(r,r1,s,m);
            MergeSort(r,r1,m+1,t);
            Merge(r1,r,s,m,t);
        }
    }

    2.8 小结

    迄今为止,排序算法还有很多。在常见的算法中,就时间性能而言,在希尔排序、堆排序、快速排序和归并排序算法中,快速排序被认为是最快的一种,而在待排序元素个数比较多的情况下,归并排序较堆排序更快。就稳定性而言,直接插入排序、冒泡排序和归并排序是稳定的排序算法,而简单选择排序、快排和堆排是不稳定的。元素较少时(n<50),可选择直接插入排序或简单选择排序;元素初始状态基本有序时,选择直接插入排序或冒泡排序;元素较多时,选择快排、堆排或者归并,具体情况具体分析。

    展开全文
  • 上次在面试时被面试官问到学了哪些数据结构,那时简单答了栈、队列/(ㄒoㄒ)/~~其它就都想不起来了,今天有空整理了一下几种常见的数据结构,原来我们学过的数据结构有这么多~ 首先,先来回顾下C语言中常见的基本数据...

    上次在面试时被面试官问到学了哪些数据结构,那时简单答了栈、队列/(ㄒoㄒ)/~~其它就都想不起来了,今天有空整理了一下几种常见的数据结构,原来我们学过的数据结构有这么多~
    首先,先来回顾下C语言中常见的基本数据类型吧O(∩_∩)O
    C语言的基本数据类型有:整型int,浮点型float,字符型char等等
    在这里插入图片描述

    添加描述
    那么,究竟什么是数据结构呢?
    数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合
    大部分数据结构的实现都需要借助C语言中的指针和结构体类型
    下面,进入今天的重点啦O(∩_∩)O几种常见的数据结构
    (1)线性数据结构:元素之间一般存在元素之间存在一对一关系,是最常用的一类数据结构,典型的有:数组、栈、队列和线性表
    (2)树形结构:结点间具有层次关系,每一层的一个结点能且只能和上一层的一个结点相关,但同时可以和下一层的多个结点相关,称为“一对多”关系,常见类型有:树、堆
    (3)图形结构:在图形结构中,允许多个结点之间相关,称为“多对多”关系
    下面分别对这几种数据结构做一个简单介绍:
    1、线性数据结构:典型的有:数组、栈、队列和线性表
    (1)数组和链表
    a、数组:存放着一组相同类型的数据,需要预先指定数组的长度,有一维数组、二维数组、多维数组等
    b、链表:链表是C语言中一种应用广泛的结构,它采用动态分配内存的形式实现,用一组任意的存储单元存放数据元素链表的,一般为每个元素增设指针域,用来指向后继元素
    c、数组和链表的区别:
    从逻辑结构来看:数组必须事先定义固定的长度,不能适应数据动态地增减的情况;链表动态地进行存储分配,可以适应数据动态地增减的情况,且可以方便地插入、删除数据项(数组中插入、删除数据项时,需要移动其它数据项)
    从内存存储来看:(静态)数组从栈中分配空间(用NEW创建的在堆中), 对于程序员方便快速,但是自由度小;链表从堆中分配空间, 自由度大但是申请管理比较麻烦
    从访问方式来看:数组在内存中是连续存储的,因此,可以利用下标索引进行随机访问;链表是链式存储结构,在访问元素的时候只能通过线性的方式由前到后顺序访问,所以访问效率比数组要低
    (2)栈、队列和线性表:可采用顺序存储和链式存储的方法进行存储
    顺序存储:借助数据元素在存储空间中的相对位置来表示元素之间的逻辑关系
    链式存储:借助表示数据元素存储地址的指针表示元素之间的逻辑关系
    a、栈:只允许在序列末端进行操作,栈的操作只能在栈顶进行,一般栈又被称为后进先出或先进后出的线性结构
    顺序栈:采用顺序存储结构的栈称为顺序栈,即需要用一片地址连续的空间来存储栈的元素,顺序栈的类型定义如下:

    在这里插入图片描述
    添加描述
    链栈:采用链式存储结构的栈称为链栈:
    在这里插入图片描述

    添加描述
    b、队列:只允许在序列两端进行操作,一般队列也被称为先进先出的线性结构
    循环队列:采用顺序存储结构的队列,需要按队列可能的最大长度分配存储空空,其类型定义如下:

    在这里插入图片描述
    添加描述
     链队列:采用链式存储结构的队列称为链队列,一般需要设置头尾指针只是链表的头尾结点:

    在这里插入图片描述
    添加描述
    c、线性表:允许在序列任意位置进行操作,线性表的操作位置不受限制,线性表的操作十分灵活,常用操作包括在任意位置插入和删除,以及查询和修改任意位置的元素

    顺序表:采用顺序存储结构表示的线性表称为顺序表,用一组地址连续的存储单元一次存放线性表的数据元素,即以存储位置相邻表示位序相继的两个元素之间的前驱和后继关系,为了避免移动元素,一般在顺序表的接口定义中只考虑在表尾插入和删除元素,如此实现的顺序表也可称为栈表:
    在这里插入图片描述

    添加描述

    线性表:一般包括单链表、双向链表、循环链表和双向循环链表
    单链表:
    在这里插入图片描述

    添加描述

    双向链表:

    在这里插入图片描述

    添加描述
    线性表两种存储结构的比较:
    顺序表:
     优点:在顺序表中,逻辑中相邻的两个元素在物理位置上也相邻,查找比较方便,存取任一元素的时间复杂度都为O(1)
     缺点:不适合在任意位置插入、删除元素,因为需要移动元素,平均时间复杂度为O(n)
    链表:
     优点:在链接的任意位置插入或删除元素只需修改相应指针,不需要移动元素;按需动态分配,不需要按最大需求预先分配一块连续空空
     缺点:查找不方便,查找某一元素需要从头指针出发沿指针域查找,因此平均时间复杂度为O(n)
    2、树形结构:结点间具有层次关系,每一层的一个结点能且只能和上一层的一个结点相关,但同时可以和下一层的多个结点相关,称为“一对多”关系,常见类型有:树、堆
    (1)二叉树:二叉树是一种递归数据结构,是含有n(n>=0)个结点的有限集合,二叉树具有以下特点:
    二叉树可以是空树;二叉树的每个结点都恰好有两棵子树,其中一个或两个可能为空;二叉树中每个结点的左、右子树的位置不能颠倒,若改变两者的位置,就成为另一棵二叉树
    (2)完全二叉树:从根起,自上而下,自左而右,给满二叉树的每个结点从1到n连续编号,如果每个结点都与深度为k的满二叉树中编号从1至n的结点一一对应,则称为完全二叉树
    a、采用顺序存储结构:用一维数组存储完全二叉树,结点的编号对于与结点的下标(如根为1,则根的左孩子为2i=21=2,右孩子为2i+1=21+1=2)

    在这里插入图片描述
    添加描述

    b、采用链式存储结构:
    二叉链表:

    在这里插入图片描述
    添加描述

    三叉链表:它的结点比二叉链表多一个指针域parent,用于执行结点的双亲,便于查找双亲结点

    在这里插入图片描述
    添加描述

    两种存储结构比较:对于完全二叉树,采用顺序存储结构既能节省空间,又可利用数组元素的下标值确定结点在二叉树中的位置及结点之间的关系,但采用顺序存储结构存储一般二叉树容易造成空间浪费,链式结构可以克服这个缺点
    (3)二叉查找树:二叉查找树又称二叉排序树,或者是一课空二叉树,或者是具有如下特征的二叉树:
    a、若它的左子树不空,则左子树上所有结点的值均小于根结点的值
    b、若它的右子树不空,则右子树上所有结点的值均大于根结点的值
    c、它的左、右子树也分别是二叉查找树
    (4)平衡二叉树:平衡二叉查找树简称平衡二叉树,平衡二叉树或者是棵空树,或者是具有下列性质的二叉查找树:它的左子树和右子树都是平衡二叉树,且左子树和右子树的高度之差的绝对值不超过1

    在这里插入图片描述
    添加描述

    平衡二叉树的失衡及调整主要可归纳为下列四种情况:LL型、RR型、LR型、RL型
    (5)树:树是含有n(n>=0)个结点的有限集合,在任意一棵非空树种: a、有且仅有一个特定的称为根的结点
    b、当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1,T2,…,Tm,其中每一个集合本身又是一棵树,并且T1,T2,…,Tm称为根的子树
    (6)堆:堆是具有以下特性的完全二叉树,其所有非叶子结点均不大于(或不小于)其左右孩子结点。若堆中所有非叶子结点均不大于其左右孩子结点,则称为小顶堆(小根堆),若堆中所有非叶子结点均不小于其左右孩子结点,则称为大顶堆(大根堆)

    在这里插入图片描述
    添加描述

    (7)并查集:并查集是指由一组不相交子集所构成的集合,记作:S={S1,S2,S3,…,Sn}
    (8)B树
    3、图形结构:在图形结构中,允许多个结点之间相关,称为“多对多”关系,可分为有向图和无向图


    一些相关的视频资料便于大家学习
    C语言与数据结构的经典实战案例
    http://www.makeru.com.cn/live/5413_2014.html?s=45051
    结构体普及与应用
    http://www.makeru.com.cn/live/5413_1909.html?s=45051
    C语言玩转链表
    http://www.makeru.com.cn/live/1392_338.html?s=45051
    C高级之结构体
    http://www.makeru.com.cn/live/1392_656.html?s=45051
    循环链表及线性表的应用
    http://www.makeru.com.cn/course/details/1902?s=45051

    展开全文
  • 一、数据结构知识点总结整理 3 2.数据结构的定义: 4 3.数据结构的知识: 9 二、数据结构的实现 16 1、二叉树三种遍历的非递归算法 16 1.先序遍非递归算法 16 2.中序遍历非递归算法 17 3.后序遍历非递归算法 18 4....
  • 数据结构(一)线性数据结构

    千次阅读 2019-11-15 09:49:13
    非线性数据结构包括:多维数组、集合、树、Hash 1、数组 在Java中常用的数组utilString[],int[],ArrayList,Vector,在这些util中ArrayList是非线程安全的,Vector是线程安全的,方法同步,在ArrayList中封装了一些...

    数据结构分为:线性数据结构、非线性数据结构

    线性数据结构包括:数组、线性表、栈、队列、串

    非线性数据结构包括:多维数组、集合、树、Hash

    1、数组

    在Java中常用的数组util有String[],int[],ArrayList,Vector,在这些util中ArrayList是非线程安全的,Vector是线程安全的,方法同步,在ArrayList中封装了一些数组的基本操作。
    数据这种数据结构是通过下标进行操作的,因此查询 效率直接通过下标查询,效率很高,但是 插入操作时后面的元素需要向后移动 一位。因此插入 操作效率比较低,相同的对于删除 操作,删除 元素时也 需要元素向前移动一位,因此效率也比较低。

    2、线性表

    线性表的存储 结构分为顺序存储和链表存储,顺序存储中元素是连续的,链表存储是不连续 ,但是链表上的每个节点 都知道自己的下一个节点是谁,以及上一个 节点 是谁,具体用 Node来实现。常见的线性表有 LinkedList、单链表、双向链表、循环链表。

    对于线性表的操作方法,在线性表中插入的方法只需要改变 前后两个节点即可,因此插入效率比较高。在 线性表中查询某个元素 时需要遍历该元素之前的所有元素才能查找到该元素,因此查询效率 比较低。

    3、栈

    对于栈来说,最主要的实现策略是先进后出,所以常用的方法有push(压栈)、pop(出栈)。
    同时对于Java的jvm中也实现了此 数据结构 ,jvm中的线程栈,通过线程栈保证了线程的执行顺序。

    4、队列

    队列是只允许在队头、队尾进行 操作,因此队列 的基本操作 方法有:add()、remove()、poll()等。

    5、串

    是由N个字符组成的优先序列。在Java里面就是指String,而String里面是由chat[]来进行储存。

    展开全文
  • LSTM进阶:使用LSTM进行多维多步的时间序列预测

    万次阅读 多人点赞 2019-05-17 20:54:51
    现在我总结一下常用的LSTM时间序列预测: 1.单维单步(使用前两步预测后一步) 可以看到trainX的shape为 (5,2) trainY为(5,1) 在进行训练的过程中要将trainX reshape为 (5,2,1)(LSTM的输入为 [samples, ...
  • 数据结构:线性结构和非线性结构的理解

    万次阅读 多人点赞 2019-03-02 22:54:09
    我们知道数据结构是计算机存储、组织数据的方式。常见的数据结构分类方式如下图: 我们这里主要说一下线性结构和非线性结构 1. 线性结构 线性结构是什么? 数据结构中线性结构指的是数据元素之间存在着“一对一”的...
  • 由于通过键值查询的速度快如闪电,所以常用于Map、Dictionary或Object数据结构中。如上图所示,哈希表使用哈希函数(hash function)将键转换为数字列表,这些数字作为对应键的值。要快速使用键获取价值,时间复杂度...
  • 游戏开发中常用数据结构和算法

    千次阅读 多人点赞 2019-02-26 19:42:50
    让我们一步一步来,首先是常用数据结构,之后再来讲一讲常用的一些算法。   常用数据结构  数据结构是 计算机存储、组织数据的方式 ,是 相互存在一种或者多种特定关系的数据元素的集合 。当然在软件的...
  • 面试-8种 常用数据结构总结

    千次阅读 2018-12-12 11:52:54
    很多代码面试题都要求候选者深入理解数据结构,不管你来自大学计算机专业还是编程培训机构,也不管你多少年编程经验。有时面试题会直接提到数据结构,比如“给我实现一个二叉树”,然而有时则不那么明显,比如...
  • GIS常用数据结构

    千次阅读 2009-09-26 21:18:00
    GIS常用数据结构 陈玉进 李泉 南京跬步科技有限公司 ...信息(数据)之间往往是重要的结构关系,数据结构就是对数据表示以及其上操作或功能的封装,分逻辑结构和存储结构两个层面。逻辑结构定义了数据之
  • 系统地介绍了各种常用数据结构的逻辑特征、 存储方式和基 本运算。 主要内容包括: 顺序表、 栈、 队列、 链表、 串、 树形结构、 图、 多维数组、 广义表、 排序、 查找和文件等。 本书结构清晰, 内容充 实, ...
  • 数据结构常用算法

    万次阅读 多人点赞 2015-10-02 14:04:00
    1. 常见数据结构 人们进行程序设计时通常关注两个重要问题,一是如何将待处理的数据存储到计算机内存中,即数据表示;二是设计算法操作这些数据,即数据处理。数据表示的本质是数据结构设计,数据处理的本质是算法...
  • [数据结构]非线性结构——多维数组

    千次阅读 2015-07-09 21:25:51
    多维数组和广义表是一种复杂的非线性结构,它们的逻辑特征是:一个数据元素可能多个直接前驱和多个直接后继。 多维数组 1、一维数组(向量)——常用数据类型 一维数组(向量)是存储于计算机的连续存储空间中的...
  • 空间划分的数据结构(网格/四叉树/八叉树/BSP树/k-d树/BVH/自定义划分) 目录 网格 (Grid) 网格的应用 四叉树/八叉树 (Quadtree/Octree) 四叉树/八叉树的应用 BSP树 (Binary Space Partitioning Tree) ...
  • 数据结构Epub版本

    2019-01-23 21:07:33
    本书系统地介绍了各种常用数据结构的逻辑特征、存储方式和基本运算。主要内容包括:顺序表、栈、队列、链表、串、树形结构、图、多维数组、广义表、排序、查找和文件等。本书结构清晰,内容充实,实例丰富,符号、...
  • 线性结构作为最常用数据结构,其特点是数据元素之间存在一对一的线性关系。 线性结构两种不同的存储结构,即顺序存储结构和链式储存结构。顺序存储的线性表称为顺序表,顺序表中的存储元素是连续的。 链式存储的...
  • 常用数据结构之图的两种存储方式

    千次阅读 2019-04-20 10:09:58
    为了与树形结构进行区别,在图结构中常常将结点称为顶点,边是顶点的有序偶对。若两个顶点之间存在一条边,则表示这两个顶点具有相邻的关系。 图通常两种存储方式,即邻接矩阵和邻接表。 下面介绍一下邻接矩阵。...
  • 以下数据结构中,()是非线性数据结构A:树(二叉树) B:字符串 C:队列 D:栈 E:线性表 F:二维数组 G:多维数组数据的逻辑结构分为线性结构和非线性结构。 常用的线性结构:线性表,栈,队列,双队列,...
  • 八大数据结构及常见面试题

    千次阅读 2020-12-01 21:39:16
    几乎所有的问题都需要面试者对数据结构有深刻的理解。无论你是初入职场的新兵(刚从大学或者编程培训班毕业),还是拥有几十年经验的职场老鸟。 即便是对于一些非常基础的工作来说,学习数据结构也是必须的。那么,...
  • 数据结构与算法三十题,弄懂这些面试就够了!

    万次阅读 多人点赞 2019-02-01 08:30:28
    多种不同的基于哈希的数据结构,但最常用数据结构是哈希表。 哈希表通常使用数组实现。 哈希数据结构的性能取决于以下三个因素: 哈希函数 哈希表的大小 碰撞处理方法 下图展示了如何在数组中...
  • 线性和非线性数据结构分类

    千次阅读 2017-03-01 15:29:15
    数据结构按逻辑和存储结构,可以分为不同的类型  按逻辑可以分为以下三种:  1.集合  2.线性结构 是一个有序的数据元素集合,除第一个元素和最后一个元素外,其他元素与元素之间是首尾相接的,所以称之为线性...
  • 数据结构C++语言描述》在参考近年国内外出版的多种数据结构教材的基础上,系统介绍了常用数据结构。全书共分12章,内容包括绪论、C++类、线性表、栈、队列、串、多维数组、广义表、树和二叉树、图、排序和查找。对...
  • 在Kimball的维度建模的数据仓库中,关于多维体系结构(MD)三个关键性概念:总线架构(Bus Architecture),一致性维度(Conformed Dimension)和一致性事实(Conformed Fact)。 总线架构 多维体系结构(总线...
  • 作者 |云祁°封图|CSDN下载于视觉中国一、前言作者最近看了《Hadoop构建数据仓库实践》这本书,收获很多,把一些关于数仓实践的心得整理出来,方便大家共同学习。注:本文内容由作...
  • 数据结构与算法必知基础知识

    千次阅读 多人点赞 2021-01-06 22:58:12
    数据结构与算法是程序员内功体现的重要标准之一,且数据结构也应用在各个方面,业界更程序=数据结构+算法这个等式存在。各个中间件开发者,架构师他们都在努力的优化中间件、项目结构以及算法提高运行效率和降低...
  • 数据库简介、及常用数据库介绍

    万次阅读 多人点赞 2018-09-17 22:10:14
    一、数据库简介 数据库:就是数据的仓库,它是长期存储...而不同的数据库是按不同的数据结构来联系和组织的。而在当今的互联网中,最常见的数据库模型主要是两种,即关系型数据库(SQL)和非关系型数据库(NoSQL,N...
  • 数据结构基础概念篇

    万次阅读 多人点赞 2017-11-14 13:44:24
    数据结构一些概念 数据结构就是研究数据的逻辑结构和物理结构以及它们之间相互关系,并对这种结构定义相应的运算,而且确保经过这些运算后所得到的新结构仍然是原来的结构类型。数据:所有能被输入到计算机中,且能...
  • 游戏制作中的大宝剑---常用数据结构与算法

    千次阅读 多人点赞 2016-09-02 21:40:21
    让我们一步一步来,首先是常用数据结构,之后再来讲一讲常用的一些算法。   常用数据结构  数据结构是 计算机存储、组织数据的方式 ,是 相互存在一种或者多种特定关系的数据元素的集合 。当然在...
  • 数据结构专有名词&常见术语(中英双语)

    千次阅读 多人点赞 2019-01-01 15:28:16
    数据结构的一些常见术语的中英文双语对照,很多场合都可以用到, 比如编程命名,我觉得挺有用的,就收集在这里了 --_-- 目录 一. 常见术语 数据 Data 指针 Pointer 正确性 Correctness 线性表 Linear list 栈 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 31,710
精华内容 12,684
关键字:

常用的多维数据结构有哪些

数据结构 订阅