链表

  链表与数组的区别是链表中的元素顺序是有各对象中的指针决定的,相邻元素之间在物理内存上不一定相邻。采用链表可以灵活地表示动态集合。链表有单链表和双链表及循环链表。书中着重介绍了双链表的概念及操作,双链表L的每一个元素是一个对象,每个对象包含一个关键字和两个指针:next和prev。链表的操作包括插入一个节点、删除一个节点和查找一个节点,重点来说一下双向链表的插入和删除节点操作,图例如下:

链表是最基本的数据结构,凡是学计算机的必须的掌握的,在面试的时候经常被问到,关于链表的实现,百度一下就知道了。在此可以讨论一下与链表相关的练习题。

(1)在单链表上插入一个元素,要求时间复杂度为O(1)。

解答:一般情况在链表中插入一元素是在末尾插入的,这样需要从头遍历一次链表,找到末尾,时间为O(n)。要在O(1)时间插入一个新节点,可以考虑每次在头节点后面插入,即每次插入的节点成为链表的第一个节点。

(2)在单链表上删除一个给定的节点p,要求时间复杂度为O(1)。

解答:一般情况删除一个节点时候,我们需要找到该节点p的前驱节点q,需要对链表进行遍历,运行时间为O(n-1)。我们可以考虑先将q的后继节点s的值替换q节点值,然后删除s即可。如下图删除节点q的操作过程:

(3)单链表逆置,不允许额外分配存储空间,不允许递归,可以使用临时变量,执行时间为O(n)。

解答:这个题目在面试笔试中经常碰到,基本思想上将指针逆置。如下图所示:

(4)遍历单链表一次,找出链表中间节点。

解答:定义两个指针p和q,初始都指向链表头节点。然后开始向后遍历,p每次移动2步,q移动一步,当p到达末尾的时候,p正好到达了中间位置。

(5)用一个单链表L实现一个栈,要求push和pop的操作时间为O(1)。

解答:根据栈中元素先进后出的特点,可以在链表的头部进行插入和删除操作。

(6)用一个单链表L实现一个队列,要求enqueue和dequeue的操作时间为O(1)。

解答:队列中的元素是先进先出,在单链表结构中增加一个尾指针,数据从尾部插入,从头部删除。

3、有根树的表示

  采用链表数据结构来表示树,书中先降二叉树的链表表示法,然后拓展到分支数无限制的有根数。先来看看二叉树的链表表示方法,用域p、left和right来存储指向二叉树T中的父亲、左孩子和右孩子的指针。如下图所示:

  对于分支数目无限制的有根树,采用左孩子、右兄弟的表示方法。这样表示的树的每个节点都包含有一个父亲指针p,另外两个指针:

(1)left_child指向节点的最左孩子。

(2)right_sibling指向节点紧右边的兄弟。

