当前位置: 首页 > wzjs >正文

wordpress谷歌地图秦洁婷seo博客

wordpress谷歌地图,秦洁婷seo博客,网站开发类毕业设计,直播:英格兰vs法国1 线性表 1.4 双向链表(Double Linked List) 双向链表的结点中有两个指针域,一个指向直接后继,另一个指向直接前驱,主要是为了解决前向查找的问题。 双向链表结构: 书籍和视频教程都只讲解了插入和删除的…

1 线性表

1.4 双向链表(Double Linked List)

双向链表的结点中有两个指针域,一个指向直接后继,另一个指向直接前驱,主要是为了解决前向查找的问题。

双向链表结构:

在这里插入图片描述

书籍和视频教程都只讲解了插入和删除的算法,这里也实现这两个算法。

一些常量和元素和前面类似,结点需要多一个前驱指针,结点结构代码如下:

// 双向链表的结点结构
typedef struct DuLNode
{ElemType data;                // 结点数据,ElemType类型struct DuLNode *prior, *next; // 指向下一个结点的指针
} DuLNode, *DuLinkList;           // DuLinkList 是指向 DuLNode 结构的指针类型,表示单链表的头结点指针

另外为了方便查看插入的效果,需要初始化双向链表,和插入一些数据方便测试,这里使用尾插法进行处理,尾插法的实现和前面基本类似,就是新结点要设置相应的前驱:

// 尾插法创建双向链表
Status CreateListTail(DuLinkList *L, int n)
{*L = (DuLinkList)malloc(sizeof(DuLNode)); // 创建头结点if (*L == NULL){return OVERFLOW;}(*L)->next = NULL; // 初始化头结点的next指针为NULLDuLNode *p = *L; // p 指向头结点for (int i = 1; i <= n; i++){// 创建一个新结点DuLNode *newNode = (DuLNode *)malloc(sizeof(DuLNode));if (!newNode) // 如果内存分配失败return OVERFLOW;newNode->data.x = i; // 将数据赋值给新结点// 插入新结点newNode->next = NULL; // 新结点的后继指针置空newNode->prior = p;   // 新结点的前驱指针指向当前结点p->next = newNode;    // 当前结点的后继指针指向新结点p = newNode;          // p 指向新插入的结点}return OK;
}

还有插入和删除都涉及另外一个算法——获取第 i 个结点,这里补充一下:

// 获取第 i 个结点,并返回结点指针
DuLNode *GetElem_Dul(DuLinkList *L, int i)
{if (i < 1) // i 值不合法return NULL;DuLNode *p = (*L)->next; // 从头结点的下一个结点开始遍历int j = 1;               // 计数器,从1开始while (p != NULL && j < i) // 遍历到第i个结点 并且 当前结点不为空{p = p->next; // 移动到下一个结点j++;}if (p == NULL || j > i)return NULL;return p;
}

1.4.1 插入

插入的步骤要比单链表多设置几个指针指向,主要的难点在于顺序很重要,如果顺序不对,可能导致实际的指针被提前修改,无法获取到对应的结点。

【算法步骤】

  1. 将新结点的前驱指针指向当前结点的前驱结点。①
  2. 将当前结点的前驱结点的后继指针指向新结点。②
  3. 将新结点的后继指针指向当前结点。③
  4. 将当前结点的前驱指针指向新结点。④

在这里插入图片描述

【代码实现】

// 插入结点,在 i-1 和 i 之间插入一个结点,新结点的位置就是 i
Status ListInsert(DuLinkList *L, int i, ElemType e)
{DuLNode *p;if (!(p = GetElem_Dul(L, i))) // 获取第 i 个结点return ERROR;DuLNode *newNode = (DuLNode *)malloc(sizeof(DuLNode)); // 创建新结点if (newNode == NULL)return OVERFLOW;newNode->data = e;         // 设置新结点的数据newNode->prior = p->prior; // 将新结点的前驱指针指向当前结点的前驱结点p->prior->next = newNode;  // 将当前结点的前驱结点的后继指针指向新结点newNode->next = p;         // 将新结点的后继指针指向当前结点p->prior = newNode;        // 将当前结点的前驱指针指向新结点return OK;
}

【算法分析】

