码迷,mamicode.com
首页 > 其他好文 > 详细

数据结构--线性表的链式存储之循环双链表(6)

时间:2020-07-12 18:39:29      阅读:64      评论:0      收藏:0      [点我收藏+]

标签:代码   lazy   删除   定义   eof   位置   width   status   code   

一、什么是循环双链表

  从上一节我们看出循环单链表是尾节点指针指向头节点,那么以此类推,我们的循环双链表就是头节点的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;
}

 

数据结构--线性表的链式存储之循环双链表(6)

标签:代码   lazy   删除   定义   eof   位置   width   status   code   

原文地址:https://www.cnblogs.com/bearcanlight/p/13289271.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!