《算法基础》——第3章 链表 3.1 基本概念

第3章 链表

链表可能是程序员会建立的最简单的数据结构。然而,用来构建它们所需用到的某些概念也会被用来构建这本书里描述的最复杂的数据结构。要使用一个链表,除了了解查找,插入和删除单元格的方法以外,还需要了解单元格和链接。可以使用这些相同的概念来构建复杂的网络、易被混淆的树和平衡树。
本章说明了为使用链表所需要掌握的方法。后面的章节中(特别是第4章、第5章、第8章和第10~14章)会重温这些方法。

3.1 基本概念

链表是由通常被称为单元格的对象构建而成。单元格类包含链表必须存储的数据和到另一个单元格的链接。该链接是一个简单的引用或是指到另一个单元格类对象的指针。通常单元格的指针域被称为Next。
例如,下面的代码显示了在C#中的整数单元格(IntegerCell)类的定义。该单元格包含一个整数值和一个指向链表中下一个整数单元格对象的指针:

链表通常用图来表示,用小方格代表单元格并用箭头代表链接。
本书用含有X的小方格来代表一个没有指向单元格的链接。(在编程语言中,对应的链接指针没有值、或者是空指针、或者其他一些特定语言的值,表示该指针没有指向任何内容。)
除了链表本身,一个程序需要一个指向链表的变量,这样便于代码能够找到该链表。往往这个变量被命名为top,以表明它表示该链表的顶端。top变量可以是一个单元格类的变量,也可以是一个指向链表第一个单元的指针。
图3-1显示了含有数字31、72、47和9的两个链表。在靠上面的那个链表里,程序里有一个称为top的变量,它是向该链表第一个单元格的指针。在靠下面的链表里,程序里的top变量是该链表中的第一个单元格。这两个链表都以一个包含X的小方格结尾,这个小方格表示一个空指针。

如果数据中的项会随着时间变化而增加或减少时,链表是一种很好的存储方式。若要添加一个新的单元格,只需要在链表的开头或结尾添加该单元格。与此相反,一个数组的大小是固定的,所以很难扩大数组来实现添加更多的项。
以下各节将介绍一些可以用来操纵链表的算法。其中许多算法是通过展示链表在某操作被执行前和执行后的状态来进行描述说明的。

时间: 2024-10-27 21:54:29

《算法基础》——第3章 链表 3.1 基本概念的相关文章

《HTML5+JavaScript动画基础》——第1章 动画的基本概念 1.1动画

第一部分 JavaScript动画基础 第1章 动画的基本概念 看看Web浏览器已经发展到何种程度!最初Web浏览器仅仅是一个用于在网络上访问文本文件的程序,很快它就彻底改变了我们沟通与分享信息的方式,现在它已经演变成一个完全图形化的交互式编程环境.HTML5作为网页标记语言的最新标准加入了大量原本只存在于本地应用中的图形功能.经过短暂的停滞,得益于HTML5和JavaScript技术引发的新一轮的竞争与创新,现在的Web浏览器发展迅速.新的canvas元素提供了一种创建标准化的游戏.应用与动画

《算法基础》——第1章 算法基础知识 1.1 方法

第1章 算法基础知识 在开始算法学习之前,你需要一点背景知识.简单地说,首先需要知道的是算法是完成某些事情的方法.它定义了用某个方法执行一个任务的步骤.这个定义看起来足够简单,但是没有人为了做一件十分简单的工作而写算法.没有人写指令来获取数组中的第四个元素.这只是假设这是一个数组定义的一部分,并且你知道怎么去做(如果你知道如何在这个问题中使用编程语言).一般来说,人们只是为了完成复杂的任务而写算法.算法解释了如何找到一个复杂代数问题的答案,如何在一个包含数千条街道的网络中找到最短路径,抑或是如何

《算法基础》——3.2 单链表

