《算法基础》——3.10 练习

3.10 练习

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

3.写出一个在双向链表首部添加一个项的算法。
4写出一个在双向链表尾部添加一个项的算法。
5.如果把练习3、4的算法与“双向链表”一节中提供的InsertCell算法相比,应该发现它们非常相似。重写练习3、4的算法,让它们调用InsertCell算法而不是直接更新链表的链接。
6.写一个移除双向链表中特定单元格的算法。画一张图来表示这一过程。
7.假设有一个排好序的存储名字双向链表,利用尾部而不是首部的哨兵,可以想出一个提高检索表现的方法吗?这个方法改变了时间复杂度吗?
8.写出一个向已排序双向链表中添加项的算法。假设首尾哨兵分别掌握着数值的下限和上限。
9.写出一个算法判断一个给定链表是否已排序。
10.插入排序和选择排序都拥有O(N2)的时间复杂性。解释为什么选择排序实际花费时间更长。
11.参照3.7节的描述,写一个程序建立一个行星的多线索链表。用户可以单击单选框或组合框来显示按照不同依据排列的行星。(提示:建立一个Planet类包含以下字段。Name、DistanceToSun、Mass、Diameter、NextDistance、NextMass以及NextDiameter。然后创建一个AddPlanet-ToList方法用来按线索添加排好序的项。)
12.写出一个程序实现龟兔算法。

时间: 2024-08-30 05:38:59

《算法基础》——3.10 练习的相关文章

一道算法基础题 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

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的值

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

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

《算法基础》——导读

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

JAVA基础培训(10),方法的Overload介绍

今天在项目里做事,中午休息时间,补上这个教程吧.这次我们看看Overload 的内容 . 测试代码 package lession10; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; /** * 老紫竹JAVA基础培训(10),方法的Overload介绍.<br> * 匹配方式为最特殊匹配,或者叫最准确匹配<br> * 如果发现多个都有相同的匹配度,则编译报错. * *

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

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

为指定的职工在原工资的基础上长10%的工资,并打印涨工资前和涨工资后的工资

/* 为指定的职工在原工资的基础上长10%的工资,并打印涨工资前和涨工资后的工资 select sal into psal from emp where empno=? update emp set sal = sal * 1.1 where empno =? */ create or replace PROCEDURE raiseSalary(eno in number) as   psal emp.sal% TYPE;--保存员工工资 begin   --查出该员工的工资   select

《算法基础:打开算法之门》一3.5 快速排序

3.5 快速排序 像归并排序那样,快速排序也使用分治模式(因此也使用递归).然而,快速排序与归并排序所使用的分治法稍微有点不同.与归并排序相比,存在两个不同之处: ●快速排序按照原址工作. ●快速排序的渐近运行时间介于最坏情况和平均情况之间.尤其是,快速排序的最坏运行时间是Θ(n2),但是它的平均情况下的运行时间要更好一些:Θ(nlgn).快速排序也有好的常数因子(比归并排序更好一些),并且它通常是实践中的一个好的排序算法.这里是快速排序使用分治法的过程.再一次考虑对书架上的书进行排序的例子.就

《算法基础:打开算法之门》一导读

前言 Algorithms Unlocked 计算机是如何解决问题的呢?小小的GPS是如何只在几秒钟内就从无数条可能路径中找出到达目的地的最快捷路径的呢?在网上购物时,又如何防止他人窃取你的信用卡账号呢?解决这些问题,以及大量其他问题的答案均是算法.我写本书的目的就是为你打开算法之门,解开算法之谜. 我是<算法导论>的合著者之一.<算法导论>是一本特别好的书(当然,这是我个人的主观评价),但是它确实相当专业. 本书并不是<算法导论>,甚至不能被称为一本教材.它既没有对计