精华内容
下载资源
问答
  • 数据存储结构有哪些? 顺序存储 顺序存储 就是将数据一个接一个的存放,就是挨个存放。 先来后到,类似于我们 “排队” 的一个过程。 链式存储 链式存储 是将每个数据赋予一个节点URL,每个数据都有属于自己...

    数据的存储结构有哪些?

    顺序存储

    顺序存储 就是将数据一个接一个的存放,就是挨个存放。

    先来后到,类似于我们 “排队” 的一个过程。

    链式存储

    链式存储 是将每个数据赋予一个节点URL,每个数据都有属于自己的节点地址,此节点都是单独分配的,存储的时候不仅会存储数据元素,同时会附加存储该数据元素的节点地址。

    这个就类似于日常生活中的 “叫号” 过程。

    索引存储

    索引存储 就是存储数据元素的同时简历附加索引表,索引表中的索引项包含数据元素和存储地址。

    这个可以理解为我们小时候的用的《汉语词典》,每次去查一个不认识的字,就会先去翻目录查询,通过部首或者笔数去查。

    散列存储

    散列存储 是通过数据元素的关键字通过哈希函数直接计算出一个值,并将这个值作为该元素的存储地址。

    散列存储 又称(哈希存储),你也可以认为散列的同义词就是哈希。

    这个可以理解为我们平时用的百度搜索引擎,当我们去查某个知识点的时候,在百度网址里边输入关键字就能查到对应的信息,这个信息存储其实也可以理解为三列存储。

    相关资料:

    维基百科 - 数据结构

    百度百科 - 数据结构

    展开全文
  • #include #include #define BUFFERSIZE 120unsigned char *p;struct str1_t{unsigned char c;unsigned short s;unsigned int i;unsigned long l;}str1;struct str2_t{unsigned short s;unsigned int i;...

    #include

    #include

    #define BUFFERSIZE 120

    unsigned char *p;

    struct str1_t

    {

    unsigned char c;

    unsigned short s;

    unsigned int i;

    unsigned long l;

    }str1;

    struct str2_t

    {

    unsigned short s;

    unsigned int i;

    unsigned char c;

    }str2;

    struct str3_t

    {

    unsigned char ac[3];

    unsigned short s;

    }str3;

    struct str4_t

    {

    unsigned char c1[1];

    unsigned char c2[2];

    unsigned char c3[3];

    unsigned char c4[5];

    }str4;

    int main()

    {

    int in,i,len;

    in = 0x12345678;

    p = (unsigned char *)∈

    len = sizeof(in);

    printf("int size:%d\r\n", len);

    for(i=0; i

    printf("%2X ", *(p+i));

    printf("\r\n\r\n");

    str1.c = 0x12;

    str1.s = 0x34;

    str1.i = 0x56;

    str1.l = 0x78;

    p = (unsigned char *)&str1;

    len = sizeof(str1);

    printf("str1 size:%d\r\n", len);

    for(i=0; i

    printf("%2X ", *(p+i));

    printf("\r\n\r\n");

    str2.s = 0x12;

    str2.i = 0x34;

    str2.c = 0x56;

    p = (unsigned char *)&str2;

    len = sizeof(str2);

    printf("str2 size:%d\r\n", len);

    for(i=0; i

    printf("%2X ", *(p+i));

    printf("\r\n\r\n");

    str3.ac[0] = 0x12;

    str3.ac[1] = 0x34;

    str3.ac[2] = 0x56;

    str3.s = 0x78;

    p = (unsigned char *)&str3;

    len = sizeof(str3);

    printf("str3 size:%d\r\n", len);

    for(i=0; i

    printf("%2X ", *(p+i));

    printf("\r\n\r\n");

    str4.c1[0] = 0x1;

    str4.c2[0] = 0x2;

    str4.c2[1] = 0x3;

    str4.c3[0] = 0x4;

    str4.c3[1] = 0x5;

    str4.c3[2] = 0x6;

    str4.c4[0] = 0x7;

    str4.c4[1] = 0x8;

    str4.c4[2] = 0x9;

    str4.c4[3] = 0xa;

    str4.c4[4] = 0xb;

    p = (unsigned char *)&str4;

    len = sizeof(str4);

    printf("str4 size:%d\r\n", len);

    for(i=0; i

    printf("%2X ", *(p+i));

    printf("\r\n\r\n");

    unsigned short s = 0xF1;

    unsigned int i2 = 0xF2;

    unsigned char c = 0xF3;

    unsigned char buffer2[20];//avoid the memery overflow

    memset(buffer2, 0 , sizeof(buffer2));

    struct str2_t *pstr2;

    pstr2 = (struct str2_t *)&s;

    printf("%X %X %X\r\n", pstr2->s, pstr2->i, pstr2->c);

    return 0;

    }

    展开全文
  • 通过上节我们知道,数据结构是学习数据存储方式的一门学科,那么,数据存储方式哪几种呢?本节将对数据结构的学习内容做一个简要的总结。 数据结构大致包含以下几种存储结构: 线性表,还可细分为顺序表、链表、栈...

    通过上节我们知道,数据结构是学习数据存储方式的一门学科,那么,数据存储方式有哪几种呢?本节将对数据结构的学习内容做一个简要的总结。

    数据结构大致包含以下几种存储结构:
    线性表,还可细分为顺序表、链表、栈和队列;
    树结构,包括普通树,二叉树,线索二叉树等;
    图存储结构;

    下面对各种数据结构做详细讲解。
    线性表
    线性表结构存储的数据往往是可以依次排列的,就像小朋友手拉手,每位学生的前面和后面都仅有一个小朋友和他拉手,具备这种“一对一”关系的数据就可以使用线性表来存储。

    手拉手的小朋友

    例如,存储类似 {1,3,5,7,9} 这样的数据时,各元素依次排列,每个元素的前面和后边有且仅有一个元素与之相邻(除首元素和尾元素),因此可以使用线性表存储。

    线性表并不是一种具体的存储结构,它包含顺序存储结构和链式存储结构,是顺序表和链表的统称。
    顺序表
    顺序表,简单地理解,就是常用的数组,只是换了个名字而已,例如使用顺序表存储 {1,3,5,7,9},如图 1 所示:

    顺序表结构
    图 1 顺序表结构
    由于顺序表结构的底层实现借助的就是数组,因此对于初学者来说,可以把顺序表完全等价为数组,但实则不是这样。数据结构是研究数据存储方式的一门学科,它囊括的都是各种存储结构,而数组只是各种编程语言中的基本数据类型,并不属于数据结构的范畴。

    链表
    我们知道,使用顺序表(底层实现靠数组)时,需要提前申请一定大小的存储空间,这块存储空间的物理地址是连续的,如图 1 所示。

    链表则完全不同,使用链表存储数据时,是随用随申请,因此数据的存储位置是相互分离的,换句话说,数据的存储位置是随机的。

    为了给各个数据块建立“依次排列”的关系,链表给各数据块增设一个指针,每个数据块的指针都指向下一个数据块(最后一个数据块的指针指向 NULL),就如同一个个小学生都伸手去拉住下一个小学生的手,这样,看似毫无关系的数据块就建立了“依次排列”的关系,也就形成了链表,如图 2 所示:

    链表结构
    图 2 链表结构
    栈和队列
    栈和队列隶属于线性表,是特殊的线性表,因为它们对线性表中元素的进出做了明确的要求。

    栈中的元素只能从线性表的一端进出(另一端封死),且要遵循“先入后出”的原则,即先进栈的元素后出栈。

    栈结构示意图
    图 3 栈结构示意图

    栈结构如图 3 所示,像一个木桶,栈中含有 3 个元素,分别是 A、B 和 C,从在栈中的状态可以看出 A 最先进的栈,然后 B 进栈,最后 C 进栈。根据“先进后出”的原则,3 个元素出栈的顺序应该是:C 最先出栈,然后 B 出栈,最后才是 A 出栈。

    队列中的元素只能从线性表的一端进,从另一端出,且要遵循“先入先出”的特点,即先进队列的元素也要先出队列。

    队列结构示意图
    图 4 队列结构示意图

    队列结构如图 4 所示,队列中有 3 个元素,分别是 A、B 和 C,从在队列中的状态可以看出是 A 先进队列,然后 B 进,最后 C 进。根据“先进先出”的原则,3 个元素出队列的顺序应该是 A 最先出队列,然后 B 出,最后 C 出。
    树存储结构
    树存储结构适合存储具有“一对多”关系的数据。

    家庭族谱
    图 5 家庭族谱

    如图 5 所示,其中张平只有一个父亲,但他却有两(多)个孩子,这就是“一对多”的关系,满足这种关系的数据可以使用树存储结构。
    图存储结构
    图存储结构适合存储具有“多对多”关系的数据。

    图存储结构示意图
    图 6 图存储结构示意图

    如图 6 所示,从 V1 可以到达 V2、V3、V4,同样,从 V2、V3、V4 也可以到达 V1,这就是“多对多”的关系,满足这种关系的数据可以使用图存储结构。

    展开全文
  • 数据结构研究数据的逻辑结构存储结构数据的运算与实现数据项是数据 不可分割的最小单 3.通常设计一个好的算法应考虑达到以 下四个目标:正确性可性俺壮性 和效率与低存储量鼎求 4.下面程序段的时间复杂度是O(m*n) ...
  • 简单来说 数据结构有哪些? 存储方式上:链表形式,数组, 数据结构分别为逻辑结构、存储结构(物理结构) 逻辑结构又分为四类基本结构: 集合、线性结构、树形结构、图状结构(网状结构) 集合、线性...

     

     研究数据结构从三个方向进行 :
       逻辑结构
       存储结构
       操作
    

    简单来说 数据结构有哪些? 存储方式上:链表形式,数组,

     

    数据结构分别为逻辑结构、存储结构(物理结构)


    逻辑结构又分为四类基本结构:

     

      集合、线性结构、树形结构、图状结构(网状结构)

     

                 集合、线性结构??这两项有何区别?? 

     

                     集合:是数据元素之间的关系是  同属于一个集合

                     线性结构:  除了第一个和最后一个元素 ,其他每个元素都只有一个 直接前驱和一个直接后继。

                     树形结构: 每个元素若有之前 前驱,只能有一个。但可以有多个后继元素。

                      图形结构: 每个元素可以有多个直接前驱,和多个直接后继。

     


    存储结构(物理结构)又分为  顺序存储结构  和  链式存储结构,索引方式,散列。

             

     

                       索引方式,散列方式 是一种什么形式 ?

                     顺序方式:    元素按照某种顺序存放到一片 连续的存储单元。元素之间的逻辑关系是通过他们存储位置来体现。

                                         

                                          优势:

                                           1  元素直接的逻辑关系是通过他们存储位置体现,因此存储密度高。

                                            2 可以快速确定元素的存储位置,从而能够实现对元素的随机,快速访问。

                                          缺点:

                                         1   插入删除操作,可能会引起大量元素的移动,实现效率低。

                                           2  存储空间需要预先支配,如果定的太大会造成空间浪费

     

                      链式存储: 逻辑上相邻的元素,物理位置上未必相邻,元素之间的逻辑关系由附加的指针域表示。

                                 

                                          优势:

                                                 1  元素直接的关系通过指针域表示,因此插入 删除不会引起大量元素的移动。效率高。

                                                  2  可动态的申请 和 释放节点空间,所使用的存储空间大小 与实际存储的数据元素 保存 一致。

        

                    索引方式:  在存储数据元素的同时 再建立一个索引 表,索引表中的每一行 称为 索引 项 ,一般情况是 (关键字,地址)

     

                                        关键字:能够唯一标识一个数据元素 的一个或多个 数据项。

                                

                                          优势: 检索速度快

                                           缺点: 

                                                     1  增加索引表会占用存储空间 

                                                      2 在插入或者删除数据元素是需要修改 索引表,因而会话费时间。

     

                      散列方式:   数据元素的存储地址 是用他的关键字 计算出来的,散列方式又称为哈希表,凑杂表 

                                             优点: 检索,插入 ,删除操作很快。

                                             缺点: 如果使用了不好的 散列函数 ,可能会出现 存储单元冲突,为了解决冲突需要额外的时间和空间 开销。

     

    数据运算:

    常用的数据运算  有   插入 查找 删除  排序 更新。

    什么是算法????:  是对解决问题方法的 精确描述 ,用来完成 某个特定任务的有限步骤序列 。

     

     算法的基本特征:

     

       1:   有穷性,一个算法必须在执行 有穷步之后将结束,而且每一步都必须在又穷时间内结束。

       2: 确定性,算法中每一个指令 必须有确切的含义,且无二义性。

       3: 可行性, 算法中描述的所有操作都可以让已实现的 基本运算执行 有限次 完成,

        4: 输入

      5 : 输出 

     

    算法的评价 :

     

              1  算法的时间复制度:  根据算法 编写出来的程序 在计算机上运行时 所消耗的时间  。

               2 算法的空间复制度:  根据算法 编写出来的程序在 计算机上运行时 所需要的 存储空间 的大小。

     

     


    数据结构中,逻辑上(逻辑结构:数据元素之间的逻辑关系)可以把数据结构分成线性结构和非线性结构

     

     

    数组 (Array): 由一组 相同的数据 元素 构成的有限集合。 各元素之间  有顺序 关系。 
    
     在程序设计中,为了处理方便,
     把具有相同类型的若干变量按有序的形式组织起来。
    这些按序排列的同类数据元素的集合称为数组。
    在C语言中, 数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。
    因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。
    
     
    栈 (Stack):  只能在一端 插入和删除的 线性 表。 后进先出 last in first out   =lifo
      是只能在某一端插入和删除的 特殊  线性表。它按照 后进先出  的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,
    需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。
     
    队列 (Queue):  只能在一端 插入 和另一端 删除 的 线性表 。先进先出的原则  first in first out =fifo
    
      一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。
    队列中没有元素时,称为空队列。
    
     
    链表 (Linked List):
      是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。
    
     
    树 (Tree)
    
      是包含n(n>0)个结点的有穷集合K,且在K中定义了一个关系N,N满足 以下条件:
      (1)有且仅有一个结点 k0,他对于关系N来说没有前驱,称K0为树的根结点。简称为根(root)。
     (2)除K0外,k中的每个结点,对于关系N来说有且仅有一个前驱。
      (3)K中各结点,对关系N来说可以有m个后继(m>=0)。
    
     
    图 (Graph):
    
      图是由结点的有穷集合V和边的集合E组成。
    
     
    其中,为了与树形结构加以区别,在图结构中常常将结点称为    顶点,边是顶点的有序偶对,若两个顶点之间存在一条边,就表示这两个顶点具有相邻关系。
     
    堆 (Heap):  
    
      在计算机科学中,堆是一种特殊的树形数据结构,每个结点都有一个值。通常我们所说的堆的数据结构,是指二叉堆。堆的特点是根结点的值最小(或最大),且根结点的两个子树也是一个堆。  ??
     
    散列表 (Hash):
    
      若结构中存在关键字和K相等的记录,则必定在f(K)的存储位置上。由此,不需比较便可直接取得所查记录。称这个对应关系f为散列函数(Hash function),按这个思想建立的表为散列表。
     
    编程过程中如何选择 数据结构?
      
    
     

     

     

    展开全文
  • 1.数据结构有哪些

    2021-01-22 14:22:51
    2)线性结构有两种存储结构:顺序存储结构,链式存储结构。 3)顺序存储的线性表称为:顺序表,顺序表中的存储元素是连续的(内存地址是连续的)。 4)链式存储的线性表称为:链表,链表中的存储元素不一定是连续...
  • php数据结构课程---5、树(树的 存储方式 有哪些) 一、总结 一句话总结: 双亲表示法:data parent:$tree[1] = ["B",0]; 孩子表示法:data firstChild:firstChild把他的所有兄弟都用链表存起来 双亲孩子表示...
  • 数据结构是计算机存储、组织数据的方式。对于特定的数据结构(例如数组),有些操作效率很高(读某个数组元素),有些操作效率很低(删除...常用的数据结构有:数组、栈、队列、链表、图、树、前缀树、哈希表。 ...
  • (1)线性数据结构:元素之间一般存在元素之间存在一对一关系,是最常用的一类数据结构,典型的:数组、栈、队列和线性表。 (2)树形结构:结点间具有层次关系,每一层的一个结点能且只能和上一层的一个结点相关...
  • 用一组地址任意的存储单元存放线性表中的数据元素; Typedef struct LNode { ElemType data; // 数据域 struct LNode *next; // 指针域 } LNode, *LinkList; ;三单链表操作的实现; 因此查找第 i 个数据元素的基本...
  • 基本的数据结构有哪些

    千次阅读 2019-09-03 11:01:06
    图的存储结构: 1,邻接矩阵(数组表达) 2,邻接表和十字链表,链表表达,主要表达向图 3,邻接 表,链表,无向图 最小生成树: prim(普里姆算法) kruskal(克鲁斯卡尔算法) 形成闭环就抛弃 队列: ...
  • 提纲/1142.1 基本概念与ADT2.2 顺序表示2.3 链接表示2.4 应用举例2.5 矩阵2.6 广义表与动态存储管理/1142.1 基本概念与ADT2.2 顺序表示2.3 链接表示2.4 应用举例2.5 矩阵2.6 广义表与动态存储管理基本概念/114线性...
  • 最近刷知乎发现了一个很有意思的话题——算法数据结构有哪些奇技淫巧,来总结一下,学到不少。(*^▽^*) 1、找出只出现一次的数 在一个数组中有一个数只出现了一次,其他数都出现了两次,找出这个只出现了一次...
  • pytorch9 tensor数据结构与存储结构tensor数据结构与存储结构pytorch数据结构默认整数与浮点数dtype修改变量类型变量类型有哪些数据类型转换torch vs numpy两者转换两者区别张量张量修改尺寸张量内存存储结构存储区...
  • 基础的数据结构有:线性表(数组,链表),栈与队列,树与二叉树,图等 1. 冒泡 冒泡排序的思想: 每次比较两个相邻的元素, 如果他们的顺序错误就把他们交换位置。 快速排序使用分治法策略来把一个序列分为两个子序列...
  • 《数据结构有哪些》一节讲到,数据的存储方式可分为线性表、树和图三种存储结构,而每种存储结构又可细分为顺序存储结构和链式存储结构数据存储方式如此之多,针对不同类型的数据选择合适的存储方式是至关重要的。...
  • 1. 常见的数据结构有哪些? 1.1 数组 数组是最常用的数据结构,数组的特点是长度固定,可以用下标索引,并且所有的元素的类型都是一致的。数组常用的场景有:从数据库里读取雇员的信息存储为 EmployeeDetail[ ];把一...
  • 《数据结构有哪些》一节讲到,数据的存储方式可分为线性表、树和图三种存储结构,而每种存储结构又可细分为顺序存储结构和链式存储结构数据存储方式如此之多,针对不同类型的数据选择合适的存储方式是至关重要的。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,080
精华内容 832
关键字:

数据存储结构有哪些