内容简介

  《数据结构精讲与习题详解(C语言版 第2版)/清华大学计算机系列教材》是清华大学出版社出版的《数据结构(C语言版)》(第2版)的配套教材,对“数据结构”课程常用习题进行了解析,对许多不易通过自学理解的概念和知识做了深入讲解,并针对“数据结构”课程的学习给出了指导性建议。《数据结构精讲与习题详解(C语言版 第2版)/清华大学计算机系列教材》覆盖了数据结构与算法的主要知识点,共分为8章,包括数据结构绪论,线性表,栈和队列,多维数组、字符串与广义表,树与二叉树,图,查找以及排序。每章划分为多个知识点,首先给出知识点提要,归纳有关要点和容易忽略的细节;然后给出选择题、判断题、简答题和算法题4种题型的典型习题。《数据结构精讲与习题详解(C语言版 第2版)/清华大学计算机系列教材》的题量为2840题。
  《数据结构精讲与习题详解(C语言版 第2版)/清华大学计算机系列教材》既可以作为大学计算机科学与技术、软件工程等专业的本科生学习“数据结构”课程的辅助教材,也可供考研人员自学参考。

作者简介

  殷人昆,清华大学计算机系教授,1985年赴日本国东京理科大学做访问学者,研究方向为软件工程过程的质量管理和软件产品的质量评价。主要教学工作为计算机系大学本科“数据结构”、“软件工程”和研究生“软件工程设计与技术”、“软件项目管理”课程负责人,主持教育部-微软精品课程“数据结构”的建设。曾与人合作或单独编写和出版教材20余部,其中,《数据结构》教材被评为教育部普通高等教育“十一五”国家级规划教材,并于2005年获“北京市精品教材”。曾在核心刊物和专业会议发表论文多篇,并参加或主持多项科研项目。

目录

数据结构精讲与习题详解(C语言版)(第2版)目录目录

第1章数据结构绪论1

1.1数据结构的概念及分类1

1.1.1知识点提要1

1.1.2选择题3

1.1.3判断题4

1.1.4简答题5

1.1.5算法题8

1.2算法设计与算法分析10

1.2.1知识点提要10

1.2.2选择题13

1.2.3判断题17

1.2.4简答题18

1.2.5算法题25

第2章线性表30

2.1线性表的概念30

2.1.1知识点提要30

2.1.2选择题31

2.1.3判断题32

2.1.4简答题32

2.1.5算法题33

2.2顺序表34

2.2.1知识点提要34

2.2.2选择题36

2.2.3判断题37

2.2.4简答题38

2.2.5算法题39

2.3线性表的链接存储表示49

2.3.1知识点提要49

2.3.2选择题51

2.3.3判断题55

2.3.4简答题56

2.3.5算法题57

2.4两种存储表示的比较87

2.4.1知识点提要87

2.4.2选择题88

2.4.3判断题89

2.4.4简答题90

2.4.5算法题91

2.5线性表的应用94

2.5.1知识点提要94

2.5.2选择题97

2.5.3判断题98

2.5.4简答题98

2.5.5算法题100

第3章栈和队列119

3.1栈119

3.1.1知识点提要119

3.1.2选择题122

3.1.3判断题126

3.1.4简答题126

3.1.5算法题131

3.2队列138

3.2.1知识点提要138

3.2.2选择题142

3.2.3判断题145

3.2.4简答题145

3.2.5算法题150

3.3栈与队列的应用160

3.3.1知识点提要160

3.3.2选择题161

3.3.3判断题162

3.3.4简答题163

3.3.5算法题168

3.4栈与递归188

3.4.1知识点提要188

3.4.2选择题190

3.4.3判断题192

3.4.4简答题193

3.4.5算法题196

第4章多维数组、字符串与广义表211

4.1多维数组211

4.1.1知识点提要211

4.1.2选择题213

4.1.3判断题215

4.1.4简答题215

4.1.5算法题218

4.2特殊矩阵与稀疏矩阵242

4.2.1知识点提要242

4.2.2选择题244

4.2.3判断题246

4.2.4简答题247

4.2.5算法题257

4.3字符串272

4.3.1知识点提要272

4.3.2选择题275

4.3.3判断题277

4.3.4简答题278

4.3.5算法题282

4.4广义表298

4.4.1知识点提要298

4.4.2选择题299

4.4.2判断题300

4.4.3简答题301

4.4.4算法题305

