首页 > 其他分享 >数据结构:双链表

数据结构:双链表

时间:2023-12-13 17:22:18浏览次数:39  
标签:结点 NULL return next prior 双链 数据结构 DNode

由于双链表中大部分操作其实和单链表操作类似,所以这里只挑关键的一些函数
1、定义与初始化

typedef struct DNode
{
    ElementType data;
    struct DNode *prior,*next;
}DNode,*DLinkList;

bool InitialDLinkList(DLinkList &L){
    L = (DNode *)malloc(sizeof(DNode));
    if (L==NULL)
    {
        return false;
    }
    L->prior = NULL;
    L->next = NULL;
    return true;
    
}

2、在某结点添加和删除后继结点

bool InsertNextDNode(DNode *p,DNode *s){//在p结点添加后继结点
    if (p==NULL||s==NULL)
    {
        return false;
    }
    s->next = p->next;
    if (p->next!=NULL)
    {
        p->next->prior=s;
    }
    s->prior = p;
    p->next = s;
    return true;
}

bool DeletNextDNode(DNode *p){//删除p的后继结点
    if(p==NULL) return false;
    DNode *q = p->next;
    if (q==NULL) return false;
    p->next = q->next;
    if (q->next!=NULL)
        q->next->prior=p;
    free(q);
    return true;
    
}

3、摧毁整个双链表

oid DestroyDLinkList(DLinkList &L){
    while (L->next!=NULL)
    {
        DeletNextDNode(L);
    }
    free(L);
    L=NULL;
}

4、打印链表,包括打印整个链表,和从某个结点开始前向或者后向打印

void print(DLinkList &L){
    DNode *p = L->next;
    while(p->next!=NULL){
        printf("%d",p->data);
        p=p->next;
    }
}

void print_next(DNode *p){
    while(p->next!=NULL){
        printf("%d",p->data);
        p=p->next;
    }
}

void print_prior(DNode *p){
    while(p->prior!=NULL){
        printf("%d",p->data);
        p=p->prior;
    }
}

标签:结点,NULL,return,next,prior,双链,数据结构,DNode
From: https://www.cnblogs.com/humanplug/p/17899517.html

相关文章

  • 学习文件系统的数据结构
    学习文件系统的数据结构:深入理解计算机系统和操作系统运作的关键一步。以下是一份关于学习文件系统数据结构的学习总结,可能会帮助你系统地回顾所学的知识:inode(索引节点):1.inode是文件系统中非常重要的数据结构,它存储了文件的元数据,包括文件的大小、权限、拥有者等信息。2.理......
  • 数据结构---队列
    队列(Queue)是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。这种操作方式通常被称为FIFO(FirstInFirstOut,先进先出)。队列中的插入操作也被称为入队(enqueue),而删除操作则被称为出队(dequeue)。队列中的元素只能从一端(称为队头)添加......
  • 数据结构---栈
    栈(Stack)是一种线性数据结构,它按照后进先出(LIFO,LastInFirstOut)的原则存储和管理数据。这意味着最后一个被添加到栈中的元素将是第一个被移除的元素。栈的主要操作包括:压栈(Push):在栈的顶部添加一个元素。弹栈(Pop):移除栈顶部的元素。查看栈顶(Peek/Top):查看栈顶部的元素但不移除......
  • [持续更新][数据结构][算法]涵盖线性表、栈、链表、队列、图、动态规划、分治递归、回
    备考考点整理内部排序表格树的主要考点二叉树的常考紧紧抓住\(n_0=n_2+1\)\(n=n_0+n_1+n_2...n_m\)\(n=n_1+2*n_2+3*n_3...m*n_m\)+1哈夫曼树没有度为1的结点,也就是\(n_1=0\)完全二叉树常考总结最大岛屿问题(dfs模板)#include<iostream>#include<algorith......
  • Python_数据结构的应用heap
    数据结构栈-->stack队列-->queue树-->tree堆-->heap散列-->hash图-->graph图结构一般包括顶点和边邻接矩阵DAG,DirectedAcyclicGraph即「有向无环图」树树(Tree)是一种非线性的数据结构,由n个节点组成,其中每个节点都有零个或多个子节点。......
  • Redis数据结构3:REDIS_LISTNODE
    REDIS_LISTNODEREDIS_LISTNODE本质上与Java的LinkedList一致,NodeList即为链表,是基本的线性结构。C语言原生没有对链表的支持,Redis对链表进行了实现。listNodetypedefstructlistNode{structlistNode*prev;structlistNode*next;void*value;}listNode;l......
  • java-数据结构
    数据结构A:栈先进后出B:队列先进先出C:数组查询快,增删慢D:链表查询慢,增删快List的三个实现类(1)List的三个实现类特点A:ArrayList底层数据结构是数组,查询快,增删慢线程不安全,效率高B:Vector底层数据结构是数组,查询快,增删慢线程安全,效率低C:LinkedList底层数据结......
  • java-数据和集合 and 数据结构
    1:数组:基本类型的数组:int[]引用类型的数组:Student[]2:Collection集合(掌握)(1)集合的由来我们学习的是面向对象的语言,而面向对象的语言常见的操作就是操作对象。为了方便我们对多个对象进行操作,我们可以使用对象数组来进行。但是对象数组的长度是固定的,不适应变化的需求,所......
  • 数据结构--二叉树的生成和遍历(9)
    好久没有更新博客了,关于二叉树也查了不少资料,下面写上我对二叉树的理解。一、什么是二叉树二叉树是一种树形结构,其中每个节点的叶子节点不超过两个,而且二叉树的左右子树是有顺序的,顺序不能颠倒如下图所示,一下四种都属于二叉树。  二、特殊的二叉树1.满二叉树:听名......
  • 【JavaSE】数据结构(栈、队列、数组、链表)
    什么是数据结构?数据结构是计算机底层存储、组织数据的方式,是指数据相互之间是什么方式排列在一起的常见的数据结构栈、队列、数组、链表二叉树、二叉查找树、平衡二叉树、红黑树哈希表栈特点:先进后出队列特点:先进先出数组特点:有索引,内存连续优点:查询速度快O(1)缺点:增......