《大话数据结构》简体中文版勘误(第一、二版)

原文链接:https://www.cnblogs.com/cj723/archive/2011/06/15/2081574.html

注:★★★、★★和★为建议马上修改,它们之间程度不同,没有星为可改可不改,不影响阅读。

第一次印刷:

★★ P35,第一行,有一个“+”号应该是“=”,见下图
在这里插入图片描述
★ P38,倒数第二行,“速度其实只提高了10”,后面增加一个“倍”字。

P111,第三段,第二行,“打算了Reset时”,多了一个“了”字。目录P15,同样的问题。

★★★ P268,P269,图7-7-14,图7-7-15,图7-7-16横竖条中都是有符号或数字的,目前因印刷问题没有显示。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
P377 “时间性能”这一段中 “事实上,移动可以通过改为记录的存储方式来予以避免” ,其中“改为”应该是“改变”

第二次印刷&第三次印刷:

P20,代码中“int i,sum =0, n = 100;”中的"i,"是多余的,可以删除,因为没有用到i变量。( AGPSky 提供)

P26,倒数第四行最后,“运算100次是运算10次的100”,应该是“运算10次的1000”。(laciqs 提供)

P43,图3-2-2,在天秤和射手之间,少了一个“天蝎座”。 ( 小老K 提供)

★★★ P46,union代码,有不少的问题,修正如下图。union是C语言的关键字,因此函数名增加一个L。具体实现代码,请参见源代码中的“01线性表顺序存储_List.c”文件(laciqs 提供)
在这里插入图片描述
P52,代码中间部分,“for(k=L>length-1;k>=i-1;k–”后面少了一个“)”。(萧萧Leo 提供)

P52,代码第8行,"if (i<1 || i>L->length+1)“当中的“+1”不需要,应该是"if (i<1 || i>L->length)”。( csensix 提供)本处不需要修改,并没有错,详细说明请看我提供的源代码的注释“/* 当i比第一位置小或者比最后一位置后一位置还要大时 */”

P57,第6行,"元素ai的存储映像,称为节点"中的i应该是a的下标.(Jeallyn 提供)

P58,图3-6-5,左侧第三条,“头指针均不为空”应该改为“头指针均存在” ( 小老K 提供)

★★ P58,图3-6-4和图3-6-6,两图中“头指针”改为“后继指针地址”。图3-6-6,“0900”应该改为“NULL” ( 小老K 提供)

P59,倒数第五行,“结点由存放数据元素的数据域”后面加一个“和”字。

P60,中间编号1后面,“声明一个结点p”改为“声明一指针p”。下方代码中第6行,“/声明一结点p/”应该改为“/声明一指针p/”。( 小老K 提供)

(本次改动仅限第三次印刷)P61,代码第三行,“if (!p || j>=i)”,请将“=”去掉。P63,代码中间一行,,“if (!p || j>=i)”,请将“=”去掉。P65,代码中间一行,“if (!p || j>=i)”,请将“=”去掉。(kenly2007 提供)

P64,第一句:“用来存放e数据s结点。”,将“e数据s结点"改成“数据e的s结点” ( 小老K 提供)

P68 最后一行,“那么应该让这个链表的指针域置空” ,其中“链表”应该改为“节点”。(落崖惊风 提供)

p70,图3-11-1,时间性能最后一个,“线出”应改为“找出” ( Darker 提供)

P71,倒数第三段第三行,“而游标cur相当于单链表中的next指针,存放该元素的后继在数组中的下标。”,将“游标”两字删除,并在句子最后句号前增加一句:“,我们把cur叫做游标。” ( 小老K 提供)

★ P76,第一段第二行,“j=k[999].cur=1",应该将“k"修改为“L”。(Mark1940 提供)

★★ P81,第一行代码,“rearB->next=p; free§;” 应该在这两句上方加一句“q=rearB->next; ”(即在四句代码的中间增加一句),并修改最后的“free§;"为“free(q); /释放q/ ” (siatliuliu1 提供)

