数据结构_知识点_循环链表&双链表

作者: 个革马 | 来源:发表于2017-01-15 11:18 被阅读79次

1. 循环链表

与单链表基本无异,但有如下两点需要注意:
(1)最后一结点的指针域必须指向头结点,这样才能循环
(注意,指向的是没有存数据头结点,而非第一个存有数据的结点)

(2)使用尾指针而非头指针表示链表,这样找寻头结点和尾结点的时间复杂度为O(1)。

2. 双链表定义

//结点定义,每个结点除了数据项还有前驱指针和后继指针
typedef struct Node
{
    elemType data;
    Node *prior,*next;  
};

typedef Node *List;

3. 创建双链表

这里值得注意的是,链表为空是,头结点的前驱指针和后继指针均指向它自己。
因而在创建或插入结点的时候,要记得把头结点的前驱指针修改成最后一个结点。

4. 插入和删除

插入:查找到插入位置,修改前驱结点和后继结点的指针

bool insert(List &l,int i,elemType e)
{
    Node *p,*q,*s;
    int j;

    p = l->next;
    
    //找寻插入位置 
    for(j = 1;j<i && p;j++)
    {
        p = p->next;
    }
    
    s = (Node *)malloc(sizeof(Node));
    s->data = e;
     
    s->prior = p->prior;
    s->next = p;
    
    //修改前驱结点的后继指针 
    p->prior->next = s;
    //修改后继结点的前驱指针 
    p->prior = s;   
}

删除:找到删除结点,修改前驱结点的后继指针,后继结点的前驱指针

bool deleteNode(List &l,int i)
{
    Node *p;
    int j;
    
    p = l->next;
    
    for(j = 1;j<i;j++)
    {
        p = p->next;
    }
    
    //修改前驱结点的后继指针 
    p->prior->next = p->next;
    //修改后继结点的前驱指针 
    p->next->prior = p->prior;
    //释放结点 
    free(p);
}

相关文章

  • 数据结构笔记

    数据结构课程概览 ================== 1.顺序表 2.链表:单链表,单向循环链表,双链表...

  • 集合-LinkedList解析

    一、概要 Java中底层数据结构是链表、双端链表,Android中数据结构是双向循环链表 非线程安全数据结构,允许...

  • 数据结构_知识点_循环链表&双链表

    1. 循环链表 与单链表基本无异,但有如下两点需要注意:(1)最后一结点的指针域必须指向头结点,这样才能循环(注意...

  • 常见的数据结构

    常见的数据结构有: 数组 链表单链表、双向链表、循环链表、双向循环链表、静态链表 栈顺序栈、链式栈 队列普通队列、...

  • 算法与数据结构:链表

    链表是一种不连续的线性数据结构。常见的有单链表,循环链表,双链表。 链表通过指针将一组零散的内存块串...

  • 专项练习数据结构之链表

    1.链表:单链表,双链表,循环链表 2.单链表 单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表...

  • 链表(数据结构)

    本篇文章主要针对《数据结构》中的单链表,循环链表,循环双链表的增删查改以及一些常用算法进行详尽的代码描述。本代码使...

  • 数据结构 | 其二 链表

    冰河winner - 数据结构之链表 2.1 单向链表 数据结构(一) 单链表的实现-JAVA 2.2 双端链表 ...

  • 0x05双向循环链表

    1 双向循环链表创建 2 双向循环链表插入元素 3 遍历双向循环链表 4双向循环链表删除结点

  • 链表

    内容 链表数据结构 向链表添加元素 从链表移除元素 使用 LinkedList 表 双向链表 循环链表 链表数据结...

网友评论

    本文标题:数据结构_知识点_循环链表&双链表

    本文链接:https://www.haomeiwen.com/subject/pbpybttx.html