3.2 单链表 在一个单链表中,每个单元格由一个单链路连接到下一个单元格.图3-1所示的链表即是单链表. 如果要使用一个链表,就需要一系列算法来遍历链表.将项添加到链表中.查找链表中的项.删除链表中的项.以下各节将描述一些可能需要使用的算法.3.2.1 遍历链表 假设一个程序已经建立了一个链表,遍历它的单元格是比较容易的.下面的算法展示了如何遍历链表中的单元格,并使用某种方法对单元格中的值进行处理.本例中使用Print方法来显示单元格的值,但也可以用其他任何方法来代替Print方法对单元格进行操

《算法技术手册》一第3章 算法基础

第3章 算法基础 虽说开发软件是为了解决问题,但程序员们往往太执着于是否能够解决问题本身,而不去确认这一问题是否已有解决之法.即便程序员们知道前人已在类似情况下解决了问题,但"已有的解决之法"最终是否适用于特写的问题仍是一个未知数.更重要的是,要找到完全不需要修改或者只需要稍作修改便能解决手头问题的代码并不容易.不同的人对待算法的态度各有千秋.很多人就只是简单地在一本书中或者网站上找个算法,复制代码,运行一次,然后可能还会测试一次,如果结果正确,就开始做下一个任务.但是,在我们看来,这

《算法基础:打开算法之门》一第3章 排序算法和查找算法

第3章 Algorithms Unlocked 排序算法和查找算法 在第2章中,我们看到了在数组上进行线性查找的三个算法.我们能做得更好吗?答案是:看情况.如果不清楚数组中的元素是否有序,我们是不可能做得更好的.在最坏情况下,我们必须查找数组的所有n个元素,因为如果在前n-1个元素中不能找到要找的值,那么要查找的元素可能在第n个位置上.因此,当我们不清楚数组中的元素是否有序时,我们不可能实现比Θ(n)更好的最坏情况运行时间. 然而,假定数组是以非递减顺序排序的,那么根据"非递减"的含义

《算法基础》——导读

**前言**算法是使高效的程序成为可能的方法.它们解释了如何排列记录.搜索项.计算数值(比如质因子分解).查找一个街道网络中的最短路径.确定可能通过通信网络的最大流.算法好坏的差别可能意味着是在一秒.一个小时内解决问题,还是永远也不能解决问题.学习算法使你能建立有用的方法工具来解决具体的问题.它能帮助你理解在不同的情况下,哪个算法是最有效的,所以对于一个特定的问题,你就能选择最适合的算法.对某些数据而言性能优异的算法可能对其他的数据而言表现糟糕.所以知道如何选择一个最适合当前情况的算法是很重要的

《数据库技术原理与应用教程(第2版)》——第2章 数据库的基础知识 2.1 数据库中的基本概念

第2章 数据库的基础知识 本章将介绍数据库的基础知识,包括基本概念.基本结构.应用平台及特点等.本章内容十分重要,它对全书具有提纲挈领的作用. 2.1 数据库中的基本概念 1.数据 (1)数据的概念 数据(data)是现实世界中客体在计算机中的抽象表示.具体地说,它是一种计算机内的有限个数的一组符号表示. 由于数据是一种抽象的符号表示,因此它缺少语义,在必要时须对它作出语义解释. (2)数据的性质分类 1)数据的持久性:从存储时间看,数据一般分为两部分,其中一部分与程序仅有短时间的交互关系,随着

一道算法基础题 uva1586

问题描述 一道算法基础题 uva1586 题目链接在这儿 http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=830&page=show_problem&problem=4461 我自己做的代码如下 但是通不过 测了好多数据都没问题 #include<cstdio> #include<cstring> using namespace std; in

《Adobe After Effects CS6完全剖析》——第一部分 工作基础 第1章 After Effects 中的合成 合成基础

第一部分 工作基础 第1章 After Effects 中的合成 本书是介绍有关使用Adobe After Effects创建视觉特效的内容的,Adobe After Effects是世界上应用最广泛的合成应用程序.它可以帮助你使用来自异种源的元素创建令人信服的.梦幻般的运动影像,并且可以让你尽可能地省事.本书的第一部分提供了一种快速学习的方法(针对初学者),或者让你复习一下After Effects工作流程方面的知识(针对已经是After Effects艺术家的人). 有效的视觉特效合成将使用