P95,第二行 “另一个栈为栈的末端” 应该改成“另一个栈为数组的末端”。( AGPSky 提供)

p103,图4-8-3,当中的Fib都改为Fbi。本错误不算严重,可以不改。由于是对Fibonacci这个单词的缩写,Fbi或者Fib都是可以的。为了和代码中的统一,特告知,后续印刷版本,会将这样的小错误修正。(hefeijuan 提供)

P105,第五段第二行,“只有碰到左括号”改为“只要碰到左括号”。 ( 小老K 提供)

P105,第五段最后一行,“最终再因全部匹配成功后成为空栈的结果。”,将“的结果”删除。( 小老K 提供)

P108 倒数第四行最后一句,“是右括号或优先级低于”,其中“低于”改为“不高于”。(王天兴 提供)

★★ P109,第6条,将第一个句号前的句子与第二个句号前的句子对调。结果为“紧接着是符号"X",因为此时的栈顶符号……因此不输出,"*"进栈。接着是数字3,输出,总的表达式为931-3。”( 小老K 提供)

★ P126,第三段倒数第二行,“表示216个字符”,“216”应该改为“2^16”(strider 提供)

P126页第三段倒数第二行,“65万”改为“6.5万”(somebodysssss 提供)

★★ P137,第四段第一行,“假设S=“abcabcabc”,”,其中的字符串S应该是“abcababca”。图5-7-4和图5-7-5的第①图,都应该改为下图所示。(strider 提供)
在这里插入图片描述
★ P138,倒数第二段第二行,“而图5-7-4中,”改为“而图5-7-5中,”。(strider 秦萌 提供)

P138 最下方的公式,“且‘p1……k-1’”,在“k-1”的左侧少了一个"p". (落崖惊风 提供)

★ P144,5.7.5小节中第1号小标题中:“先计算出next数组的值分别为001234223”,应改为011234223”。(strider 提供)

★ P145,9)“当j=9时,next值为3,…因此nextval[9]=nextval[3]=1” 最后的“1”应改为“0”。(strider 提供)

P153,6.2.3节第一段第三行,“而G、H、I、J也是。”,应该改为“而G、H、I与J也是堂兄弟。” (康凯 提供)

p153,图6-2-6上方段落第二行,“则其子树的根就在第l+1层”,"的根"两字去掉。(莫小峰来了 提供)

P155,6.4.1小节第二段第二行:“其双亲结点到链表中的位置”应改为“其双亲结点在数组中的位置”。(strider 提供)

★ P157,表6-4-3的数据第一行 A的firstchild 应该是 1 不是 -1。( 小老K 提供)

P158,图6-4-2,每个结点末尾都多画了一个指针域(即应该有四个方格却画了五个),应该要去掉,如下图。(孟倩 提供)
在这里插入图片描述
★ P169,6.6.2 二叉树性质2的第四段,“如果有一层,至多1=20-1个结点”,应该是“21-1个结点”。(康凯 提供)

★ P170,倒数第二段第二行,“倒推得到满二叉树的度数为”,其中“度数”改为“深度”,第三行,“度为4”,应该改为“深度为4”。( 小老K 提供)

★ P171,第一行“等于同样的度数”,“度数”改为“深度”;第四行,“而k作为度数也是整数”,“度数”改为“深度”;图6-6-2上面一段,“这是一个完全二叉树,度为4”,“度为4”改为“深度为4”。( 小老K 提供)

p175,第三段第二行,“简单地假定就是输出结点的数据信息”,其中“简单地假定就是”改成"简单地假定访问就是"。(莫小峰来了 提供)

P188,第二段整段删除,即“当然,你完全也可以……###DB##CA”这一段。原因在于,由于中序遍历不能首先建立根结点,用加“#”的方法是不可能创建一个二叉树的,后序遍历在特定规则下可以见http://www.cnblogs.com/cj723/archive/2012/01/09/2316791.html#2372197。(猫□咪和 G-rated 提供)