第十章 基本数据结构——链表相关推荐

  1. 初学数据结构--链表

    2019独角兽企业重金招聘Python工程师标准>>> 前言 在这一章,我将介绍另外一种非常重要的线性数据结构--链表.在之前介绍的动态数组,栈和队列这三种数据结构,底层其实依托于静 ...

  2. C++数据结构链表的基本操作

    这篇文章主要为大家介绍了C++数据结构链表基本操作的示例过程有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪 首先创建好一个节点 typedef struct node {in ...

  3. c语言仓库管理系统链表,仓库管理系统 C语言 C++ 数据结构 链表 课程设计

    仓库管理系统 C语言 C++ 数据结构 链表 课程设计 #include #include #include #include #define MAX 64 typedef struct node{ ...

  4. 数据结构 - 链表 - 面试中常见的链表算法题

    数据结构 - 链表 - 面试中常见的链表算法题 数据结构是面试中必定考查的知识点,面试者需要掌握几种经典的数据结构:线性表(数组.链表).栈与队列.树(二叉树.二叉查找树.平衡二叉树.红黑树).图. ...

  5. 数据结构链表之符号表,Python3实现——8

    数据结构链表之符号表 符号表的介绍 之前章节介绍的顺序表和链表都是一个节点储存一个元素的表,但在日常生活中我们还有很多一次需要储存成对或多个值的情况,例如: 符号表最主要的目的将一对元素,用一个键和一 ...

  6. 数据结构链表之队列,Python3实现——7

    数据结构链表之队列 队列概述 定义:队列是一种基于先进先出(FIFO)的数据结构,队列只能在一段进行插入和删除操作的结构,第一个进入队列的元素在读取时会第一个被读取 队列可以使用顺序表(Python中 ...

  7. 数据结构链表之栈,Python3简单实现——5

    数据结构链表之栈 栈的概述 定义:栈是一种基于先进后出(FILO)的数据结构,是一种只能在一段进行插入和删除操作的特殊线性表. 引入名词:将数据存入栈的动作称为压栈,将数据取出栈的动作称为弹栈 栈的特 ...

  8. 数据结构链表例程_如何掌握RxJava例程的四个结构

    数据结构链表例程 by Ayusch Jain 通过Ayusch Jain 如何掌握RxJava例程的四个结构 (How to get a grip on the four constructs of ...

  9. 数据结构链表代码_代码简介:链表数据结构如何工作

    数据结构链表代码 Here are three stories we published this week that are worth your time: 这是我们本周发布的三个值得您关注的故事 ...

最新文章

  1. 用 Flask 来写个轻博客 (29) — 使用 Flask-Admin 实现后台管理 SQLAlchemy
  2. adas技术实现途径_未来实现100%清洁电力的途径,带来巨大的健康和工作
  3. 【拔刀吧少年】之shell函数
  4. 老赖名下无财产,可以执行老赖子女名下的财产吗?
  5. 【渝粤教育】国家开放大学2018年春季 0257-22T高级英语听力(1) 参考试题
  6. C# 算法之链表、双向链表以及正向反向遍历实现
  7. CSS面试题汇总(四)
  8. python做var模型的滞后阶数怎么确定_VAR模型滞后阶数
  9. C# Emoji在Web端显示
  10. java可以微信qq同时登陆_多种方法同时登录QQ(pc/微信/web qq/超级qq)
  11. 二层交换配置完ping失败_在三层交换机和二层交换机做怎么配置使这两台主机ping通...
  12. 基于Java-web的树洞网站的设计与实现
  13. 在MATLAB中实现均值变点法
  14. IAR for 430 如何建一个简易工程
  15. 史上最简单的spark教程第二章-快速开发部署你的第一个Java+spark程序
  16. 用Mailgun邮寄出去!
  17. 《2022中国数据智能产业图谱2.0版》重磅发布
  18. 粤港澳大湾区新地标,128米高“湾区之光”摩天轮重构深圳天际线
  19. java毕业设计保险公司客户信息管理系统Mybatis+系统+数据库+调试部署
  20. 关于人工智能训练师职业认证通知

热门文章

  1. java socket gui登录_java的socket服务端的GUI
  2. arduino使用oled代码_实用!Arduino平台最强大的“显卡”驱动:Adafruit GFX 图形库8000字详细使用指南...
  3. 一样入职的应届生工资不一样_刘涛入职阿里:为什么阿里要招聘明星?明星入职和普通人一样吗...
  4. oracle 自治数据库 培训,Oracle数据库掌门人,Andrew Mendelsohn 谈自治数据库
  5. xp中mysql优化_XP加速技巧大盘点 看看那个最实用
  6. c语言用fun求矩阵,C语言通过函数调用求n*n阶矩阵周边元素绝对值之和
  7. linux软件包管理工具,Linux 软件包管理器-----yum配置详解一
  8. java重命名sheet失败_java jxl excel 数据导出 重新命名无效的工作表名称 | 学步园...
  9. 揭秘:高盛交易员赚取10亿美元利润的神秘“利器”终于公开了
  10. Canvas3 绘图和重叠