《算法基础》——3.7 多线程链表

3.7 多线程链表

在一个单向链表中,一个单元格会有到下一个单元格的链接。在一个双向链表里,每个单元格都有到前一个单元格和到后一个单元格的链接。双向链表使用两种链接,以提供两种不同的移动方法:向前或向后。
可以为一个链表中的单元格添加其他链接,以提供更多的单元格之间的移动方式。例如,建一个Planet类来保存有关太阳系的行星的信息。则可以给Planet类加入一个名叫NextDistance的链路来链接到下一个最接近太阳的行星。沿着NextDistance链接遍历所有星球,顺序将是:水星,金星,地球,火星,木星,土星,天王星和海王星的行星(如果把冥王星当作一个行星的话,也可以选冥王星)。
同样,可以添加其他链路来依照质量、直径等特点排序行星。被这样的一种链路设定来遍历所有行星的线路被称为线程。
用单个线程来运行算法是很简单的,把它看做一个简单的链表即可,尽管在可视化的情况下所有的线程在同一时间内表现得比较混乱。例如,图3-8展示了一个三线程的行星链表。最细的线程通过行星到太阳距离的远近来依次访问行星。中等粗细的线程通过质量的大小来依次访问,而最粗的线程将通过直径大小来依次访问行星。
注 其他的数据结构也能拥有线程。比如,一棵树可能提供线程令程序可以按照对于树来说非典型的顺序来访问其中的结点。

时间: 2024-11-08 23:09:18

《算法基础》——3.7 多线程链表的相关文章

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

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

《算法基础》——导读

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

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

第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

一步一步写算法(之循环单向链表)

原文:一步一步写算法(之循环单向链表) [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com]     前面的博客中,我们曾经有一篇专门讲到单向链表的内容.那么今天讨论的链表和上次讨论的链表有什么不同呢?重点就在这个"循环"上面.有了循环,意味着我们可以从任何一个链表节点开始工作,可以把root定在任何链表节点上面,可以从任意一个链表节点访问数据,这就是循环的优势.     那么在实现过程中,循环单向链表有什么不同?     1)打印链

java 算法基础之二快速排序算法

http://www.cnblogs.com/hexiaochun/archive/2012/09/03/2668324.html java 算法基础之二快速排序算法 所谓的快速排序的思想就是,首先把数组的第一个数拿出来做为一个key,在前后分别设置一个i,j做为标识,然后拿这个key对这个数组从后面往前遍历,及j--,直到找到第一个小于这个key的那个数,然后交换这两个值,交换完成后,我们拿着这个key要从i往后遍历了,及i++;一直循环到i=j结束,当这里结束后,我们会发现大于这个key的值

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

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

《算法基础》——3.10 练习

3.10 练习 3.2.5节"在尾部添加单元格"中给出了在单向链表尾部添加单元格的一个时间复杂度为O(N)的算法.如果使用另一个变量bottom来指向链表最后一个单元格,则可以用O(1)时间向链表尾添加项.写出这样的算法.添加变量后会使在首尾添加项.寻找项.删除项变得怎样复杂?写一个从这样链表中移除项的算法.2.写出一个在整数组成的.未排序的单向链表中找出最大项的算法. 3.写出一个在双向链表首部添加一个项的算法.4写出一个在双向链表尾部添加一个项的算法.5.如果把练习3.4的算法与&

《算法基础》——3.5 链表算法

3.5 链表算法 到目前为止,本章描述了一些用于建立和维护链表的算法,包括在链表的开头.结尾和中间添加项的算法,查找链表中项的算法和从链表中删除项的算法. 以下各节描述了利用其他方式来操作链表的算法.3.5.1 复制链表 一些算法重新排列链表.本节和下一节将描述一些对链表中的项进行排序的算法.如果想保持原来链表的顺序,就必须在排序之前就做一个该链表的副本. 下面的伪代码演示了如何复制一个单链表: 该算法相当简单,但有一点值得一提:该算法使用last_added来跟踪最新被加入到链表副本中的单元格