P194,中间第3条,“第7~8行,whild(p!=T)”,其中"whild"应该改为"while"。(小老k 提供)

P199,5~6行 “比如图6-11-4中最右侧的树”,将“最右侧”改为“右下方”。倒数3~4行 “比如图6-11-5右侧三棵树的森林”,将“右侧”改为“下面”。P200 第一行 “6-11-5右侧三棵树的森林”,“右侧”改为“下面”。( 小老K 提供)

★ P200,第二行,“我们对图6-11-4的左侧二叉树”,“6-11-4”改为“6-11-5”。( 小老K 提供)

P203,第一行,“我们先把这两棵二叉树简化成叶子结点带权的二叉树”,应该加“注:树结点间的边相关的数叫做权(Weight)”。( 小老K 提供)

P203,第三段第四行,“每个叶子的路径长度为lk”,其中"lk"应该改为“lk”,即k是下标。( 小老K 提供)

p205,右方的图中结点N1~ N2少了权值15,N2~N3之间少了权值30,可参看左侧6-12-7的图。(莫小峰来了 提供)

★ P216,图7-2-6,顶点B与顶点D缺少两根互为反向的连线。因为有向完全图的定义是任意两个顶点之间都存在方向互为相反的两条弧。(Zhangth 提供)

P218,倒数第二段第一行,“图7-2-9中的左侧”,其中“左侧”改为“上方”,后面的“右侧两条路径长度为3”,其中“右侧”改为“下方”。( 小老K 提供)

p218,最后一段第一行,“第一个顶点到最后一个顶点”,其中“到”改为"和"。(莫小峰来了 提供)

★ P219,中间一段第二行,“两个顶点vi、vj∈E,”,这里“E”应该改成“V” (咖啡崽 提供)

★ P220,倒数第二行,“在存在”,应该改成“不存在”。(咖啡崽 提供)

★★ P220,图7-2-13的图1和图2,顶点A与顶点B之间的箭头都画反了。(咖啡崽 提供)
在这里插入图片描述
P234 图7-4-10 右下角那句“V2后再无V0的入边顶点,所以其taillink为空” taillink应该是headlink (风碎月 提供)

P235,图7-4-11,V1点的阴影应该改为V2 ,修改结果见下图(盲剑客 提供)
在这里插入图片描述
★ P247。图7-6-3中邻接矩阵有些错误。 arc[v2][v1]应该是18, arc[v3][v6]和arc[v6][v3]都应该是24。 (Zhangth 提供)

P248,倒数第六行,“arjvex”应该为“adjvex”。(萧萧Leo 提供)

p249,第一段第二行,“arjvex"改为"adjvex”。(莫小峰来了 提供)

P251 第三行 “假设 N=(P,{E}) …” 改为“假设 N=(V,{E}) …” (小老k 提供)

p255, 最后一段第一句,“最右图"改为"右下方的图"。(莫小峰来了 提供)

★ P260-P261,书中代码“matirx”都应该改为“matrix”(一共有五处修改,分别是P260倒数第三行,P261,代码1、8、27、29行)。在提供下载的代码中,统一将matrix修改成了arc。(萧萧Leo 提供)

★★ p261,代码第9行 “(*P)[v]=0 /*初始化路径数组P为0 */” 将其中的0改为-1,即“(*P)[v]=-1 /*初始化路径数组P为-1 */” 。这是因为当为0时本来表示没有路径,但却和数组索引为0的编号重合,导致在一些特殊情况出现最短路径计算错误,提供下载的代码和测试代码也做了修正,请下载查看。(伍迷 自提供)

★ P263,第8小节,“此时i=2。”改成“此时v=2。”。P264,第11小节,“此时i=3。”改成“此时v=3。”(萧萧Leo 提供)

p266,第一段第二行, “P代表对应顶点的前驱矩阵”,前驱矩阵是什么没解释,后增加一句“,用来存储路径”。(莫小峰来了 提供)