第5章树与二叉树317

5.1树的基本概念317

5.1.1知识点提要317

5.1.2选择题319

5.1.3判断题320

5.1.4简答题321

5.1.5算法题322

5.2二叉树及其存储表示323

5.2.1知识点提要323

5.2.2选择题326

5.2.3判断题329

5.2.4简答题330

5.2.5算法题334

5.3二叉树的遍历339

5.3.1知识点提要339

5.3.2选择题342

5.3.3判断题346

5.3.4简答题347

5.3.5算法题357

5.4线索二叉树396

5.4.1知识点提要396

5.4.2选择题397

5.4.3判断题400

5.4.4简答题400

5.4.5算法题402

5.5树与森林的存储与遍历412

5.5.1知识点提要412

5.5.2选择题415

5.5.3判断题417

5.5.4简答题418

5.5.5算法题423

5.6Huffman树439

5.6.1知识点提要439

5.6.2选择题442

5.6.3判断题443

5.6.4简答题444

5.6.5算法题449

5.7堆453

5.7.1知识点提要453

5.7.2选择题456

5.7.3判断题457

5.7.4简答题457

5.7.5算法题460

5.8并查集466

5.8.1知识点提要466

5.8.2选择题468

5.8.3判断题469

5.8.4简答题469

5.8.5算法题471

第6章图473

6.1图的基本概念473

6.1.1知识点提要473

6.1.2选择题474

6.1.3判断题476

6.1.4简答题477

6.1.5算法题481

6.2图的存储表示482

6.2.1知识点提要482

6.2.2选择题487

6.2.3判断题489

6.2.4简答题490

6.2.5算法题496

6.3图的遍历517

6.3.1知识点提要517

6.3.2选择题519

6.3.3判断题521

6.3.4简答题522

6.3.5算法题528

6.4最小生成树556

6.4.1知识点提要556

6.4.2选择题557

6.4.3判断题559

6.4.4简答题559

6.4.5算法题568

6.5最短路径577

6.5.1知识点提要577

6.5.2选择题579

6.5.3判断题580

6.5.4简答题580

6.5.5算法题585

6.6拓扑排序和关键路径597

6.6.1知识点提要597

6.6.2选择题600

6.6.3判断题602

6.6.4简答题603

6.6.5算法题609

第7章查找617

7.1查找的概念与简单查找方法617

7.1.1知识点提要617

7.1.2选择题622

7.1.3判断题626

7.1.4简答题626

7.1.5算法题637

7.2二叉查找树647

7.2.1知识点提要647

7.2.2选择题650

7.2.3判断题652

7.2.4简答题653

7.2.5算法题658

7.3AVL树672

7.3.1知识点提要672

7.3.2选择题676

7.3.3判断题678

7.3.4简答题679

7.3.5算法题684

7.4B树与B+树691

7.4.1知识点提要691

7.4.2选择题696

7.2.3判断题699

7.4.4简答题699

7.4.5算法题709

7.5散列法715

7.5.1知识点提要715

7.5.2选择题720

7.5.3判断题724

7.5.4简答题725

7.5.5算法题734

第8章排序746

8.1排序的概念746

8.1.1知识点提要746

8.1.2选择题748

8.1.3判断题749

8.1.4简答题749

8.1.5算法题751

8.2插入排序752

8.2.1知识点提要752

8.2.2选择题754

8.2.3判断题756

8.2.4简答题756

8.2.5算法题761

8.3交换排序767

8.3.1知识点提要767

8.3.2选择题769

8.3.3判断题772

8.3.4简答题772

8.3.5算法题779

8.4选择排序794

8.4.1知识点提要794

8.4.2选择题796

8.4.3判断题798

8.4.4简答题798

8.4.5算法题804

8.5归并排序810

8.5.1知识点提要810

8.5.2选择题811

8.5.3判断题812

8.5.4简答题812

8.5.5算法题815

8.6桶排序823

8.6.1知识点提要823

8.6.2选择题827

8.6.3判断题827

8.6.4简答题828

8.6.5算法题829

8.7内排序方法的比较834

8.7.1知识点提要834

8.7.2选择题836

8.7.3判断题838

8.7.4简答题839

8.7.5算法题842

8.8外排序847

8.8.1知识点提要847

8.8.2选择题854

8.8.3判断题856

8.8.4简答题857

8.8.5算法题874

参考文献887

