zoukankan      html  css  js  c++  java
  • 随笔58 关于链表

    1、在等概率情况下,顺序表的插入操作要移动__N/2____结点。

    【解析】

      添加到第1个,移动N个;
      添加到第2个,移动(N-1)个;
      ……
      添加到第N个,移动1个;
      添加到第(N+1)个,移动0个;
      平均:(0+1+2+……+N)/(N+1)=N/2;

    2、在等概率情况下,顺序表的删除操作要移动__(N-1)/2____结点。

    【解析】

      删除第1个,移动(N-1)个;

      删除第2个,移动(N-2)个;

      ……

      删除第N个,移动0个;

      平均:[0+1+……+(N-1)]/N=(N-1)/2;

    3、在等概率情况下,顺序表的查找操作要移动__(N+1)/2____结点。

    【解析】

      比较第1个,1

      比较第2个,2

      ......

      比较第N个,N

      平均:[0+1+……+(N-1) + N]/N=(N+ 1)/2;

    3、当静态链表采用数组实现时:

    定义一个较大的结构数组作为备用结点空间 ( 即存储池 ) 。当申请结点时,每个结点应含有两个域: data 域和 cursor 域。 data 域用来存放结点的数据信息,此时的 cursor 域不再是指针而是游标指示器,游标指示器指示其后继结点在结构数组中的相对位置 ( 即 数组下标) 。

    4、如果最常用的操作是取第i个结点及其前驱,则采用(顺序表存储方式最节省时间。

    顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构。线性表采用顺序存储的方式存储就称之为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。

    5、从大的方面来说,数据结构是反映数据的一种形式,它具体分为逻辑结构和物理结构,

    1,逻辑结构:它是表现数据之间的一种关系的结构,分为线性结构和非线性结构
    2,物理结构:它是表现数据的是如何存储的结构,计算机内部是如何安排该数据的存储,通常分为顺序结构,链式结构,索引结构,哈希结构

    顺序表是指用一组地址连续的存储单元依次存储数据元素的线性结构。

    哈希表 用散列法存储的线性表叫散列表。
    单链表 用一组地址任意的存储单元存放线性表中的数据元素,均只是一种存取结构,不是逻辑结构。
    有序表中所有元素以递增或递减方式排列对数据之间的关系进行了描述,是一种逻辑结构。
     
    6、栈也有两种存储方法:一是顺序栈;二是链式栈。栈的顺序存储结构是利用一组地址连续的存储单元依次存储自栈底到栈顶的数据元素,同时附设指针top指示栈顶元素的位置。由于栈的操作是线性表操作的特例,相对而言,链式栈的操作更易于实现。
     
    7、一个长度为99的循环链表,指针A和指针B都指向了链表中的同一个节点,A以步长为1向前移动,B以步长为3向前移动,一共需要同时移动多少步A和B才能再次指向同一个节点_99___。
    【解析】设走了x步,可以得到 3x - x = 99n,n = 2时可以整除,得到x = 99 。
     
    8、已知两个长度分别为m 和 n 的升序链表,若将它们合并为一个长度为 m+n 的降序链表,则最坏情况下的时间复杂度是(O(m+n)
     
    9、双链表:
    如果链表数据是无序的,则单向搜索与双向搜索平均速度相同
    如果链表是有序的,而要搜索的数据距离最小值(最大值)较近,这种情况下双向搜索平均速度更快。
    因此双向搜索更稳定,方差更小
     
    10、常见的数据结构:
    数组:连续存储,遍历快且方便,长度固定,缺点移除和添加需要迁移n个数据或者后移n个数据 
    链表:离散存储,添加删除方便,空间和时间消耗大,双向链表比单向的更灵活,但是空间耗费也更大 
    Hash表:数据离散存储,利用hash算法决定存储位置,遍历麻烦。以java的HashMap为例 
    二叉树:一般的查找遍历,有深度优先和广度优先,遍历分前序、中序、后序遍历,效率都差不多,但是如果数据经过排序,二叉树效率还是不错。 
    :表示物件与物件之间的关系的数学对象,常用遍历方式深度优先遍历和广度优先遍历,这两种遍历方式对有向图和无向图均适用,遍历查找不及前面人一种数据结构。
     
    11、稀疏矩阵压缩的存储方法是:
    ① 设m*n 矩阵中有t 个非零元素且t<<m*n,这样的矩阵称为稀疏矩阵。很多科学管理及工程计算中,常会遇到阶数很高的大型稀疏矩阵。如果按常规分配方法,顺序分配在计算机内,相当浪费内存的。为此提出另外一种存储方法,仅仅存放非零元素。但对于这类矩阵,通常零元素分布没有规律,为了能找到相应的元素,所以仅存储非零元素的值是不够的,还要记下它所在的行和列。于是采取如下方法:将非零元素所在的行、列以及它的值构成一个三元组(i,j,v),然后再按某种规律存储这些三元组,这种方法可以节约存储空间。

    ② 

    十字链表表示法可以避免大量移动元素。
    节点结构如下:  down指向同列下一个节点,right指向同行下一个节点
     
    矩阵部分表示如下:
    12、

    1.循环链表是另一种形式的链式存储结构。它的特点是表中最后一个结点的 指针 域指向 头结点 ,整个链表形成一个环。

      (1)单循环链表——在单链表中,将终端结点的指针域NULL改为指向表头结点或开始结点即可。

      (2)多重链的循环链表——将表中结点链在多个环上。

    2. 队列(Queue)是只允许在一端进行插入,而在另一端进行删除的运算受限的线性表;

    3. (stack)在计算机科学中是限定仅在栈顶进行插入或删除操作的线性表。

    4. “关联数组”是一种具有特殊索引方式的数组。不仅可以通过整数来索引它,还可以使用字符串或者其他类型的值(除了NULL)来索引它。   详情查看:   http://baike.baidu.com/link?url=yYrNB5t4PrCvs-XfxfEM0ZZfALpsEi3FYopk1v0BuopUSWOr7mS0Lou8C-SzhDnSuv7BH5vKIoIblvi8GgUmGq

            关联数组和数组类似,由以名称作为键的字段和方法组成。   它包含标量数据,可用索引值来单独选择这些数据,和数组不同的是, 关联数组的索引值不是非负的整数而是任意的标量。这些标量称为Keys,可以在以后用于检索数组中的数值。

      关联数组的元素没有特定的顺序,你可以把它们想象为一组卡片。每张卡片上半部分是索引而下半部分是数值。

    5.链表(Linked list)是一种常见的基础数据结构,是一种线性表,是一种物理存储单元上非连续、非顺序的存储结构。双向链表也叫双链表 ,是链表的一种,它的每个数据结点中都有两个 指针 ,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向 循环链表 。

     13、数据结构的基本概念:
    数据:信息的载体,能够被计算机识别、存储、加工,包括整数、实数、字符串、图像、声音等
    数据元素数据的基本单位,也称结点、元素、顶点、记录。一个数据元素可由若干个数据项组成
    数据项:是具有独立含义的最小标识单元,也称字段、域、属性
    数据结构:指数据之间的相互关系,即组织形式,有逻辑结构(一般程序中出现的形式)和物理结构之分(内存中的连续存储形式);逻辑结构又有线性(非空,仅由一个开始结点和一个终端结点,除首尾结点之外,所有节点均只有一个直接前区和一个直接后继,如一维数组、栈、队列、链表、串等)和非线性之分(一个结点可以有多个直接前区和多个直接后继,如多维数组、广义表、树、图等)
    14、
  • 相关阅读:
    各类电压标准
    intel-FPGA的片内存储器问题
    基于FPGA的DDS设计(二)
    SpringCloud整合SpringBootActuator
    SpringCloud搭建项目遇到的问题
    第一章 PostGreSQL安装
    Maven环境变量
    JDK环境变量配置
    switch(expression)支持和不支持的数据类型
    @RequestMapping、@ResponseBody和@RequestBody的使用
  • 原文地址:https://www.cnblogs.com/lyr612556/p/7875504.html
Copyright © 2011-2022 走看看