双链表

您所在的位置:网站首页 正确睡觉枕枕头方式是什么 双链表

双链表

2024-07-17 11:14:22| 来源: 网络整理| 查看: 265

文章目录 双链表的定义双链表上的操作初始化插入操作建立双链表头插法建立双链表尾插法建立双链表 遍历操作求双链表的长度查找操作按值查找按位查找 删除操作判空操作 完整代码及实例总结

双链表的定义

 为什么引入双链表?

 单链表的结点中只有一个指向其后继的指针,使得单链表要访问某个结点的前驱结点时,只能从头开始遍历,访问后驱结点的复杂度为O(1),访问前驱结点的复杂度为O(n)。为了克服上述缺点,引入了双链表。

 双链表的结点中有两个指针prior和next,分别指向前驱结点和后继结点。

 双链表中结点类型的描述:

typedef struct DNode{ int data; //数据域 struct DNode *prior,*next; //前驱和后继指针 }DNode, *DLinkList; 双链表上的操作 初始化

 双链表与单链表一样,为了操作方便也可以加入头结点,那么初始化双链表其实就是定义一个头结点,然后将指针域置空。

在这里插入图片描述

//初始化 void InitList(DLinkList &L){ L = (DNode *)malloc(sizeof(DLinkList)); L->prior = NULL; L->next = NULL; } 插入操作

  在双链表中p所指的结点之后插入结点*s,其指针的变化过程如下图所示: 插入操作  实现代码:

//将x插入到双链表L中*p结点的下一个结点 void Insert(DLinkList &L, DNode *p, int x){ DNode *s = (DNode *)malloc(sizeof(DNode)); s->data = x; s->next = p->next; //1 p->next->prior = s; //2 s->prior = p; //3 p->next = s; //4 }

 当然,插入操作的语句并不只有这一种顺序,但必须保证1和2两步必须在4步之前,否则*p的后继结点的指针就会丢掉,导致插入失败。

建立双链表 头插法建立双链表

 每次在头结点的后面插入新结点。

 实现代码:

//头插法建立双链表 DLinkList HeadInsert(DLinkList &L){ InitList(L); //初始化 int x; cin>>x; while(x!=9999){ DNode *s = (DNode *)malloc(sizeof(DNode)); s->data = x; if(L->next == NULL){ s->next = NULL; s->prior = L; L->next = s; }else{ s->next = L->next; L->next->prior = s; s->prior = L; L->next = s; } cin>>x; } return L; } 尾插法建立双链表

 每次在双链表的尾部插入新结点,为此,应该声明一个尾指针r并始终指向尾结点。

 实现代码:

//尾插法建立双链表 DLinkList TailInsert(DLinkList &L){ InitList(L); DNode *s,*r=L; int x; cin>>x; while(x!=9999){ s = (DNode *)malloc(sizeof(DNode)); s->data = x; s->next = NULL; s->prior = r; r->next = s; r = s; cin>>x; } return L; } 遍历操作

 从单链表的第一个结点开始,依次遍历输出结点的数据直到最后一个结点。

 实现代码:

//遍历操作 void PrintList(DLinkList L){ DNode *p = L->next; while(p){ cout len++; p = p->next; } return len; } 查找操作 按值查找

 查找值x在L中的位置。与单链表的按值查找是一样的,不会用到前驱结点指针prior。

 实现代码:

//按值查找:查找x在L中的位置 DNode *LocateElem(DLinkList L, int x){ DNode *p = L->next; while(p && p->data != x){ p = p->next; } return p; } 按位查找

 查找在双链表L中第 i 个位置的结点。与单链表的按位查找是一样的,不会用到前驱结点指针prior。

 实现代码:

//按位查找:查找在双链表L中第i个位置的结点 DNode *GetElem(DLinkList L, int i){ int j=1; DNode *p = L->next; if(i==0)return L; if(i if(iLength(L)){ coutnext->prior = p; //2 free(q); } 判空操作

 判断双链表是否为空。

 实现代码:

//判空操作 bool Empty(DLinkList L){ if(L->next == NULL){ cout int data; struct DNode *prior,*next; }DNode, *DLinkList; //初始化 void InitList(DLinkList &L){ L = (DNode *)malloc(sizeof(DLinkList)); L->prior = NULL; L->next = NULL; } //遍历操作 void PrintList(DLinkList L){ DNode *p = L->next; while(p){ cout len++; p = p->next; } return len; } //头插法建立双链表 DLinkList HeadInsert(DLinkList &L){ InitList(L); //初始化 int x; cin>>x; while(x!=9999){ DNode *s = (DNode *)malloc(sizeof(DNode)); s->data = x; if(L->next == NULL){ s->next = NULL; s->prior = L; L->next = s; }else{ s->next = L->next; L->next->prior = s; s->prior = L; L->next = s; } cin>>x; } return L; } //尾插法建立双链表 DLinkList TailInsert(DLinkList &L){ InitList(L); DNode *s,*r=L; int x; cin>>x; while(x!=9999){ s = (DNode *)malloc(sizeof(DNode)); s->data = x; s->next = NULL; s->prior = r; r->next = s; r = s; cin>>x; } return L; } //按值查找:查找x在L中的位置 DNode *LocateElem(DLinkList L, int x){ DNode *p = L->next; while(p && p->data != x){ p = p->next; } return p; } //按位查找:查找在双链表L中第i个位置的结点 DNode *GetElem(DLinkList L, int i){ int j=1; DNode *p = L->next; if(i==0)return L; if(i DNode *s = (DNode *)malloc(sizeof(DNode)); s->data = x; s->next = p->next; p->next->prior = s; s->prior = p; p->next = s; } //删除操作:将双链表中的第i个结点删除 void Delete(DLinkList &L, int i){ if(iLength(L)){ coutnext->prior = p; free(q); } //判空操作 bool Empty(DLinkList L){ if(L->next == NULL){ cout //尾插法建立双链表,并遍历单链表 DLinkList L = TailInsert(L); cout


【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


    图片新闻

    实验室药品柜的特性有哪些
    实验室药品柜是实验室家具的重要组成部分之一,主要
    小学科学实验中有哪些教学
    计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
    实验室各种仪器原理动图讲
    1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
    高中化学常见仪器及实验装
    1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
    微生物操作主要设备和器具
    今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
    浅谈通风柜使用基本常识
     众所周知,通风柜功能中最主要的就是排气功能。在

    专题文章

      CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