zoukankan      html  css  js  c++  java
  • 线性表链式存储结构

    链式存储 :用一组任意的存储单元存储线性表中的数据元素。用这种方法存储的线性表简称线性链表。存储链表中结点的一组任意的存储单元可以是连续的,也可以是不连续的,甚至是零散分布在内存中的任意位置上的。

    为了正确表示结点间的逻辑关系,在存储每个结点值的同时,还必须存储指示其直接后继结点的地址(或位置),称为指针(pointer)或链(link),这两部分

    组成了链表中的结点结构,如下图所示。

    data :数据域,存放结点的值。next :指针域,存放结点的直接后继的地址。 

    指针域和数据域组成数据元素称为存储映象,称为结点(NODE).

    把链表中的第一个结点的存储位置叫做头指针,最后一个结点指针为空(NULL)

    头指针和头结点的区别:
    头指针:
    --头指针是指链表指向第一个结点的指针,若链表有头结点,则是指向头结点的指针
    --头指针具有标识作用,所以头指针冠以链表的名字(指针变量的名字)
    --无论链表是否为空,头指针均不为空
    --头指针是链表的必要元素
     
    头结点:
    --头结点是为了操作的统一和方便而设立的,放在第一个元素的结点之前,其数据域一般无意义(但也可以用来存放链表的长度)
    --有了头结点,对在第一元素结点前插入结点和删除第一结点起操作与其它结点的操作就统一了
    --头结点不一定是链表的必要元素

     单链表存储结构

    typedef struct Node
    {
        ElemType data;  //数据域
        struct Node* Next;//指针域  
    }Node;
    typedef struct Node* LinkList;

    如果p->data  = ai , 那么p->next->data=ai+1

    Status GetElem( LinkList L, int i =, ElemType *e)
    {
        int j;
        LinkList p;
        p= L->next;
        j=1;
       while(p && j<i)
       {
           p= p->next;
           ++j;
       }
       if( !p || j>i)
       {
           return ERROR;
        }
       *e = p->data;
       return OK;
    }

     单链表,插入时间复杂度O(1) 。

  • 相关阅读:
    windows sharepoint service 适配器 使用说明
    Windows SharePoint Services 适配器 启动工作流失败的解决方案。
    编写一个SharePoint 自定义Web服务
    任意输入三个数,获得最大值
    用ASP获取别的网页的内容
    k8s搭建web界面管理rancher
    CRT 远程连接 ubuntu失败
    开源Nginx 文件上传服务器。ngx_upload_module+web.py+gevent+varnish前端缓存
    Esxi 5.1 添加存储设备的问题
    Abp Vnext 中如何统一接口返回值
  • 原文地址:https://www.cnblogs.com/wy9264/p/12019491.html
Copyright © 2011-2022 走看看