基于数据存储管理的带有头尾指针的双向链表创建实例

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.带有头尾指针的单链表与双向链表初始化的不同:见红色部分!!

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

 

转载于:https://www.cnblogs.com/fuleying/p/3405099.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值