★★ P285,倒数第四行,公式中“min{ltv[j]+len……”,中“+”应该是“-”(萧萧Leo 提供)

P285 第6小节,“ltv相对应的值为19、25、13”,三个数字的顺序应该是“19、13、25”。(黑洞熵 提供)

P288,第二段第二行,“十字链表是邻接矩阵的一种升级,而邻接多重表则是邻接表的升级。”,应该改为“十字链表是针对有向图邻接表结构的优化,邻接多重表是针对无向图邻接表结构的优化。”(韦欢 提供)

★ P319,代码下第一段第一行,"InsertBST(T,93)“应该是"InsertBST(&T,93)”,第二行,"InsertBST(T,95)“应该是"InsertBST(&T,95)” (ff22 提供)

P329,倒数第二行,“结点58的左子树高度为2,”其中2应该改为3。( 小墨的童鞋 提供)

★ P330,中间一段,“(即它的左子树高度2减去右子树高度0)”,应该改为“(即它的左子树高度3减去右子树高度1)”。然后图8-7-3在结点58的右侧增加一个60的结点,如下图。( 小墨的童鞋 提供)
在这里插入图片描述
★ P330,图8-7-2,图1,删除叶子结点35和结点99。(黑洞熵 提供)

P332,第一行,“平衡因子没有发生改变”,改为“平衡因子没有超出限定范围(-1,0,1)”。 (黑洞熵 提供)

★ P334,图8-7-8中的图15中结点7的BF值应该是-2而不是-1。(黑洞熵 提供)

★★★ P338,图8-7-10,图中有小错误,且图形过于繁琐,不利于读者理解,因此做比较大的修改如下图。(康凯 提供)
在这里插入图片描述
★ P339,代码第22行,“if (taller)”,应该改为"if (*taller)"。本书提供的源代码也有相同错误,已经做了修改。(Jakson 提供)

★ P347 第二段,情形二的第二行,“此时删除结点1”,修改为“此时删除结点4”。(黑洞熵 提供)

P351,中间一段,有四处的└m/2┘都应该是 ┌m/2┐,见下图。( 给你改错 提供)
在这里插入图片描述
★ P375,第二段第三行,“(非递减或非递增)关系”,是应该写成“非递减(或非递增)关系”。(黑洞熵 提供)

P383,代码第6行,“ for(i=1;ilength && flag; i++) /若flag为true则退出循环/” 其中注释应该改为“/* 若flag为true说明有过数据交换,否则停止循环 */”( My Blogs 提供)

★ P387,第3条最后一行 “L.r[j-1]=L.r[j] ”应该是“L.r[j+1]=L.r[j]” (萧萧Leo 提供)

P388页,第7点第二段,“由于6、5、4、3都比2小,它们都将右移一位” 应该更正为“由于6、5、4、3都比2大,它们都将右移一位”。(禾鬥雨 提供)

P398,中间一段,堆排序定义的倒数第二行,“这样就会得到n个元素中的次小值”,其中“次小”应该改为“次大”。(ff22 提供)

在源代码中栈与队列的DoubleStack.c中的两个问题(目前源代码已经修正,重新下载即可。书中讲解并无错误):

问题1:

int StackLength(SqDoubleStack S)
{
    return (S.top1 + 1) + (MAXSIZE - 1 - S.top2);
}

中的语句return (S.top1+1)+(MAXSIZE-1-S.top2); 应该修改为 return (S.top1+1)+(MAXSIZE-S.top2);

问题2:

Status StackTraverse(SqDoubleStack S)
{
    int i;
    i = 0;
    while (i <= S.top1)
    {
        visit(S.data[i++]);
    }
    i = S.top2;
    while (i < MAXSIZE)
    {
        visit(S.data[i++]);
    }
    printf("\n");
    return OK;
}

中的语句 while(i<S.top1) 应该修改为 while(i<=S.top1) (闫丰 提供)

  • 7
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值