Welcome![Sign In][Sign Up]
Location:
Search - 253)

Search list

[ELanguage编译原理及实践

Description:

目      录
译者序
前言
第1章   概论 1
1.1   为什么要用编译器 2
1.2   与编译器相关的程序 3
1.3   翻译步骤 5
1.4   编译器中的主要数据结构 8
1.5   编译器结构中的其他问题 10
1.6   自举与移植 12
1.7   TINY样本语言与编译器 14
1.7.1   TINY语言 15
1.7.2   TINY编译器 15
1.7.3   TM机 17
1.8   C-Minus:编译器项目的一种语言 18
练习 19
注意与参考 20
第2章   词法分析 21
2.1   扫描处理 21
2.2   正则表达式 23
2.2.1   正则表达式的定义 23
2.2.2   正则表达式的扩展 27
2.2.3   程序设计语言记号的正则表达式 29
2.3   有穷自动机 32
2.3.1   确定性有穷自动机的定义 32
2.3.2   先行、回溯和非确定性自动机 36
2.3.3   用代码实现有穷自动机 41
2.4   从正则表达式到DFA 45
2.4.1   从正则表达式到NFA 45
2.4.2   从NFA到DFA 48
2.4.3   利用子集构造模拟NFA 50
2.4.4   将DFA中的状态数最小化 51
2.5   TINY扫描程序的实现 52
2.5.1   为样本语言TINY实现一个扫描
程序 53
2.5.2   保留字与标识符 56
2.5.3   为标识符分配空间 57
2.6   利用Lex 自动生成扫描程序 57
2.6.1   正则表达式的Lex 约定 58
2.6.2   Lex输入文件的格式 59
2.6.3   使用Lex的TINY扫描程序 64
练习 65
编程练习 67
注意与参考 67
第3章   上下文无关文法及分析 69
3.1   分析过程 69
3.2   上下文无关文法 70
3.2.1   与正则表达式比较 70
3.2.2   上下文无关文法规则的说明 71
3.2.3   推导及由文法定义的语言 72
3.3   分析树与抽象语法树 77
3.3.1   分析树 77
3.3.2   抽象语法树 79
3.4   二义性 83
3.4.1   二义性文法 83
3.4.2   优先权和结合性 85
3.4.3   悬挂else问题 87
3.4.4   无关紧要的二义性 89
3.5   扩展的表示法:EBNF和语法图 89
3.5.1   EBNF表示法 89
3.5.2   语法图 91
3.6   上下文无关语言的形式特性 93
3.6.1   上下文无关语言的形式定义 93
3.6.2   文法规则和等式 94
3.6.3   乔姆斯基层次和作为上下文无关
规则的语法局限 95
3.7   TINY语言的语法 97
3.7.1   TINY的上下文无关文法 97
3.7.2   TINY编译器的语法树结构 98
练习 101
注意与参考 104
第4章   自顶向下的分析 105
4.1   使用递归下降分析算法进行自顶向下
的分析 105
4.1.1   递归下降分析的基本方法 105
4.1.2   重复和选择:使用EBNF 107
4.1.3   其他决定问题 112
4.2   LL(1)分析 113
4.2.1   LL(1)分析的基本方法 113
4.2.2   LL(1)分析与算法 114
4.2.3   消除左递归和提取左因子 117
4.2.4   在LL(1)分析中构造语法树 124
4.3   First集合和Follow集合 125
4.3.1   First 集合 125
4.3.2   Follow 集合 130
4.3.3   构造LL(1)分析表 134
4.3.4   再向前:LL(k)分析程序 135
4.4   TINY语言的递归下降分析程序 136
4.5   自顶向下分析程序中的错误校正 137
4.5.1   在递归下降分析程序中的错误
校正 138
4.5.2   在LL(1)分析程序中的错误校正 140
4.5.3   在TINY分析程序中的错误校正 141
练习 143
编程练习 146
注意与参考 148
第5章   自底向上的分析 150
5.1   自底向上分析概览 151
5.2   LR(0)项的有穷自动机与LR(0)分析 153
5.2.1   LR(0)项 153
5.2.2   项目的有穷自动机 154
5.2.3   LR(0)分析算法 157
5.3   SLR(1)分析 160
5.3.1   SLR(1)分析算法 160
5.3.2   用于分析冲突的消除二义性
规则 163
5.3.3   SLR(1)分析能力的局限性 164
5.3.4   SLR(k)文法 165
5.4   一般的LR(1)和LALR(1)分析 166
5.4.1   LR(1)项的有穷自动机 166
5.4.2   LR(1)分析算法 169
5.4.3   LALR(1)分析 171
5.5   Yacc:一个LALR(1)分析程序的
生成器 173
5.5.1   Yacc基础 173
5.5.2   Yacc选项 176
5.5.3   分析冲突与消除二义性的规则 180
5.5.4   描述Yacc分析程序的执行 183
5.5.5   Yacc中的任意值类型 184
5.5.6   Yacc中嵌入的动作 185
5.6   使用Yacc生成TINY分析程序 186
5.7   自底向上分析程序中的错误校正 188
5.7.1   自底向上分析中的错误检测 188
5.7.2   应急方式错误校正 188
5.7.3   Yacc中的错误校正 189
5.7.4   TINY中的错误校正 192
练习 192
编程练习 195
注意与参考 197
第6章   语义分析 198
6.1   属性和属性文法 199
6.1.1   属性文法 200
6.1.2   属性文法的简化和扩充 206
6.2   属性计算算法 207
6.2.1   相关图和赋值顺序 208
6.2.2   合成和继承属性 212
6.2.3   作为参数和返回值的属性 219
6.2.4   使用扩展数据结构存储属性值 221
6.2.5   语法分析时属性的计算 223
6.2.6   语法中属性计算的相关性 226
6.3   符号表 227
6.3.1   符号表的结构 228
6.3.2   说明 230
6.3.3   作用域规则和块结构 232
6.3.4   同层说明的相互作用 236
6.3.5   使用符号表的属性文法的一个
扩充例子 237
6.4   数据类型和类型检查 241
6.4.1   类型表达式和类型构造器 242
6.4.2   类型名、类型说明和递归类型 246
6.4.3   类型等价 248
6.4.4   类型推论和类型检查 253
6.4.5   类型检查的其他主题 255
6.5   TINY语言的语义分析 257
6.5.1   TINY的符号表 258
6.5.2   TINY语义分析程序 259
练习 260
编程练习 264
注意与参考 264
第7章   运行时环境 266
7.1   程序执行时的存储器组织 266
7.2   完全静态运行时环境 269
7.3   基于栈的运行时环境 271
7.3.1   没有局部过程的基于栈的环境 271
7.3.2  带有局部过程的基于栈的环境 281
7.3.3   带有过程参数的基于栈的环境 284
7.4   动态存储器 286
7.4.1   完全动态运行时环境 286
7.4.2   面向对象的语言中的动态存储器 287
7.4.3   堆管理 289
7.4.4   堆的自动管理 292
7.5   参数传递机制 292
7.5.1   值传递 293
7.5.2   引用传递 294
7.5.3   值结果传递 295
7.5.4   名字传递 295
7.6   TINY语言的运行时环境 296
练习 297
编程练习 303
注意与参考 304
第8章   代码生成 305
8.1   中间代码和用于代码生成的数据
结构 305
8.1.1   三地址码 306
8.1.2   用于实现三地址码的数据结构 308
8.1.3   P-代码 310
8.2   基本的代码生成技术 312
8.2.1   作为合成属性的中间代码或目标
代码 312
8.2.2   实际的代码生成 314
8.2.3   从中间代码生成目标代码 317
8.3   数据结构引用的代码生成 319
8.3.1   地址计算 319
8.3.2   数组引用 320
8.3.3   栈记录结构和指针引用 325
8.4   控制语句和逻辑表达式的代码生成 328
8.4.1   if 和while 语句的代码生成 328
8.4.2   标号的生成和回填 330
8.4.3   逻辑表达式的代码生成 330
8.4.4   if 和while 语句的代码生成过程
样例 331
8.5   过程和函数调用的代码生成 334
8.5.1   过程和函数的中间代码 334
8.5.2   函数定义和调用的代码生成过程 336
8.6   商用编译器中的代码生成:两个案
例研究 339
8.6.1   对于80×86的Borland 3.0版C编
译器 339
8.6.2   Sun SparcStation的Sun 2.0 C编
译器 343
8.7   TM:简单的目标机器 346
8.7.1   Tiny Machine的基本结构 347
8.7.2   TM模拟器 349
8.8   TINY语言的代码生成器 351
8.8.1   TINY代码生成器的TM接口 351
8.8.2   TINY代码生成器 352
8.8.3   用TINY编译器产生和使用TM
代码文件 354
8.8.4   TINY编译器生成的TM代码文
件示例 355
8.9   代码优化技术考察 357
8.9.1   代码优化的主要来源 358
8.9.2   优化分类 360
8.9.3   优化的数据结构和实现技术 362
8.10   TINY代码生成器的简单优化 366
8.10.1   将临时变量放入寄存器 366
8.10.2   在寄存器中保存变量 367
8.10.3   优化测试表达式 367
练习 368
编程练习 371
注意与参考 372
附录A   编译器设计方案 373
附录B   小型编译器列表 381
附录C   Tiny Machine模拟器列表 417


Platform: | Size: 7612048 | Author: wesong | Hits:

[assembly language表盘式时钟汇编原代码

Description: 基本设计要求 1 在屏幕上显示一个适当大小的圆形,再圆形道上均匀的分配着60个点,代表1秒—60秒的位置,凡是5倍的点应当比其他的大。 2 以圆中心为轴,画一条斜线代表秒针,采用定时中断方式,每过1秒钟,秒针移动一个位置。 3 定时源可以使用试验箱上的8253。 4 按“ESC”之后,结束演示。 - The basic design requests 1 on the screen to demonstrate a suitable size the circular, the circular on even assignment 60 spots, are representing 1 second 鈻?0 second positions again, every is 5 time of spots must compared to other big. 2 take the round center as an axis, draws an oblique line to represent the second hand, uses fixed time severs the way, each 1 second, the second hand has moved a position. 3 fixed time sources may in the field test box 8,253. After 4 presses \"ESC\", the conclusion demonstrates.
Platform: | Size: 39620 | Author: 陈万通 | Hits:

[assembly language8253 8259 time

Description: 计时程序,对8253进行分频,使用二个计数器,使第二个计数器的OUT作为中断源,送到8259产生中断,在LED上显示时间-time procedures for the 8,253-frequency, the use of two counters, so that a second counter OUT interrupted as a source to have interrupted 8259, the time shown on the LED
Platform: | Size: 871 | Author: 钟华 | Hits:

[Hook api253

Description: 钩子技术 钩子技术 钩子技术 钩子技术-Hook Hook Hook Hook Hook Hook Hook
Platform: | Size: 1974544 | Author: 钱军 | Hits:

[Windows Developchpt7

Description: 国DARPA支持的项目(Virtual IterNet Testbed)开发了通用的多协议网络模拟软件NS—2 我所说的网络模拟就是基于NS系统的通信网络模拟,就是用计算机程序-States DARPA-supported project (Virtual IterNet 253-260) Development GM's multi-protocol network simulation software NS-2 I have said is based on network simulation system NS communications network simulation , which is to use a computer program
Platform: | Size: 1037034 | Author: 潘池浪 | Hits:

[Windows Developchpt0

Description: 国DARPA支持的项目(Virtual IterNet Testbed)开发了通用的多协议网络模拟软件NS—2 我所说的网络模拟就是基于NS系统的通信网络模拟,就是用计算机程序-States DARPA-supported project (Virtual IterNet 253-260) Development GM's multi-protocol network simulation software NS-2 I have said is based on network simulation system NS communications network simulation , which is to use a computer program
Platform: | Size: 352758 | Author: 潘池浪 | Hits:

[assembly languageqin

Description: 我写的电子琴用8253的程序,有点浪费资源,不过听好用的,大家不妨参考一下-I write flower with 8,253 procedures, a bit of a waste of resources, but to listen to everything, you may wish to make reference to
Platform: | Size: 877 | Author: chen | Hits:

[Other resourcethreerayRayleigh

Description: %threerayRayleigh.m % Last Homework pp. 253 5.31 (Second Edition English) % Default parameters % -threerayRayleigh.m%% Last Homework pp. 2 53 5.31 (English Second Edition) para% Default meters%
Platform: | Size: 1051 | Author: 姚万里 | Hits:

[Other resourceexp09_3

Description: 可编程定时器_计数器,调用控制8253计数器,可打印记数结果.-programmable timer counters, call control 8,253 counter, can print the results in mind.
Platform: | Size: 2566 | Author: 唐迪 | Hits:

[assembly languagemode0

Description: 微机接口试验的8253工作方式0的测试程序-Computer Interface Test 0 8,253 working methods of testing procedures
Platform: | Size: 792 | Author: 王锐 | Hits:

[Othermakeobj

Description: This program is copyrighted by it s author and you are granted a free license to use the program for non-commercial purposes. If you are interested in using the program for commercial purposes please contact Kevin W. Russell at CIS 71551,253 for licensing information.
Platform: | Size: 34736 | Author: 王宏 | Hits:

[JSP/Javachap07

Description: 第7章 Java B/S结构编程 253 实例76 简单的Servlet程序 254 实例77 简单的留言簿 256 实例78 JSP+Java Bean的计数器 258 实例79 数据库查询 260 实例80 文件的上传下载 262 实例81 收发E-mail 267 实例82 B/S结构的聊天室 269 实例83 网上选课 276 实例84 B/S结构的商业应用——购物车 282 实例85 通过JSP调用Applet程序 285 实例86 JSP与XML的结合 2
Platform: | Size: 194497 | Author: zmm | Hits:

[Other resourceEVEmu-0.6.253

Description: Eve Online的模拟器,全套服务端源代码,VC版。
Platform: | Size: 919826 | Author: Luo ShiBao | Hits:

[Other resourcers255253

Description: Reed Solomon(255/253)纠错码的编解码器-RS is the short form for Reed-Solomon whih is a kind of algorithm for encoding. This package is the en-/decoder for the Reed-Solomon (255,253) error correction codes.
Platform: | Size: 1401 | Author: 陈龙 | Hits:

[Other Games瑪莉台(老虎機)

Description:

var
  Form1: TForm1;
  MousePos: TPoint;
  bet_x : Integer;
  bet_y : Integer;
  i, j, k, l, r, m, n : integer;// i:大迴圈 J:跑燈迴圈 K:倍數燈 L:倍數燈 M:大小燈  n:比倍迴圈
  left_bai, right_bai : Integer; //左邊倍數..右邊倍數
  Ti, Tj : Cardinal; //迴圈時間 , 押注連續時間
  rb, rd : integer;//加速用定位
  score : Integer;//現有分數
  take_score : Integer;//得分
  bet_ok : Boolean;    //押注完成
  re_bet : Boolean;    //重新押注
  bar_bet, seven_bet, star_bet, Watermelon_bet, bell_bet, Lemon_bet, Orange_bet, apple_bet : Integer;
  bar_bet_full, seven_bet_full, star_bet_full, Watermelon_bet_full, bell_bet_full, Lemon_bet_full, Orange_bet_full, apple_bet_full : Boolean; //下注全滿
  bet_all : Integer;//押注總和
  runing : Boolean; //正在跑燈
  not_take_score : Boolean;//是否已經取回得分
  big_small : Integer;  //大小  大:0  小:1
implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  if (not AsphyreDevice1.Initialize()) then
  begin
   Close();
   Exit;
  end;

  Randomize;
  Ti := 451; //毫秒
  score := 5000;
  bet_ok := False;
  runing := False;
  re_bet := True;
  not_take_score := False;
  Tj := 50;
  PlaySound('R_21',hinstance,SND_ASYNC or SND_RESOURCE);

end;

procedure TForm1.AsphyreDevice1Initialize(Sender: TObject;
  var Success: Boolean);
begin
  Success:=AsphyreFonts1.LoadFromASDb(ASDb1);
  if (Success) then
  Success:=AsphyreImages1.LoadFromASDb(ASDB1);
  //if (Success) then SoundSystem1.LoadFromASDb(ASDb1);
  AsphyreTimer1.Enabled:= Success;
end;

procedure TForm1.AsphyreDevice1Render(Sender: TObject);
begin
  AsphyreCanvas1.Draw(AsphyreImages1.Image['23ok1.image'],0,0,0,1); //背景加載
  AsphyreFonts1[2].TextOut(format('%6s',[IntToStr(score)]), 232,56, $FF2425FF); //資金顯示( $FF0400FF 正紅 )
  AsphyreFonts1[2].TextOut(format('%6s',[IntToStr(take_score)]), 66,56, $FF2425FF); //得分顯示( $FF0400FF 正紅 )
  AsphyreFonts1[2].TextOut(format('%2s',[IntToStr(bar_bet)]), 18,523, $FF2425FF); //BAR押注顯示( $FF0400FF 正紅 )
  AsphyreFonts1[2].TextOut(format('%2s',[IntToStr(seven_bet)]), 64,523, $FF2425FF); //77押注顯示( $FF0400FF 正紅 )
  AsphyreFonts1[2].TextOut(format('%2s',[IntToStr(star_bet)]), 112,523, $FF2425FF); //双星押注顯示( $FF0400FF 正紅 )
  AsphyreFonts1[2].TextOut(format('%2s',[IntToStr(Watermelon_bet)]), 159,523, $FF2425FF); //西瓜押注顯示( $FF0400FF 正紅 )
  AsphyreFonts1[2].TextOut(format('%2s',[IntToStr(bell_bet)]), 206,523, $FF2425FF); //鈴鐺押注顯示( $FF0400FF 正紅 )
  AsphyreFonts1[2].TextOut(format('%2s',[IntToStr(Lemon_bet)]), 253,523, $FF2425FF); //檸檬押注顯示( $FF0400FF 正紅 )
  AsphyreFonts1[2].TextOut(format('%2s',[IntToStr(Orange_bet)]), 300,523, $FF2425FF); //橘子押注顯示( $FF0400FF 正紅 )
  AsphyreFonts1[2].TextOut(format('%2s',[IntToStr(apple_bet)]), 347,523, $FF2425FF); //蘋果押注顯示( $FF0400FF 正紅 )
  //AsphyreCanvas1.Draw(AsphyreImages1.Image['1.image'], 174,90+i,0,1);
  Demo;
  Form1.FormStyle := fsStayOnTop;
  if (bet_x > 267) and (bet_x < 374) and (bet_y > 555) and (bet_y < 588) then AsphyreCanvas1.Draw(AsphyreImages1.Image['start4.image'], 265,555,0,1);
  if (bet_x > 24) and (bet_x < 83) and (bet_y > 559) and (bet_y < 587) then AsphyreCanvas1.Draw(AsphyreImages1.Image['big2.image'], 24,559,0,1);
  if (bet_x > 89) and (bet_x < 144) and (bet_y > 559) and (bet_y < 587) then AsphyreCanvas1.Draw(AsphyreImages1.Image['small2.image'], 89,559,0,1);
end;

procedure TForm1.AsphyreTimer1Timer(Sender: TObject);
begin
  AsphyreDevice1.Render(0,true);
  AsphyreDevice1.Flip;
end;

procedure TForm1.Demo();     //選擇性顯示
begin
    case j of
      1 : AsphyreCanvas1.Draw(AsphyreImages1.Image['1.image'], 174,90,0,fxMax);
      2 : AsphyreCanvas1.Draw(AsphyreImages1.Image['1.image'], 224,90,0,fxMax);
      3 : AsphyreCanvas1.Draw(AsphyreImages1.Image['1.image'], 276,90,0,fxMax);
      4 : AsphyreCanvas1.Draw(AsphyreImages1.Image['1.image'], 326,90,0,fxMax);
      5 : AsphyreCanvas1.Draw(AsphyreImages1.Image['1.image'], 326,142,0,fxMax);
      6 : AsphyreCanvas1.Draw(AsphyreImages1.Image['1.image'], 326,192,0,fxMax);
      7 : AsphyreCanvas1.Draw(AsphyreImages1.Image['1.image'], 326,244,0,fxMax);
      8 : AsphyreCanvas1.Draw(AsphyreImages1.Image['1.image'], 326,294,0,fxMax);
      9 : AsphyreCanvas1.Draw(AsphyreImages1.Image['1.image'], 326,346,0,fxMax);
      10 : AsphyreCanvas1.Draw(AsphyreImages1.Image['1.image'], 326,398,0,fxMax);
      11 : AsphyreCanvas1.Draw(AsphyreImages1.Image['1.image'], 276,398,0,fxMax);
      12 : AsphyreCanvas1.Draw(AsphyreImages1.Image['1.image'], 224,398,0,fxMax);
      13 : AsphyreCanvas1.Draw(AsphyreImages1.Image['1.image'], 174,398,0,fxMax);
      14 : AsphyreCanvas1.Draw(AsphyreImages1.Image['1.image'], 122,398,0,fxMax);
      15 : AsphyreCanvas1.Draw(AsphyreImages1.Image['1.image'], 71,398,0,fxMax);
      16 : AsphyreCanvas1.Draw(AsphyreImages1.Image['1.image'], 20,398,0,fxMax);
      17 : AsphyreCanvas1.Draw(AsphyreImages1.Image['1.image'], 20,346,0,fxMax);
      18 : AsphyreCanvas1.Draw(AsphyreImages1.Image['1.image'], 20,294,0,fxMax);
      19 : AsphyreCanvas1.Draw(AsphyreImages1.Image['1.image'], 20,244,0,fxMax);
      20 : AsphyreCanvas1.Draw(AsphyreImages1.Image['1.image'], 20,192,0,fxMax);
      21 : AsphyreCanvas1.Draw(AsphyreImages1.Image['1.image'], 20,142,0,fxMax);
      22 : AsphyreCanvas1.Draw(AsphyreImages1.Image['1.image'], 20,90,0,fxMax);
      23 : AsphyreCanvas1.Draw(AsphyreImages1.Image['1.image'], 71,90,0,fxMax);
      24 : AsphyreCanvas1.Draw(AsphyreImages1.Image['1.image'], 122,90,0,fxMax);
    end;
    case k of
      1 : AsphyreCanvas1.Draw(AsphyreImages1.Image['-2.image'], 74,454,0,fxMax);
      2 : AsphyreCanvas1.Draw(AsphyreImages1.Image['-2.image'], 121,454,0,fxMax);
      3 : AsphyreCanvas1.Draw(AsphyreImages1.Image['-2.image'], 167,454,0,fxMax);
    end;
    case l of
      1 : AsphyreCanvas1.Draw(AsphyreImages1.Image['-2.image'], 309,454,0,fxMax);
      2 : AsphyreCanvas1.Draw(AsphyreImages1.Image['-2.image'], 261,454,0,fxMax);
      3 : AsphyreCanvas1.Draw(AsphyreImages1.Image['-2.image'], 215,454,0,fxMax);
    end;
    case m of
      1 : AsphyreCanvas1.Draw(AsphyreImages1.Image['-1.image'], 123,285,0,fxMax);
      2 : AsphyreCanvas1.Draw(AsphyreImages1.Image['-1.image'], 244,285,0,fxMax);
    end;
end;


procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if (x > 267) and (x < 374) and (y > 555) and (y < 588) or    //这里是改变鼠标样子的 --開始
     (x > 14) and (x < 55) and (y > 492) and (y < 546) or //--BAR
     (x > 61) and (x < 101) and (y > 492) and (y < 546) or  //--77
     (x > 109) and (x < 149) and (y > 492) and (y < 546) or  // --双星
     (x > 155) and (x < 197) and (y > 492) and (y < 546) or  // --西瓜
     (x > 203) and (x < 243) and (y > 492) and (y < 546) or  //  --鈴鐺
     (x > 249) and (x < 289) and (y > 492) and (y < 546) or  //  --檸檬
     (x > 297) and (x < 337) and (y > 492) and (y < 546) or  //  --橘子
     (x > 344) and (x < 384) and (y > 492) and (y < 546) or  //  --蘋果
     (x > 24) and (x < 83) and (y > 559) and (y < 587) or    //  --押大
     (x > 89) and (x < 144) and (y > 559) and (y < 587) then //  --壓小
     begin
       form1.Cursor := crHandPoint //进入这个区域,鼠标变成手型
     end
  else
    form1.Cursor := crDefault; //离开时,恢复默认鼠标

GetCursorPos(MousePos);
//Form1.Caption:='相對座標'+IntToStr(x)+','+IntToStr(y) + '絕對座標'+IntToStr(MousePos.X)+','+IntToStr(MousePos.Y);
bet_x := x;
bet_y := y;

end;



procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if (x > 267) and (x < 374) and (y > 555) and (y < 588) then // --開始
    begin


    end;
  if (x > 14) and (x < 55) and (y > 492) and (y < 546) then  //--BAR 押分
    begin

    end;
  if (x > 109) and (x < 149) and (y > 492) and (y < 546) then  //--77 押分
  begin

  end;
  if (x > 109) and (x < 149) and (y > 492) and (y < 546) then    // --双星
  begin

  end;
  if (x > 155) and (x < 197) and (y > 492) and (y < 546) then     // --西瓜
  begin

  end;
  if (x > 203) and (x < 243) and (y > 492) and (y < 546) then     //  --鈴鐺
  begin

  end;
  if (x > 249) and (x < 289) and (y > 492) and (y < 546) then      //  --檸檬
  begin

  end;
  if (x > 297) and (x < 337) and (y > 492) and (y < 546) then      //  --橘子
  begin

  end;
  if (x > 344) and (x < 384) and (y > 492) and (y < 546) then   //  --蘋果
  begin

  end;
end;


procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if (x > 267) and (x < 374) and (y > 555) and (y < 588) then // --開始壓下檢查
     begin
       if (not runing) then
       begin
         if (take_score > 0) then
           begin
             PlaySound('R_1',hinstance,SND_ASYNC or SND_RESOURCE);
             score := take_score + score;
             take_score := 0;
           end
           else
             start_key();
       end;
     end;
  if (x > 14) and (x < 55) and (y > 492) and (y < 546) then  //--BAR 押分
    begin

    end;
  if (x > 61) and (x < 101) and (y > 492) and (y < 546) then  //--77 押分
    begin

    end;
  if (x > 109) and (x < 149) and (y > 492) and (y < 546) then    // --双星
  begin

  end;
  if (x > 155) and (x < 197) and (y > 492) and (y < 546) then     // --西瓜
  begin

  end;
  if (x > 203) and (x < 243) and (y > 492) and (y < 546) then     //  --鈴鐺
  begin

  end;
  if (x > 249) and (x < 289) and (y > 492) and (y < 546) then      //  --檸檬
  begin

  end;
  if (x > 297) and (x < 337) and (y > 492) and (y < 546) then      //  --橘子
  begin

  end;
  if (x > 344) and (x < 384) and (y > 492) and (y < 546) then   //  --蘋果
  begin

  end;
  if (x > 24) and (x < 83) and (y > 559) and (y < 587) then   //  --押大
  begin
    if (take_score >= 1) then
    begin
      big_small := 0;
      r := random(4);
      Timer2.Enabled := True;
    end;
  end;
  if (x > 89) and (x < 144) and (y > 559) and (y < 587) then   //  --押小
  begin
    if (take_score >= 1) then
    begin
      big_small := 1;
      r := random(4);
      Timer2.Enabled := True;
    end;
  end;
  if (x > 201) and (x < 221) and (y > 54) and (y < 74) then  //移動分數
    begin

    end;

end;


procedure TForm1.Timer1Timer(Sender: TObject);    //跑燈
var
  ra : integer;//總步數
begin
  runing := True;
  Timer1.Interval := Ti;
  ra := 72;
  ra := ra + r;
  rb := rb + 1;
  i := i + 1;

  if (rb < 10) then
    begin
      Ti := Ti - 50; //加速
      PlaySound('R_1',hinstance,SND_ASYNC or SND_RESOURCE);
    end;
  if (i > ra-12) then
    begin
      Ti := Ti + 50;//減速
      PlaySound('R_1',hinstance,SND_ASYNC or SND_RESOURCE);
    end;
  j := j + 1;
  if (j >= 25) then j := 1;

  k := k + 1;
  if (k >= 4) then  k := 1;

  l := l + 1;
  if (l >= 4) then l := 1;

  {m := m + 1;
  if (m >= 3) then m := 1;}
  //PlaySound('R_1',hinstance,SND_ASYNC or SND_RESOURCE);
  //SoundSystem1.Play('Unti1.wav', False);
  Form1.Caption := inttostr(Ti) + '-j:' + inttostr(j) + '-r:' + IntToStr(r) + '-ra:' + IntToStr(ra) + '--rb:' + IntToStr(rb) + '__';
  if (i >= ra) then //燈跑完後要做的事
  begin
    Timer1.Enabled := False;
    Ti := 451;
    rb := 0;
    i := j+1;
    take_allscore();
  end;
end;

procedure TForm1.Timer2Timer(Sender: TObject);
var
  rc : integer;//總步數
begin
  runing := True;
  Timer2.Interval := Tj;
  rc := 12;
  rc := rc + r;
  rd := rd + 1;
  n := 1 + n;
  if (n >= rc) then //燈跑完後要做的事
  begin
    Timer2.Enabled := False;
    Tj := 50;
    rd := 1;
    n := 0;
    bi_bai_take_allscore();
  end;
 
  if (n > rc-12) then
    begin
      Tj := Tj + 50;//減速
      PlaySound('R_1',hinstance,SND_ASYNC or SND_RESOURCE);
    end;

  m := m + 1;
  if (m >= 3) then m := 1;
end;



procedure TForm1.take_allscore();
begin
  case k of
      1 : left_bai := 40;
      2 : left_bai := 30;
      3 : left_bai := 20;
    end;

  case k of
      1 : right_bai := 10;
      2 : right_bai := 20;
      3 : right_bai := 15;
    end;

  case j of
      1 : begin
          if (bar_bet >= 1) then
          begin
             PlaySound('R_11',hinstance,SND_ASYNC or SND_RESOURCE);
             take_score := bar_bet * 100;
          end;
           end;
      2 : begin
          if (apple_bet >= 1) then
          begin
            PlaySound('R_18',hinstance,SND_ASYNC or SND_RESOURCE);
            take_score := apple_bet * 5;
          end;
          end;
      3 : begin
          if (Lemon_bet >= 1) then
          begin
            PlaySound('R_16',hinstance,SND_ASYNC or SND_RESOURCE);
            take_score := Lemon_bet * 2;
          end;
          end;
      4 : begin
          if (Lemon_bet >= 1) then
          begin
            PlaySound('R_16',hinstance,SND_ASYNC or SND_RESOURCE);
            take_score := Lemon_bet * right_bai;
          end;
          end;
      5 : begin
          if (Watermelon_bet >= 1) then
          begin
            PlaySound('R_14',hinstance,SND_ASYNC or SND_RESOURCE);
            take_score := Watermelon_bet * left_bai;
          end;
          end;
      6 : begin
          if (Watermelon_bet >= 1) then
          begin
            PlaySound('R_14',hinstance,SND_ASYNC or SND_RESOURCE);
            take_score := Watermelon_bet * 2;
          end;
          end;
      7 : begin
            take_score := 0;
          end;
      8 : begin
          if (apple_bet >= 1) then
          begin
            PlaySound('R_18',hinstance,SND_ASYNC or SND_RESOURCE);
            take_score := apple_bet * 5;
          end;
          end;
      9 : begin
          if (Orange_bet >= 1) then
          begin
            PlaySound('R_17',hinstance,SND_ASYNC or SND_RESOURCE);
            take_score := Orange_bet * 2;
          end;
          end;
      10 : begin
           if (Orange_bet >= 1) then
           begin
            PlaySound('R_17',hinstance,SND_ASYNC or SND_RESOURCE);
            take_score := Orange_bet * right_bai;
           end;
          end;
      11 : begin
           if (bell_bet >= 1) then
           begin
             PlaySound('R_15',hinstance,SND_ASYNC or SND_RESOURCE);
             take_score := bell_bet * right_bai;
           end;
           end;
      12 : begin
           if (bell_bet >= 1) then
           begin
             PlaySound('R_15',hinstance,SND_ASYNC or SND_RESOURCE);
             take_score := bell_bet * 2;
           end;
           end;
      13 : begin
           if (seven_bet >= 1) then
           begin
             PlaySound('R_12',hinstance,SND_ASYNC or SND_RESOURCE);
             take_score := seven_bet * left_bai;
           end;
           end;
      14 : begin
           if (apple_bet >= 1) then
           begin
             PlaySound('R_18',hinstance,SND_ASYNC or SND_RESOURCE);
             take_score := apple_bet * 5;
           end;
           end;
      15 : begin
           if (apple_bet >= 1) then
           begin
             PlaySound('R_18',hinstance,SND_ASYNC or SND_RESOURCE);
             take_score := apple_bet * 2;
           end;
           end;
      16 : begin
           if (Lemon_bet >= 1) then
           begin
             PlaySound('R_16',hinstance,SND_ASYNC or SND_RESOURCE);
             take_score := Lemon_bet * right_bai;
           end;
           end;
      17 : begin
           if (star_bet >= 1) then
           begin
             PlaySound('R_13',hinstance,SND_ASYNC or SND_RESOURCE);
             take_score := star_bet * left_bai;
           end;
           end;
      18 : begin
           if (star_bet >= 1) then
           begin
             PlaySound('R_13',hinstance,SND_ASYNC or SND_RESOURCE);
             take_score := star_bet * 2;
           end;
           end;
      19 : begin
             take_score := 0;
           end;
      20 : begin
           if (apple_bet >= 1) then
           begin
             PlaySound('R_18',hinstance,SND_ASYNC or SND_RESOURCE);
             take_score := apple_bet * 5;
           end;
           end;
      21 : begin
           if (seven_bet >= 1) then
           begin
             PlaySound('R_12',hinstance,SND_ASYNC or SND_RESOURCE);
             take_score := seven_bet * 2;
           end;
           end;
      22 : begin
           if (Orange_bet >= 1) then
           begin
             PlaySound('R_17',hinstance,SND_ASYNC or SND_RESOURCE);
             take_score := Orange_bet * right_bai;
           end;
           end;
      23 : begin
           if (bell_bet >= 1) then
           begin
             PlaySound('R_11',hinstance,SND_ASYNC or SND_RESOURCE);
             take_score := bell_bet * right_bai;
           end;
           end;
      24 : begin
           if (bar_bet >= 1) then
           begin
             PlaySound('R_18',hinstance,SND_ASYNC or SND_RESOURCE);
             take_score := bar_bet * 50;
           end;
           end;
    end;

  runing := False;
  bet_ok := False;;
  re_bet := True;
  bar_bet_full := False;
  seven_bet_full := False;
  star_bet_full := False;
  Watermelon_bet_full := False;
  bell_bet_full := False;
  Lemon_bet_full := False;
  Orange_bet_full := False;
  apple_bet_full := False;
end;

procedure TForm1.bi_bai_take_allscore();
begin
  case m of
      1 : if (big_small = 1) then
          begin
            take_score := take_score * 2;
            PlaySound('R_19',hinstance,SND_ASYNC or SND_RESOURCE);
          end
            else
            begin
            take_score := 0;
            PlaySound('R_20',hinstance,SND_ASYNC or SND_RESOURCE);
            end;
      2 : if (big_small = 0) then
          begin
            take_score := take_score * 2;
            PlaySound('R_19',hinstance,SND_ASYNC or SND_RESOURCE);
          end
            else
            begin
            take_score := 0;
            PlaySound('R_20',hinstance,SND_ASYNC or SND_RESOURCE);
            end;
    end;

  runing := False;
  bet_ok := False;;
  re_bet := True;
  bar_bet_full := False;
  seven_bet_full := False;
  star_bet_full := False;
  Watermelon_bet_full := False;
  bell_bet_full := False;
  Lemon_bet_full := False;
  Orange_bet_full := False;
  apple_bet_full := False;
end;



procedure TForm1.start_key();
begin
  bet_all := bar_bet + seven_bet + star_bet + Watermelon_bet + bell_bet + Lemon_bet + Orange_bet + apple_bet;
  if (not runing) then
     begin
       if (take_score >= 0) then
          begin
            score := take_score + score;
            take_score := 0;
            if (bar_bet >= 1) or (seven_bet >= 1) or (star_bet >= 1) or (Watermelon_bet >= 1) or
               (bell_bet >= 1) or (Lemon_bet >= 1) or (Orange_bet >= 1) or (apple_bet >= 1) then
               Begin
                 if re_bet then
                 begin
                   if (score >= bet_all) then
                   begin
                     score := score - bet_all;
                     bet_ok := True;
                   end
                   else
                   begin
                     bet_ok := False;
                     Exit;
                   end;
                 end;
                 if bet_ok then
                 begin
                   r := random(24);
                   Timer1.Enabled := True;
                 end;
               end;
          end;
     end;
end;




procedure TForm1.FormMouseWheelDown(Sender: TObject; Shift: TShiftState;
  MousePos: TPoint; var Handled: Boolean);
begin
  if (bet_x > 14) and (bet_x < 55) and (bet_y > 492) and (bet_y < 546) then  //--BAR 押分
    begin
      if (not runing) then
      begin
        if (score >= 1) then
        begin
          if re_bet then
          begin
            score := take_score + score;
            take_score := 0;

            bar_bet := 0;
            seven_bet := 0;
            star_bet := 0;
            Watermelon_bet := 0;
            bell_bet := 0;
            Lemon_bet := 0;
            Orange_bet := 0;
            apple_bet := 0;
            re_bet := False;
          end
          else
          begin
            if (bar_bet >= 99) then
            begin
              bar_bet_full := True;
            end
            else
            begin
              PlaySound('R_2',hinstance,SND_ASYNC or SND_RESOURCE);
              score := score - 1;
              bar_bet := bar_bet + 1;
              bet_ok := True;
            end;
          end;
        end;
      end;
    end;
  if (bet_x > 61) and (bet_x < 101) and (bet_y > 492) and (bet_y < 546) then  //--77 押分
    begin
      if (not runing) then
      begin
        if (score >= 1) then
        begin
          if re_bet then
          begin
            score := take_score + score;
            take_score := 0;
            bar_bet := 0;
            seven_bet := 0;
            star_bet := 0;
            Watermelon_bet := 0;
            bell_bet := 0;
            Lemon_bet := 0;
            Orange_bet := 0;
            apple_bet := 0;
            re_bet := False;
          end
          else
          begin
            if (seven_bet >= 99) then
            begin
              seven_bet_full := True;
            end
            else
            begin
              PlaySound('R_3',hinstance,SND_ASYNC or SND_RESOURCE);
              score := score - 1;
              seven_bet := seven_bet + 1;
              bet_ok := True;
            end;
          end;
        end;
      end;
    end;
  if (bet_x > 109) and (bet_x < 149) and (bet_y > 492) and (bet_y < 546) then  //--star 押分
    begin
      if (not runing) then
      begin
        if (score >= 1) then
        begin
          if re_bet then
          begin
            score := take_score + score;
            take_score := 0;
            bar_bet := 0;
            seven_bet := 0;
            star_bet := 0;
            Watermelon_bet := 0;
            bell_bet := 0;
            Lemon_bet := 0;
            Orange_bet := 0;
            apple_bet := 0;
            re_bet := False;
          end
          else
          begin
            if (star_bet >= 99) then
            begin
              star_bet_full := True;
            end
            else
            begin
              PlaySound('R_4',hinstance,SND_ASYNC or SND_RESOURCE);
              score := score - 1;
              star_bet := star_bet + 1;
              bet_ok := True;
            end;
          end;
        end;
      end;
    end;
  if (bet_x > 155) and (bet_x < 197) and (bet_y > 492) and (bet_y < 546) then  //--西瓜 押分
    begin
      if (not runing) then
      begin
        if (score >= 1) then
        begin
          if re_bet then
          begin
            score := take_score + score;
            take_score := 0;
            bar_bet := 0;
            seven_bet := 0;
            star_bet := 0;
            Watermelon_bet := 0;
            bell_bet := 0;
            Lemon_bet := 0;
            Orange_bet := 0;
            apple_bet := 0;
            re_bet := False;
          end
          else
          begin
            if (Watermelon_bet >= 99) then
            begin
              watermelon_bet_full := True;
            end
            else
            begin
              PlaySound('R_5',hinstance,SND_ASYNC or SND_RESOURCE);
              score := score - 1;
              watermelon_bet := watermelon_bet + 1;
              bet_ok := True;
            end;
          end;
        end;
      end;
    end;
  if (bet_x > 203) and (bet_x < 243) and (bet_y > 492) and (bet_y < 546) then  //--鈴鐺 押分
    begin
      if (not runing) then
      begin
        if (score >= 1) then
        begin
          if re_bet then
          begin
            score := take_score + score;
            take_score := 0;
            bar_bet := 0;
            seven_bet := 0;
            star_bet := 0;
            Watermelon_bet := 0;
            bell_bet := 0;
            Lemon_bet := 0;
            Orange_bet := 0;
            apple_bet := 0;
            re_bet := False;
          end
          else
          begin
            if (bell_bet >= 99) then
            begin
              bell_bet_full := True;
            end
            else
            begin
              PlaySound('R_6',hinstance,SND_ASYNC or SND_RESOURCE);
              score := score - 1;
              bell_bet := bell_bet + 1;
              bet_ok := True;
            end;
          end;
        end;
      end;
    end;
  if (bet_x > 249) and (bet_x < 289) and (bet_y > 492) and (bet_y < 546) then  //--檸檬 押分
    begin
      if (not runing) then
      begin
        if (score >= 1) then
        begin
          if re_bet then
          begin
            score := take_score + score;
            take_score := 0;
            bar_bet := 0;
            seven_bet := 0;
            star_bet := 0;
            Watermelon_bet := 0;
            bell_bet := 0;
            Lemon_bet := 0;
            Orange_bet := 0;
            apple_bet := 0;
            re_bet := False;
          end
          else
          begin
            if (lemon_bet >= 99) then
            begin
              lemon_bet_full := True;
            end
            else
            begin
              PlaySound('R_7',hinstance,SND_ASYNC or SND_RESOURCE);
              score := score - 1;
              lemon_bet := lemon_bet + 1;
              bet_ok := True;
            end;
          end;
        end;
      end;
    end;
  if (bet_x > 297) and (bet_x < 337) and (bet_y > 492) and (bet_y < 546) then  //--橘子 押分
    begin
      if (not runing) then
      begin
        if (score >= 1) then
        begin
          if re_bet then
          begin
            score := take_score + score;
            take_score := 0;
            bar_bet := 0;
            seven_bet := 0;
            star_bet := 0;
            Watermelon_bet := 0;
            bell_bet := 0;
            Lemon_bet := 0;
            Orange_bet := 0;
            apple_bet := 0;
            re_bet := False;
          end
          else
          begin
            if (orange_bet >= 99) then
            begin
              orange_bet_full := True;
            end
            else
            begin
              PlaySound('R_8',hinstance,SND_ASYNC or SND_RESOURCE);
              score := score - 1;
              orange_bet := orange_bet + 1;
              bet_ok := True;
            end;
          end;
        end;
      end;
    end;
  if (bet_x > 344) and (bet_x < 384) and (bet_y > 492) and (bet_y < 546) then  //--蘋果 押分
    begin
      if (not runing) then
      begin
        if (score >= 1) then
        begin
          if re_bet then
          begin
            score := take_score + score;
            take_score := 0;
            bar_bet := 0;
            seven_bet := 0;
            star_bet := 0;
            Watermelon_bet := 0;
            bell_bet := 0;
            Lemon_bet := 0;
            Orange_bet := 0;
            apple_bet := 0;
            re_bet := False;
          end
          else
          begin
            if (apple_bet >= 99) then
            begin
              apple_bet_full := True;
            end
            else
            begin
              PlaySound('R_9',hinstance,SND_ASYNC or SND_RESOURCE);
              score := score - 1;
              apple_bet := apple_bet + 1;
              bet_ok := True;
            end;
          end;
        end;
      end;
    end;
  if bar_bet_full and seven_bet_full and star_bet_full and Watermelon_bet_full and bell_bet_full and Lemon_bet_full and Orange_bet_full and apple_bet_full then
  begin
    start_key();
  end;
end;





procedure TForm1.FormDblClick(Sender: TObject);
begin
  if (not runing) then
      begin
        if (score >= 1) then
        begin
          if (score >= 792) then
          begin
          if re_bet then
          begin
            score := take_score + score;
            take_score := 0;

            bar_bet := 0;
            seven_bet := 0;
            star_bet := 0;
            Watermelon_bet := 0;
            bell_bet := 0;
            Lemon_bet := 0;
            Orange_bet := 0;
            apple_bet := 0;
            re_bet := False;
          end
          else
  &
Platform: | Size: 4438122 | Author: 039917 | Hits:

[Data structs数据结构的C++描述

Description: 目 录 译者序 前言 第一部分 预备知识 第1章 C++程序设计 1 1.1 引言 1 1.2 函数与参数 2 1.2.1 传值参数 2 1.2.2 模板函数 3 1.2.3 引用参数 3 1.2.4 常量引用参数 4 1.2.5 返回值 4 1.2.6 递归函数 5 1.3 动态存储分配 9 1.3.1 操作符new 9 1.3.2 一维数组 9 1.3.3 异常处理 10 1.3.4 操作符delete 10 1.3.5 二维数组 10 1.4 类 13 1.4.1 类Currency 13 1.4.2 使用不同的描述方法 18 1.4.3 操作符重载 20 1.4.4 引发异常 22 1.4.5 友元和保护类成员 23 1.4.6 增加#ifndef, #define和#endif语句 24 1.5 测试与调试 24 1.5.1 什么是测试 24 1.5.2 设计测试数据 26 1.5.3 调试 28 1.6 参考及推荐读物 29 第2章 程序性能 30 2.1 引言 30 2.2 空间复杂性 31 2.2.1 空间复杂性的组成 31 2.2.2 举例 35 2.3 时间复杂性 37 2.3.1 时间复杂性的组成 37 2.3.2 操作计数 37 2.3.3 执行步数 44 2.4 渐进符号(O、 健?、 o) 55 2.4.1 大写O符号 56 2.4.2 椒??58 2.4.3 符号 59 2.4.4 小写o符号 60 2.4.5 特性 60 2.4.6 复杂性分析举例 61 2.5 实际复杂性 66 2.6 性能测量 68 2.6.1 选择实例的大小 69 2.6.2 设计测试数据 69 2.6.3 进行实验 69 2.7 参考及推荐读物 74 第二部分 数据结构 第3章 数据描述 75 3.1 引言 75 3.2 线性表 76 3.3 公式化描述 77 3.3.1 基本概念 77 3.3.2 异常类NoMem 79 3.3.3 操作 79 3.3.4 评价 83 3.4 链表描述 86 3.4.1 类ChainNode 和Chain 86 3.4.2 操作 88 3.4.3 扩充类Chain 91 3.4.4 链表遍历器类 92 3.4.5 循环链表 93 3.4.6 与公式化描述方法的比较 94 3.4.7 双向链表 95 3.4.8 小结 96 3.5 间接寻址 99 3.5.1 基本概念 99 3.5.2 操作 100 3.6 模拟指针 102 3.6.1 SimSpace的操作 103 3.6.2 采用模拟指针的链表 106 3.7 描述方法的比较 110 3.8 应用 111 3.8.1 箱子排序 111 3.8.2 基数排序 116 3.8.3 等价类 117 3.8.4 凸包 122 3.9 参考及推荐读物 127 第4章 数组和矩阵 128 4.1 数组 128 4.1.1 抽象数据类型 128 4.1.2 C++数组 129 4.1.3 行主映射和列主映射 129 4.1.4 类Array1D 131 4.1.5 类Array2D 133 4.2 矩阵 137 4.2.1 定义和操作 137 4.2.2 类Matrix 138 4.3 特殊矩阵 141 4.3.1 定义和应用 141 4.3.2 对角矩阵 143 4.3.3 三对角矩阵 144 4.3.4 三角矩阵 145 4.3.5 对称矩阵 146 4.4 稀疏矩阵 149 4.4.1 基本概念 149 4.4.2 数组描述 149 4.4.3 链表描述 154 第5章 堆栈 161 5.1 抽象数据类型 161 5.2 派生类和继承 162 5.3 公式化描述 163 5.3.1 Stack的效率 164 5.3.2 自定义Stack 164 5.4 链表描述 166 5.5 应用 169 5.5.1 括号匹配 169 5.5.2 汉诺塔 170 5.5.3 火车车厢重排 172 5.5.4 开关盒布线 176 5.5.5 离线等价类问题 178 5.5.6 迷宫老鼠 180 5.6 参考及推荐读物 188 第6章 队列 189 6.1 抽象数据类型 189 6.2 公式化描述 190 6.3 链表描述 194 6.4 应用 197 6.4.1 火车车厢重排 197 6.4.2 电路布线 201 6.4.3 识别图元 204 6.4.4 工厂仿真 206 6.5 参考及推荐读物 217 第7章 跳表和散列 218 7.1 字典 218 7.2 线性表描述 219 7.3 跳表描述 222 7.3.1 理想情况 222 7.3.2 插入和删除 223 7.3.3 级的分配 224 7.3.4 类SkipNode 224 7.3.5 类SkipList 225 7.3.6 复杂性 229 7.4 散列表描述 229 7.4.1 理想散列 229 7.4.2 线性开型寻址散列 230 7.4.3 链表散列 234 7.5 应用——文本压缩 238 7.5.1 LZW压缩 239 7.5.2 LZW压缩的实现 239 7.5.3 LZW解压缩 243 7.5.4 LZW解压缩的实现 243 7.6 参考及推荐读物 247 第8章 二叉树和其他树 248 8.1 树 248 8.2 二叉树 251 8.3 二叉树的特性 252 8.4 二叉树描述 253 8.4.1 公式化描述 253 8.4.2 链表描述 254 8.5 二叉树常用操作 256 8.6 二叉树遍历 256 8.7 抽象数据类型BinaryTree 259 8.8 类BinaryTree 260 8.9 抽象数据类型及类的扩充 263 8.9.1 输出 263 8.9.2 删除 264 8.9.3 计算高度 264 8.9.4 统计节点数 265 8.10 应用 265 8.10.1 设置信号放大器 265 8.10.2 在线等价类 268 8.11 参考及推荐读物 275 第9章 优先队列 276 9.1 引言 276 9.2 线性表 277 9.3 堆 278 9.3.1 定义 278 9.3.2 最大堆的插入 279 9.3.3 最大堆的删除 279 9.3.4 最大堆的初始化 280 9.3.5 类MaxHeap 281 9.4 左高树 285 9.4.1 高度与宽度优先的最大及最小 左高树 285 9.4.2 最大HBLT的插入 287 9.4.3 最大HBLT的删除 287 9.4.4 合并两棵最大HBLT 287 9.4.5 初始化最大HBLT 289 9.4.6 类MaxHBLT 289 9.5 应用 293 9.5.1 堆排序 293 9.5.2 机器调度 294 9.5.3 霍夫曼编码 297 9.6 参考及推荐读物 302 第10章 竞??303 10.1 引言 303 10.2 抽象数据类型WinnerTree 306 10.3 类WinnerTree 307 10.3.1 定义 307 10.3.2 类定义 307 10.3.3 构造函数、析构函数及Winner 函数 308 10.3.4 初始化赢者树 308 10.3.5 重新组织比赛 310 10.4 输者树 311 10.5 应用 312 10.5.1 用最先匹配法求解箱子装载 问题 312 10.5.2 用相邻匹配法求解箱子装载 问题 316 第11章 搜索树 319 11.1 二叉搜索树 320 11.1.1 基本概念 320 11.1.2 抽象数据类型BSTree和 IndexedBSTree 321 11.1.3 类BSTree 322 11.1.4 搜索 322 11.1.5 插入 323 11.1.6 删除 324 11.1.7 类DBSTree 326 11.1.8 二叉搜索树的高度 327 11.2 AVL树 328 11.2.1 基本概念 328 11.2.2 AVL树的高度 328 11.2.3 AVL树的描述 329 11.2.4 AVL搜索树的搜索 329 11.2.5 AVL搜索树的插入 329 11.2.6 AVL搜索树的删除 332 11.3 红-黑树 334 11.3.1 基本概念 334 11.3.2 红-黑树的描述 336 11.3.3 红-黑树的搜索 336 11.3.4 红-黑树的插入 336 11.3.5 红-黑树的删除 339 11.3.6 实现细节的考虑及复杂性分析 343 11.4 B-树 344 11.4.1 索引顺序访问方法 344 11.4.2 m 叉搜索树 345 11.4.3 m 序B-树 346 11.4.4 B-树的高度 347 11.4.5 B-树的搜索 348 11.4.6 B-树的插入 348 11.4.7 B-树的删除 350 11.4.8 节点结构 353 11.5 应用 354 11.5.1 直方图 354 11.5.2 用最优匹配法求解箱子装载 问题 357 11.5.3 交叉分布 359 11.6 参考及推荐读物 363 第12章 图 365 12.1 基本概念 365 12.2 应用 366 12.3 特性 368 12.4 抽象数据类型Graph和Digraph 370 12.5 无向图和有向图的描述 371 12.5.1 邻接矩阵 371 12.5.2 邻接压缩表 373 12.5.3 邻接链表 374 12.6 网络描述 375 12.7 类定义 376 12.7.1 不同的类 376 12.7.2 邻接矩阵类 377 12.7.3 扩充Chain类 380 12.7.4 类LinkedBase 381 12.7.5 链接类 382 12.8 图的遍历 386 12.8.1 基本概念 386 12.8.2 邻接矩阵的遍历函数 387 12.8.3 邻接链表的遍历函数 388 12.9 语言特性 389 12.9.1 虚函数和多态性 389 12.9.2 纯虚函数和抽象类 391 12.9.3 虚基类 391 12.9.4 抽象类和抽象数据类型 393 12.10 图的搜索算法 394 12.10.1 宽度优先搜索 394 12.10.2 类Network 395 12.10.3 BFS的实现 395 12.10.4 BFS的复杂性分析 396 12.10.5 深度优先搜索 397 12.11 应用 399 12.11.1 寻找路径 399 12.11.2 连通图及其构件 400 12.11.3 生成树 402 第三部分 算法设计方法 第13章 贪婪算法 405 13.1 最优化问题 405 13.2 算法思想 406 13.3 应用 409 13.3.1 货箱装船 409 13.3.2 0/1背包问题 410 13.3.3 拓扑排序 412 13.3.4 二分覆盖 415 13.3.5 单源最短路径 421 13.3.6 最小耗费生成树 424 13.4 参考及推荐读物 433 第14章 分而治之算法 434 14.1 算法思想 434 14.2 应用 440 14.2.1 残缺棋盘 440 14.2.2 归并排序 443 14.2.3 快速排序 447 14.2.4 选择 452 14.2.5 距离最近的点对 454 14.3 解递归方程 462 14.4 复杂性的下限 463 14.4.1 最小最大问题的下限 464 14.4.2 排序算法的下限 465 第15章 动态规划 467 15.1 算法思想 467 15.2 应用 469 15.2.1 0/1背包问题 469 15.2.2 图像压缩 471 15.2.3 矩阵乘法链 476 15.2.4 最短路径 480 15.2.5 网络的无交叉子集 483 15.2.6 元件折叠 486 15.3 参考及推荐读物 491 第16章 回溯 492 16.1 算法思想 492 16.2 应用 496 16.2.1 货箱装船 496 16.2.2 0/1背包问题 503 16.2.3 最大完备子图 506 16.2.4 旅行商问题 508 16.2.5 电路板排列 510 第17章 分枝定界 516 17.1 算法思想 516 17.2 应用 519 17.2.1 货箱装船 519 17.2.2 0/1背包问题 526 17.2.3 最大完备子图 528 17.2.4 旅行商问题 529 17.2.5 电路板排列 532
Platform: | Size: 5125525 | Author: gufeng20081010 | Hits:

[Windows DevelopC语言实战105例

Description: C语言实战105例 第1部分 基础篇 实例1 一个价值“三天”的BUG 2 实例2 灵活使用递增(递减)操作符 5 实例3 算术运算符计算器 7 实例4 逻辑运算符计算器 9 实例5 IP地址解析 11 实例6 用if…else语句解决奖金发放问题 13 实例7 用for循环模拟自由落体 16 实例8 用while语句求n! 19 实例9 模拟银行常用打印程序 22 实例10 使用一维数组统计选票 26 实例11 使用二维数组统计学生成绩 29 实例12 简单的计算器 32 实例13 时钟程序 35 实例14 华氏温度和摄氏温度的相互转换 38 实例15 SimpleDebug函数应用 40 第2部分 数值计算与数据结构篇 实例16 常用的几种排序方法 46 实例17 广度优先搜索及深度优先搜索 53 实例18 实现基本的串操作 59 实例19 计算各点到源点的最短距离 62 实例20 储油问题 65 实例21 中奖彩球问题 67 实例22 0-1背包问题 69 实例23 阶梯计数问题 72 实例24 二叉树算法集 74 实例25 模拟LRU页面置换算法 79 实例26 大整数阶乘新思路 82 实例27 银行事件驱动模拟程序 84 实例28 模拟迷宫探路 87 实例29 实现高随机度随机序列 89 实例30 停车场管理系统 91 第3部分 文本屏幕与文件操作篇 实例31 菜单实现 96 实例32 窗口制作 97 实例33 模拟屏幕保护程序 100 实例34 文件读写基本操作 102 实例35 格式化读写文件 105 实例36 成块读写操作 107 实例37 随机读写文件 108 实例38 文件的加密和解密 111 实例39 实现两个文件的连接 113 实例40 实现两个文件信息的合并 116 实例41 文件信息统计 118 实例42 文件分割实例 121 实例43 同时显示两个文件的内容 123 实例44 模拟Linux环境下的vi编辑器 124 实例45 文件操作综合应用——银行账户管理 128 第4部分 病毒与安全篇 实例46 实用内存清理程序 134 实例47 如何检测Sniffer  136 实例48 加密DOS批处理程序 139 实例49 使用栈实现密码设置 141 实例50 远程缓冲区溢出漏洞利用程序 144 实例51 简易漏洞扫描器 146 实例52 文件病毒检测程序 149 实例53 监测内存泄露与溢出 150 实例54 实现traceroute命令 152 实例55 实现ping程序功能 154 实例56 获取Linux本机IP地址 157 实例57 实现扩展内存的访问 161 实例58 随机加密程序 164 实例59 MD5加密程序 165 实例60 RSA加密实例 168 第5部分 图形篇 实例61 制作表格 172 实例62 用画线函数作出的图案 174 实例63 多样的椭圆 176 实例64 多变的立方体 177 实例65 简易时钟 178 实例66 跳动的小球 181 实例67 用柱状图表示学生成绩各分数段比率 183 实例68 EGA/VGA屏幕存储 187 实例69 按钮制作 190 实例70 三维视图制作 193 实例71 红旗图案制作 194 实例72 火焰动画制作 196 实例73 模拟水纹扩散 199 实例74 彩色的Photo Frame  201 实例75 火箭发射演示 203 第6部分 系统篇 实例76 恢复内存文本 208 实例77 挽救磁盘数据 210 实例78 建立和隐藏多个PRI DOS分区 213 实例79 简单的DOS下的中断服务程序 216 实例80 文件名分析程序 219 实例81 鼠标中断处理 222 实例82 实现磁盘数据的整体加密 224 实例83 揭开CMOS密码 227 实例84 获取网卡信息 229 实例85 创建自己的设备 231 实例86 设置应用程序启动密码 233 实例87 获取系统配置信息 236 实例88 硬件检测 239 实例89 管道通信 241 实例90 程序自杀技术实现 244 第7部分 游戏篇 实例91 连续击键游戏 248 实例92 掷骰子游戏 250 实例93 弹力球 252 实例94 俄罗斯方块 253 实例95 24点扑克牌游戏 257 实例96 贪吃蛇 260 实例97 潜水艇大战 262 实例98 机器人大战 265 实例99 图形模式下的搬运工 266 实例100 十全十美游戏 269 第8部分 综合篇 实例101 强大的通信录 274 实例102 模拟Windows下UltraEdit程序 277 实例103 轻松实现个人理财 279 实例104 竞技比赛打分系统 281 实例105 火车订票系统 286
Platform: | Size: 654374 | Author: jawin@126.com | Hits:

[DSP programrs255253

Description: Reed Solomon(255/253)纠错码的编解码器-RS is the short form for Reed-Solomon whih is a kind of algorithm for encoding. This package is the en-/decoder for the Reed-Solomon (255,253) error correction codes.
Platform: | Size: 1024 | Author: 陈龙 | Hits:

[Game Server SimulatorEVEmu-0.6.253

Description: Eve Online的模拟器,全套服务端源代码,VC版。-Eve Online simulator, a full-service client source code, VC version.
Platform: | Size: 916480 | Author: Luo ShiBao | Hits:

[OtherLinux

Description: redhat认证培训教程,包括033 133 253的pdf文档,对学习linux帮助很大。-redhat
Platform: | Size: 6240256 | Author: 曾建良 | Hits:
« 12 3 4 »

CodeBus www.codebus.net