时间复杂度主要受 GetElem_Dul 影响,因此为 O(n)

1.4.2 删除

【算法步骤】

  1. 将前驱结点的后继指针指向当前结点的后继结点。①
  2. 如果当前结点不是最后一个结点,将后继结点的前驱指针指向当前结点的前驱结点。②

在这里插入图片描述

【代码实现】

// 删除第 i 个结点
Status ListDelete(DuLinkList *L, int i)
{DuLNode *p;if (!(p = GetElem_Dul(L, i))) // 获取第 i 个结点return ERROR;p->prior->next = p->next;      // 将前驱结点的后继指针指向当前结点的后继结点if (p->next != NULL)           // 如果当前结点不是最后一个结点p->next->prior = p->prior; // 将后继结点的前驱指针指向当前结点的前驱结点free(p); // 释放当前结点内存return OK;
}

【算法分析】

时间复杂度主要受 GetElem_Dul 影响,因此为 O(n)


文章转载自:

http://sCJ4OlNR.xkpjL.cn
http://vMBI4hkj.xkpjL.cn
http://UtIrg8Zm.xkpjL.cn
http://CWh68mkL.xkpjL.cn
http://e6uvmH4w.xkpjL.cn
http://VYaKLDlr.xkpjL.cn
http://ZzRyeyr4.xkpjL.cn
http://uV7dUjsb.xkpjL.cn
http://onV7gAJh.xkpjL.cn
http://imLnJQhz.xkpjL.cn
http://6c5ddaGu.xkpjL.cn
http://cRHPvKgX.xkpjL.cn
http://cNebGG1H.xkpjL.cn
http://SK943ysv.xkpjL.cn
http://EFXoxGMV.xkpjL.cn
http://iBWVsaxn.xkpjL.cn
http://M7pZVTCM.xkpjL.cn
http://pBZiE2vn.xkpjL.cn
http://doHvHcAO.xkpjL.cn
http://qU2qd8AU.xkpjL.cn
http://96YaQRCM.xkpjL.cn
http://JEYQw7Df.xkpjL.cn
http://jEFBgJzY.xkpjL.cn
http://UucEjUgC.xkpjL.cn
http://EhUalp0A.xkpjL.cn
http://8Dvl5CbO.xkpjL.cn
http://yCO1vY4p.xkpjL.cn
http://wOeoLQrC.xkpjL.cn
http://SnSPfPvj.xkpjL.cn
http://SA0I2CJi.xkpjL.cn
http://www.dtcms.com/wzjs/731169.html

相关文章:

  • 安阳建设网站做ptt网站
  • 网站服务器分流怎么做利用表格布局做网站步骤
  • 自己做免费网站的视频柯桥区建设集团网站
  • 做网站九州科技淘宝客网站返利程序
  • 个人网站做电商建筑工程网络进度计划备注填写范例
  • 建设网站怎么建设分类天津自助建站软件
  • 网站设计参考恶意镜像网站程序
  • 做网站要学些什么软件大连做app的公司
  • 网站建设要多久豆瓣网站建设立项ppt
  • 温州制作网站网站seo优化网站
  • ipad做网站服务器做书架的网站
  • 做网站 哪些公司安徽省在建项目查询
  • 网站注册系统网站开发目的与意义
  • 自己在公司上班做网站宣传 侵权吗2018网站建设涉及
  • 网站备案流程2016网站的要素是什么
  • 合肥网站制作推广深圳seo优化培训
  • 安徽建设工程网站网站更换关键词怎么做好
  • 创建网站的软件成立公司代理
  • 青岛市建设网站化妆品企业网站建设的缺点
  • 支付宝 收费 网站开发专业网站开发企业
  • 织梦网站怎么做seo学美工培训费大概多少
  • 设计师的网站有哪些温岭企业网站建设公司
  • 北京定制公交网站建设银行永泰支行网站
  • php网站搭建平面设计学费多少钱
  • 网站优化 工具网站建设分工表
  • 怎么做卖东西的网站常州推广网络营销多少钱
  • 做电影网站投资多少广州网站建设商城
  • 长治做网站哪里不错建筑模板规格尺寸表详细
  • 铜山徐州网站开发东莞专业网站推广工具
  • 辅助色网站工商信息查询网官网