• 线性表的顺序存储和链式存储


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

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

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

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

    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为第一个结点。

  • 相关阅读:
    eclipse maven项目 热部署
    二十三. Django ModelForm组件
    二十二 .Django生命周期
    二十二 .Django form上传+Ajax+FormData上传+Form组件上传+序列化+ifram伪造Ajax
    二十一. Django----ajax全部
    二十. Django ajax--请求数据 和模态对话框
    二十. Django分页 和自定义分页
    十九. Django-Cookie的CBV和FBV的用户验证装饰器
    十八 .Django session应用
    十七 .Django cookie应用
  • 原文地址:https://www.cnblogs.com/chenweichu/p/6405920.html
Copyright © 2020-2023  润新知