zoukankan      html  css  js  c++  java
  • 数据结构--线性表的链式存储之循环双链表(6)

    一、什么是循环双链表

      从上一节我们看出循环单链表是尾节点指针指向头节点,那么以此类推,我们的循环双链表就是头节点的prior指针指向尾节点。所以我们在判断循环双链表是否为空时就是其prior和next同时指向一个节点就为空。

       循环双链表的结构:

    typedef struct CDLinkNode {  //定义循环双链表的节点类型
        ElemType data;    //数据
        struct CDLinkNode *prior, *next;  //指针域
    }CDLinkNode, *CDLinkList;

      循环双链表的初始化:

    CDLinkList InitCDLinkList(CDLinkList L) {        //初始化循环单链表
        CDLinkNode *p;
        p = (CDLinkNode*)malloc(sizeof(CDLinkNode));
        p->prior = p;
        p->next = p;
        L = p;
    
        return L;
    }

    二、循环双链表的插入和删除

      插入操作:

    Status InsertCDLinkList(CDLinkList L, int i, ElemType e) {        //在表L中第i个位置插入元素e
        CDLinkList p = L;
    
        int j = 0;
    
        if (i > LengthDLinkList(L) + 1)        //如果需要插入节点的位置大于链表大小返回失败代码
            return -1;
    
        while (j < i - 1) {
            p = p->next;
            j++;
        }
    
        CDLinkNode *newSpace = (CDLinkNode*)malloc(sizeof(CDLinkNode));
        newSpace->data = e;
        newSpace->next = p->next;
        p->next->prior = newSpace;
        newSpace->prior = p;
        p->next = newSpace;
    
        return 1;
    }
    
    int LengthCDLinkList(CDLinkList L) {        //返回单链表的长度
        int i = 0;
        CDLinkList p = L;
    
        while (p!=L) {
            p = p->next;
            i++;
        }
    
        return i;
    }

    删除操作:

    Status DeleteElemCDLinkList(CDLinkList L, int i, ElemType *e) {        //删除表中第i个元素,并用e返回其值
        CDLinkList p = L;
        CDLinkNode *q;
        int j = 0;
    
        if (i > LengthDLinkList(L))
            return -1;
    
        while (j < i - 1) {
            p = p->next;
            j++;
        }
    
        q = p->next;
        p->next = q->next;
        q->next->prior = p;
        *e = q->data;
    
        free(q);
    
        return 1;
    }
    
    int LengthCDLinkList(CDLinkList L) {        //返回单链表的长度
        int i = 0;
        CDLinkList p = L;
    
        while (p!=L) {
            p = p->next;
            i++;
        }
    
        return i;
    }
  • 相关阅读:
    python 二维数组遍历
    WINFORM中treeview 节点显示不全
    C++函数式编程实现牛顿法
    C++函数式编程
    C++函数的重载
    默认形参值
    常量指针和指针常量
    C++值传递与引用传递
    C++变量和基本类型——2.3.1引用
    C++ 实参和形参
  • 原文地址:https://www.cnblogs.com/bearcanlight/p/13289271.html
Copyright © 2011-2022 走看看