zoukankan      html  css  js  c++  java
  • 基于数据存储管理的带有头尾指针的双向链表创建实例

    1.基于LRU算法的带有头尾指针的双向链表的数据结构

    typedef struct LRUEle        //LRU链表结点
    {
        LRUEle();
        int fid;                //帧号
        double b2dtime;            //最后两次使用的时间间隔
        struct LRUEle * next;    //后指针
        struct LRUEle * prior;    //前指针
    }Link;
    
    struct LRULinkList        //LRU链表
    {
        Link *head;            //头指针
        Link *tail;            //尾指针
    };

    2.建立一个带有头结点的空双向链表

    LRULinkList *lruList;
        //初始化一个带有头结点的空LRU双向链表
        Link * head=new LRUEle();  
        head->next = head;
        head->prior = head;
        Link * tail = head; 
      
        lruList=(LRULinkList *)malloc(sizeof(LRULinkList));  
     
        lruList->head=head;  
        lruList->tail=tail; 

    3.错误的实现方法

        //    Link * head=new LRUEle();   
        //  Link * tail=new LRUEle();   初始化时头尾指针已同一个结点,不应分配两个不同的内存空间
     
        //  head->next=tail;    这样的实现,相当于建立了两个空的头结点;对于插入、删除没有一点好处,而且浪费内存空间
        //  tail->next=head;  
        //  head->prior=tail;  
        //  tail->prior=head;  

    4.带有头尾指针的单链表的数据结构

    typedef struct LNode {//结点类型  
        ElemType data;  
        struct LNode * next;  
    } Link, * Position;  
      
    typedef struct {//链表类型  
        Link * head;  
        Link * tail;    
    } LinkList; 

    5.带有头尾指针的单链表的初始化

        LinkList * l = (LinkList *)malloc(sizeof(LinkList));
        l->head = (Link *)malloc(sizeof(Link));  
        l->tail = (Link *)malloc(sizeof(Link));  
        if(!l->head || !l->tail)  
            exit(OVERFLOW);  
        l->head = l->tail;  
        l->tail->next = NULL;  
        return OK;  

    6.带有头尾指针的单链表与双向链表初始化的不同:见红色部分!!

    一定要注意对只含头尾指针的结构体分配内存空间(红色部分)。

  • 相关阅读:
    操作文件和目录【TLCL】
    nginx location正则写法
    elasticsearch分词器ik
    mongodb权限管理
    kafka调试遇到的问题
    mysql 安装
    jenkins 安装 + maven + git部署
    FTP服务搭建
    根据终端类型返回不同的访问内容
    上传jar包至nexus
  • 原文地址:https://www.cnblogs.com/fuleying/p/3405099.html
Copyright © 2011-2022 走看看