zoukankan      html  css  js  c++  java
  • 线性表的顺序存储和链式存储

    一、线性表是一种逻辑数据结构。

    线性表是最基本、最简单、也是最常用的一种数据结构。 

    线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的(注意,这句话只适用大部分线性表,而不是全部。比如,循环链表逻辑层次上也是一种线性表(存储层次上属于链式存储),但是把最后一个数据元素的尾指针指向了首位结点)。
     
    我们说“线性”和“非线性”,只在逻辑层次上讨论,而不考虑存储层次,所以双向链表和循环链表依旧是线性表。
    在数据结构逻辑层次上细分,线性表可分为一般线性表和受限线性表。一般线性表也就是我们通常所说的“线性表”,可以自由的删除或添加结点。受限线性表主要包括栈和队列,受限表示对结点的操作受限制。

    二、线性表的实现。线性表的顺序存储结构和线性表的链表存储结构。

    2.1、顺序存储

    所谓顺序存储,是用数组来实现的,在内存中分配一块连续的地址区间,将数据按顺序存储到该数组中;

    a1 a2 a3 a4 a5 ...... ai-1 ai

    ......

    an

    存储结构如下:

    #define MAXSIZE 20

    typedef int ElemType ;

    typedef struct

    {

          ElemType data[MAXSIZE] ;

          int length ;

    }SqLst ;

    2.2、单链表结构

    线性表的链式存储结构每个数据元素包含两部分信息,一部分是数据信息,叫做数据域;一部分是指针域,存放后继元素的地址信息。

    每个链表有一个头指针,指向链表的第一个元素;链表的最后一个元素的指针域为NULL。有的链表包含头结点、有的链表不包含头结点。头结点并不是真正意义上的第一个结点,因为它的数据信息是没有意义的。

    单链表结构描述:

    typedef struct Node

    {

         ElemType data ;

         struct Node *node ;

    }Node ;

    typedef struct Node *LinkList ;

    LinkList L :这里的L其实就相当于链表的头指针,指向这个链表。如果是没有头结点的链表,那么L就是指向的第一个结点,L->data为第一个结点的数据域;L->next为第二个节点。但是如果链表是有头结点的,L->next才是第一个结点。

    LinkList *L :这里的L是指向链表的头指针的指针,*L才是链表的头指针,因此如果没有头结点的链表,那么(*L)就是指向第一个结点,(*L)->data就是第一个结点的数据域;如果是带有头结点的链表,(*L)->next为第一个结点。

  • 相关阅读:
    Sentinel实现熔断和限流
    Nacos 服务注册和配置中心
    SpringCloud Sleuth 分布式请求链路跟踪
    SpringCloud Stream消息驱动
    SpringCloud Bus消息总线
    SpringCloud Config分布式配置中心
    Geteway服务网关
    Hystrix断路器
    libecc:一个可移植的椭圆曲线密码学库
    第四十二个知识点:看看你的C代码为蒙哥马利乘法,你能确定它可能在哪里泄漏侧信道路吗?
  • 原文地址:https://www.cnblogs.com/chenweichu/p/6405920.html
Copyright © 2011-2022 走看看