大规模集成电路设计应用与实践

34
信信信信信信信信信信 信信信信信信信信信信信信信信 信信信信信信信 Lecture 5 信信信 信信信 E-mail [email protected] 信信信信信

Upload: nelle-pickett

Post on 30-Dec-2015

109 views

Category:

Documents


0 download

DESCRIPTION

代码阅读与实践 Lecture 5 主讲人:胡亚斌 E-mail : [email protected]. 大规模集成电路设计应用与实践. 系列课程之. 第四次课的回顾. 源代码的基本元素 头文件搜索路径与头文件保护 作用域和生存周期 循环结构 循环次数、循环定式与不定式、循环退出 控制结构代码阅读方法. 1. 2. 3. 4. 5. 9. 6. 10. 8. 7. 课程内容. 向量. 集合. 矩阵和表. 链表. 栈. 树. 队列. 图. STL 简介. 映射. C 语言数据结构之. 向量. 向量实现与处理. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 大规模集成电路设计应用与实践

信息技术教学实验中心

大规模集成电路设计应用与实践

代码阅读与实践Lecture 5

主讲人:胡亚斌E-mail : [email protected]

系列课程之

Page 2: 大规模集成电路设计应用与实践

信息技术教学实验中心

第四次课的回顾

•源代码的基本元素

•头文件搜索路径与头文件保护

•作用域和生存周期

•循环结构 循环次数、循环定式与不定式、循环退出

•控制结构代码阅读方法

2

Page 3: 大规模集成电路设计应用与实践

信息技术教学实验中心3

课程内容

1

2

3

集合

4

5

队列

6向量

矩阵和表

映射

7 链表

8

9

10 STL 简介

Page 4: 大规模集成电路设计应用与实践

信息技术教学实验中心

向量C 语言数据结构之

4

Page 5: 大规模集成电路设计应用与实践

信息技术教学实验中心

向量实现与处理

•C 语言中通常用数组 (array) 实现•处理方式

for 循环

memset

memcpy

文件读写 fwrite 和 fread

5

Page 6: 大规模集成电路设计应用与实践

信息技术教学实验中心

越界访问

•Java, C#, Ada 认为数组越界访问是一种错误,会引发异常

•Perl, Tcl/Tk 会自动扩展区域

•C/C++ 返回未定义的值

•应避免缓冲区溢出问题(常被蠕虫病毒利用)

6

Page 7: 大规模集成电路设计应用与实践

信息技术教学实验中心

越界访问: 实例

7

Page 8: 大规模集成电路设计应用与实践

信息技术教学实验中心

矩阵和表C 语言数据结构之

8

Page 9: 大规模集成电路设计应用与实践

信息技术教学实验中心

•一般用 struct 实现•实例: icmp 数字编码转字符串

9

Page 10: 大规模集成电路设计应用与实践

信息技术教学实验中心

矩阵实现( 1 )

•通常用二维数组实现

10

Page 11: 大规模集成电路设计应用与实践

信息技术教学实验中心

矩阵实现( 2 )

•动态分配内存实现

11

Page 12: 大规模集成电路设计应用与实践

信息技术教学实验中心

矩阵实例:每一行元素数量不等

12

Page 13: 大规模集成电路设计应用与实践

信息技术教学实验中心

栈C 语言数据结构之

13

Page 14: 大规模集成电路设计应用与实践

信息技术教学实验中心

抽象数据类型栈的定义

• 栈 (Stack) 是限制在表的一端进行插入和删除运算的线性表,通常称插入、删除的这一端为栈顶 (Top) ,另一端为栈底 (Bottom) 。表中没有元素时称为空栈。

• 假设栈 S=(a1 , a2 , a3 ,… an) ,则 a1 称为栈底元素, an 为栈顶元素。栈中元素按 a1 , a2 , a3 ,… an 的次序进栈,退栈的第一个元素应为栈顶元素。

14

Page 15: 大规模集成电路设计应用与实践

信息技术教学实验中心

顺序栈

• 由于栈是操作受限的线性表,因此线性表的存储结构对栈也适应。栈的顺序存储结构简称为顺序栈,可用数组来实现顺序栈。因为栈底位置是固定不变的,所以可以将栈底位置设置在数组的两端的任何一个端点。• 栈顶位置是随着进栈和退栈操作而变化,故需用一

个指针 top 来指示当前栈顶的位置,通常称 top 为栈顶指针。因此,顺序栈的类型定义只需将顺序表的类型定义中的长度属性改为 top 指针即可。

15

Page 16: 大规模集成电路设计应用与实践

信息技术教学实验中心

顺序栈实现

16

Page 17: 大规模集成电路设计应用与实践

信息技术教学实验中心

上溢和下溢

•上溢:当栈满时再做进栈运算必定产生空间溢出

•下溢:当栈空时再做退栈运算也将产生溢出。

•溢出是一种出错状态,应该设法避免。

17

Page 18: 大规模集成电路设计应用与实践

信息技术教学实验中心

栈的基本操作

• 栈的初始化 InitStack 操作

• 进栈 Push 操作

• 出栈 Pop 操作

• 取栈顶元素 GetTop 操作

18

Page 19: 大规模集成电路设计应用与实践

信息技术教学实验中心

栈的初始化

19

Page 20: 大规模集成电路设计应用与实践

信息技术教学实验中心

进栈

20

Page 21: 大规模集成电路设计应用与实践

信息技术教学实验中心

出栈

21

Page 22: 大规模集成电路设计应用与实践

信息技术教学实验中心

取栈顶元素

22

Page 23: 大规模集成电路设计应用与实践

信息技术教学实验中心

链栈

•栈的链式存储结构称为链栈,它是操作受限的单链表,其插入和删除操作仅限制在表头位置上进行。

•链栈通常用不带头结点的单链表来实现。栈顶指针就是链表的头指针。

23

Page 24: 大规模集成电路设计应用与实践

信息技术教学实验中心

链栈的抽象数据类型

24

Page 25: 大规模集成电路设计应用与实践

信息技术教学实验中心

入栈

25

Page 26: 大规模集成电路设计应用与实践

信息技术教学实验中心

出栈

26

Page 27: 大规模集成电路设计应用与实践

信息技术教学实验中心

队列C 语言数据结构之

27

Page 28: 大规模集成电路设计应用与实践

信息技术教学实验中心

映射C 语言数据结构之

28

Page 29: 大规模集成电路设计应用与实践

信息技术教学实验中心

集合C 语言数据结构之

29

Page 30: 大规模集成电路设计应用与实践

信息技术教学实验中心

链表C 语言数据结构之

30

Page 31: 大规模集成电路设计应用与实践

信息技术教学实验中心

树C 语言数据结构之

31

Page 32: 大规模集成电路设计应用与实践

信息技术教学实验中心

图C 语言数据结构之

32

Page 33: 大规模集成电路设计应用与实践

信息技术教学实验中心

STL 简介C++ 数据结构之

33

Page 34: 大规模集成电路设计应用与实践

信息技术教学实验中心

作业

34