精彩书摘

  第3章栈和队列〖1〗本章的知识结构图栈和队列的知识结构图如图31所示。本章的主要知识点有六个,即栈的概念与存储表示、队列的概念与存储表示、栈的应用、队列的应用、栈和递归、特殊队列(包括双端队列和优先级队列)。
  图31栈和队列的知识结构图
  3.1栈〖*4/5〗3.1.1知识点提要1.栈的定义及基本运算
  (1)栈(stack)可定义为只允许在表的末端进行插入和删除的线性表。允许插入和删除的一端叫做栈顶(top),而不允许插入和删除的另一端叫做栈底(bottom)。当栈中没有任何元素时则成为空栈。
  (2)栈只能通过栈顶进行访问,故栈叫做后进先出(LastInFirstOut,LIFO)或先进后出(FirstInLastOut,FILO)的线性表。
  (3)栈的基本运算包括以下5种:
  栈初始化voidinitStack(Stack&S):创建一个空栈S并使之初始化。
  判栈空否intStackEmpty(Stack&S):当栈S为空时函数返回1,否则返回0。
  进栈intPush(Stack&S,typex):当栈S未满时,函数将元素x加入并使之成为新的栈顶。若操作成功,则函数返回1,否则函数返回0。
  出栈intPop(Stack&S,type&x):当栈S非空时,函数将栈顶元素从栈中退出并通过引用参数x返回退出元素的值。若操作成功,则函数返回1,否则函数返回0。
  读栈顶元素intgetTop(Stack&S,type&x):当栈S非空时,函数将通过引用参数x返回栈顶元素的值(但不退出)。若操作成功,则函数返回1,否则函数返回0。
  利用上述5种基本运算,可以实现基于栈结构的应用问题的求解。
  注意,栈操作Pop(S,x)与getTop(S,x)是有区别的。前者退出栈顶的元素;后者仅复制出一份栈顶元素,栈中元素个数不发生变化。
  2.栈的混洗(shuffle)
  (1)当一串元素通过栈时,出栈元素的次序如何排列,与进栈和出栈操作的排列组合有关。如果每个元素进栈后立即出栈,所有出栈元素的排列与进栈顺序完全相同;如果所有元素都进栈后才开始出栈,所有出栈元素的排列与进栈顺序完全颠倒。
  (2)栈的进出规则:利用铁路调车轨道的栈式结构分析,当列车车厢按照1,2,…,n的编号进栈时,可能的不同出栈序列数目可利用catalan函数算出:1n+1Cn2n=1n+1×(2n)!n!×n!3.栈的顺序存储结构
  栈的顺序存储,简称顺序栈,是指用一组地址连续的存储单元依次存储栈中元素,同时附设指针top指示栈顶元素。
  (1)顺序栈的存储分配有两种:
  ①顺序栈的静态存储分配,它的存储数组采用静态方式定义。#definemaxSize100
  typedefcharSElemType;
  typedefstruct{
  SElemTypeelem\[maxSize\];
  inttop;
  }SeqStack;顺序栈的静态存储结构预先定义或申请栈的存储空间,一旦装满就不能扩充。因此在顺序栈中,当一个元素进栈之前,需要判断是否栈满,若栈满,则元素进栈会发生上溢现象。
  ②顺序栈的动态存储分配,它的存储数组在使用时动态存储分配,其好处是一旦栈满可以扩充。顺序栈的动态存储结构定义如下(保存于SeqStack.h):#defineinitSize100
  typedefcharSElemType;
  typedefstruct{
  SElemTypeelem;
  intmaxSize,top;
  }SeqStack;在初创基于动态存储分配的顺序栈时必须立即为它动态分配存储空间:elem=(SElemType)malloc(initSizesizeof(SELemType))并以initSize作为最初的maxSize。在扩充时需要申请一个新的具有2×maxSize的连续的存储空间取代原来的存储空间,把原来存储空间内存放的所有栈元素转移到新的存储空间后释放原来的存储空间,再让elem指针指示新的存储空间,并让maxSize=2×maxSize。
  (2)进栈和出栈的处理。有两种进栈和出栈的处理方式。
  先让栈顶指针进一,再按栈顶指针所指位置把进栈元素加入。这样,栈顶是最后加入元素所处的位置。它的示意图参看图32。
  图32顺序栈的示意图之一
  按照这种处理方式,在使用栈之前需要做初始化工作,即置空栈。因为一维数组下标从0开始,栈空时应该top

其他推荐