本网站(662p.com)打包出售,且带程序代码数据,662p.com域名,程序内核采用TP框架开发,需要联系扣扣:2360248666 /wx:lianweikj
精品域名一口价出售:1y1m.com(350元) ,6b7b.com(400元) , 5k5j.com(380元) , yayj.com(1800元), jiongzhun.com(1000元) , niuzen.com(2800元) , zennei.com(5000元)
需要联系扣扣:2360248666 /wx:lianweikj
Java数据结构与算法学习之循环链表
sz199511 · 214浏览 · 发布于2021-12-28 +关注

循环链表是另一种形式的链式存储结构。它的特点是表中最后一个结点的指针域指向头结点,整个链表形成一个环。本文将为大家详细介绍一下循环链表的特点与使用,需要的可以了解一下

    存储结构示意图

    优点 : 能够通过任意结点遍历整个链表结构

    初始化循环链表 

    1.循环链表的结点

    typedef struct CircularNode {
        ElementType date; //数据域
        struct CircularNode* next; //指向下一个结点的指针域
      
    }CircularNode;


    2.循环链表结构 

    typedef struct CircularLinkList {
        CircularNode* next;   //指向第一个结点的头指针,头指针
        int length;          
    }CircularLinkList;

     

    循环链表的插入

    需要考虑两种情况

    1.插入的链表长度为 0   node -> next = node;

    2.插入的链表长度不为0 node -> next = clList -> next   lastNode -> next = node 

    首位置

    代码实现

    其他位置

    代码实现(总)

    void InsertCircularLinkList(CircularLinkList* clList, int pos, ElementType element)
    {
        //创建一个空节点
        CircularLinkList* node = (CircularLinkList*)malloc(sizeof(CircularLinkList));
       node->date = element;
        node->next = NULL;
        if (pos == 1) {
            node->next = clList->next;
            if (!node->next) {
                //如果插入的链表长度为0
                node->next = node;
            }
            else {
                //如果长度不为0,就要找到链表的最后一个结点并改变其指针域
                CircularLinkList* lastNode = clList->next;
                for (int i = 1; i < clList->length; i++)
                {
                    lastNode = lastNode->next;
                }
                clList->next = node;
                clList->length++;
            }
            return;
        }
        //插入的不是第一个结点
        CircularLinkList* currNode = clList->next;
        for (int i = 1; i < pos - 1; i++)
            currNode = currNode->next;
        if (currNode) {
            node->next = currNode->next;
            currNode->next = node;
            clList->length++;
            if (pos == clList->length) {
                node->next = clList->next;
            }
        }
    }


     

    循环链表的删除

    1.操作的为第一个元素

    代码实现

    2.操作元素不为第一个元素

    代码实现

    代码实现(总)

    ElementType DeleteCircularLinkList(CircularLinkList* clList, int pos)
    {
        ElementType element;
        element.id = -999;
        if (pos == 1) {
            CircularLinkList* node = clList->next;
            if (node) {
                //找到最后一个结点,改变其指针域的指向
                CircularLinkList* lastNode = clList->next;
                for (int i = 1; i < clList->length; i++) {
                    lastNode = lastNode->next;
                }
                clList->next = node->next;
                lastNode->next = clList->next;
                free(node);
                clList->length--;
            }
            return;
        }
        CircularLinkList* preNode;
        CircularLinkList* node = clList->next;
        for (int i = 1; node && i < pos; i++) {
            preNode = node;
            node = node->next;
        }
        if (node) {
            element = node->date;
            preNode->next = node->next;
            free(node);
            clList->length--;
        }
        return element;
    }


     

    循环链表的常见操作 

    已知 P 结点是循环链表的中间结点,通过该节点遍历循环链表

    代码实现

    CircularNode* GetCircularLinkListNode(CircularLinkList* clList, ELementType element)
    {
        CircularNode* node = clList->next;
        if (!node) return NULL;
        do {
            if (element.id == node->date.id && strcmp(element.name, node->date.name) == 0) {
                return node;
            }
        } while (node == clList->next);
        return NULL;
    }


     


    相关推荐

    PHP实现部分字符隐藏

    沙雕mars · 1325浏览 · 2019-04-28 09:47:56
    Java中ArrayList和LinkedList区别

    kenrry1992 · 908浏览 · 2019-05-08 21:14:54
    Tomcat 下载及安装配置

    manongba · 970浏览 · 2019-05-13 21:03:56
    JAVA变量介绍

    manongba · 962浏览 · 2019-05-13 21:05:52
    什么是SpringBoot

    iamitnan · 1086浏览 · 2019-05-14 22:20:36
    加载中

    0评论

    评论
    不积跬步无以至千里,不积小流无以成江海!
    分类专栏
    小鸟云服务器
    扫码进入手机网页