zoukankan      html  css  js  c++  java
  • DS-7-双链表的初始化,插入,删除与遍历

    初始化:

    typedef struct DNode { 
        int data; 
        struct DNode *prior,*next;   
    }DNode, *DLinkList;
    
    //初始化双链表 
    bool InitDLinkList(DLinklist &L) {
        L = (DNode *)malloc(sizeof(DNode));  //分配一个头结点 
        if (L == NULL) //内存不足,分配失败 
            return fatse;
        L->prior = NULL; //头结点之后暂时还没有节点
        L->next = NULL; //头结点的 prior 永远指向 NULL  
        return true;
    }
    
    //判断双链表是否为空(带头结点) 
    bool Empty(DLink list L) {
        if (L->next == NULL)
            return true;
        else
            return false;
    }

    后插操作:

    //在p结点之后插入s结点 
    bool InsertNextDNode(DNode *p, DNode *s) {
        if (p == NULL Il s == NULL) //非法参数
            return false;
        s->next = p->next;
        if (p->next != NULL) //如果p结点有后继结点
            p->next->prior = s;
        s->prior = p;  
        p->next = s;
        return true;
    }

    有了后插操作,类似的按位序插入与前插操作也是很容易实现

    删除与销毁:

    //删除p结点的后继结点 
    bool DelLeteNextbNode(DNode *p) 
        if (p == NULL) 
            return false;
        DNode *q = p->next; //找到p的后继结点q 
        if (q == NULL)
            return false;   //p没有后继
        p->next = q->next; 
        if(q->next!=NULL)   //q结点不是最后一个结点 
            q->next->prior=p;  
        free(q);    //释放结点空间
        return true;
    }
    
    //销毁双链表L
    void DestoryList(DLinklist &L){
        //循环释放各个数据结点 
        while (L->next != NULL) 
            DeleteNextDNode(L); 
        free(L); //释放头结点 
        L=NULL;  //头指针指向NULL 
    }

    遍历:

    //后向遍历
    while (p != NULL) { 
        // 对 结点 p 做相应处理,如打印 
        p = p->next; 
    }
    
    //前向遍历
    while (p != NULL) { 
        // 对结点 p 做相应处理 
        p = p->prior; 
    }
    
    //前向遍历(跳过头结点)
    while (p->prior != NULL) { 
        // 对结点 p 做相应处理 
        p= p->prior; 
    }

    双链表不可随机存取,按位查找、按值查找操作都只能用遍历的方式实现

  • 相关阅读:
    solr的安装
    数据导出/下载
    在realm中动态查询用户的权限&角色
    总结权限控制方式 ----------(2)
    shiro 权限过滤器 -------(1)
    NoSession问题
    hibernate中对象的3种状态----瞬时态、持久态、脱管态
    BaseAction 使用
    分页工具类 BaseAction
    2019-2020-1 20175316 《信息安全系统设计基础》第1-2周学习总结
  • 原文地址:https://www.cnblogs.com/swefii/p/13158701.html
Copyright © 2011-2022 走看看