ch5类模板及应用
合集下载
ch5

DEAN 思齐 述圣 省身
BCNF
STC(S# , T# , C#) 每位老师只教授一门课
某学生选定一门课,就对应一位老师 候选码 T# C# (S#,C#) T#
(S#,T#),(S#,C#)
S#
S# s1 s2 s3 s3 T# t1 t2 t3 t1
T#
C# c1 c2 c2 c1
C#
t2 t3
c2 c2
范式之间的关系
• 3NF 2NF
反证:若R3NF, 但R2NF,则按2NF定义, 一定有非主属性部分依赖于码
设X为R的码,则存在X的真子集X′,以及非主 属性Z(Z X′),使得X′Z 于是在R中存在码X,属性组X′,以及非主属 性Z(Z ,使得XX′, X′Z,X′X成 X′) 立,这与R3NF矛盾。 所以R2NF
STC 3NF ?
BCNF
• 不良特性
– 插入异常:如果没有学生选修某位老师的任课,则该 老师担任课程的信息就无法插入 – 删除异常:删除学生选课信息,会删除掉老师的任课 信息 – 更新异常:如果老师所教授的课程有所改动,则所有 选修该老师课程的学生元组都要做改动
– 数据冗余:每位学生都存储了有关老师所教授的课程 的信息
3NF
• 定义
– 关系模式R< U , F >中,若不存在这样的码X, 属性组Y及非主属性Z(Z Y),使得下式成 立, XY , YZ , YX
则称R3NF
– 消除非主属性对码的传递依赖 如S_SD 3NF,因为有S#SD, SDDEAN
3NF
• 改造
将S分解为
STUDENT(S# , SN , SD)
如S# SN, (S#,C#) G
建材ch5(水泥)

cement!!! Thanks a lot!!!
*
19
土木工程材料
第五章
Faculty of Civil Engineering and Geosciences
*
8
土木工程材料
第五章
Faculty of Civil Engineering and Geosciences
3、粉煤灰硅酸盐水泥
• 凡由硅酸盐水泥熟料和粉煤灰、适量石膏磨细 制成的水硬性胶凝材料称为粉煤灰硅酸盐水泥, 简称粉煤灰水泥,代号为P·F
• 粉煤灰掺加量按质量百分比计为20%~40%
*
9
白水泥等级
白度级别
优等品
特级
一等品
一级 二级
合格品
*
二级 三级
土木工程材料
第五章
Faculty of Civil Engineering and Geosciences
标号
625 525 525 425 525 425 425 325
325 16
四.膨胀水泥 膨胀水泥是硬化过程中不产生收缩,而具有一定膨胀性
一、混合材料
• 混合材料一般为天然矿物材料或工业废料 • 根据其性能分为: • 1. 活性混合材料 • 能起化学反响,凝结硬化后具有强度 • 常用活性混合材: • 粒化高炉矿渣,火山灰质混合材料和粉煤灰 • 2. 非活性混合材料〔又称为填充材料〕 • 不能与水泥起化学反响或化学作用很小,仅能起调节水泥强度、
能的水泥。
工程应用
在道桥工程中,膨胀水泥常用于水泥混凝土路面、机场道面 或桥梁修补混凝土。此外用于防止渗漏、修补裂缝及管道接 头等工程。
*
17
土木工程材料
第五章
Faculty of Civil Engineering and Geosciences
*
19
土木工程材料
第五章
Faculty of Civil Engineering and Geosciences
*
8
土木工程材料
第五章
Faculty of Civil Engineering and Geosciences
3、粉煤灰硅酸盐水泥
• 凡由硅酸盐水泥熟料和粉煤灰、适量石膏磨细 制成的水硬性胶凝材料称为粉煤灰硅酸盐水泥, 简称粉煤灰水泥,代号为P·F
• 粉煤灰掺加量按质量百分比计为20%~40%
*
9
白水泥等级
白度级别
优等品
特级
一等品
一级 二级
合格品
*
二级 三级
土木工程材料
第五章
Faculty of Civil Engineering and Geosciences
标号
625 525 525 425 525 425 425 325
325 16
四.膨胀水泥 膨胀水泥是硬化过程中不产生收缩,而具有一定膨胀性
一、混合材料
• 混合材料一般为天然矿物材料或工业废料 • 根据其性能分为: • 1. 活性混合材料 • 能起化学反响,凝结硬化后具有强度 • 常用活性混合材: • 粒化高炉矿渣,火山灰质混合材料和粉煤灰 • 2. 非活性混合材料〔又称为填充材料〕 • 不能与水泥起化学反响或化学作用很小,仅能起调节水泥强度、
能的水泥。
工程应用
在道桥工程中,膨胀水泥常用于水泥混凝土路面、机场道面 或桥梁修补混凝土。此外用于防止渗漏、修补裂缝及管道接 头等工程。
*
17
土木工程材料
第五章
Faculty of Civil Engineering and Geosciences
Ch5_2继承、接口与范型

face 和接口名称interfaceName是必需的 public:访问说明符
superInterfacelist:超接口的列表
② 接口体
方法声明:方法声明后加一个逗号;被隐式地声明为
public和abstract. 常量的声明:隐式地声明为public、static 和final。
定义Computable接口,并让类A与类B实现它
① Computable接口 定义
② 实现Driveable接口
5.2.3 将接口作为类型使用
① 声明接口类型变量;
② 声明方法参数为接口类型; ③ 指定方法的返回类型为接口类型; class A implements Computable{ interface Computable{ x){return x*x;} public int f(int class B implements Computable{ int f(int x);
522实现接口在类中实现所有接口及其超类中的所有方法而且方法的标记必须与接口声明中的一致如果没有完全实现这些方法则需要把该类声明为abstract实现接口的类会继承此接口中定义的常量因而类可以使用简单名访问这些常量computable接口定义interfacecomputablefinalintmax100
Computable c;
void method1(Computable c ) { ………… }
final int MAX=100; public int g(int x,int y){return x+y;} }
Computable method2() public int g(int x,int y); public abstractint f(int x){return x*x*x;} { return public int g(int x,int y){return x*y;} } objectRef; }
superInterfacelist:超接口的列表
② 接口体
方法声明:方法声明后加一个逗号;被隐式地声明为
public和abstract. 常量的声明:隐式地声明为public、static 和final。
定义Computable接口,并让类A与类B实现它
① Computable接口 定义
② 实现Driveable接口
5.2.3 将接口作为类型使用
① 声明接口类型变量;
② 声明方法参数为接口类型; ③ 指定方法的返回类型为接口类型; class A implements Computable{ interface Computable{ x){return x*x;} public int f(int class B implements Computable{ int f(int x);
522实现接口在类中实现所有接口及其超类中的所有方法而且方法的标记必须与接口声明中的一致如果没有完全实现这些方法则需要把该类声明为abstract实现接口的类会继承此接口中定义的常量因而类可以使用简单名访问这些常量computable接口定义interfacecomputablefinalintmax100
Computable c;
void method1(Computable c ) { ………… }
final int MAX=100; public int g(int x,int y){return x+y;} }
Computable method2() public int g(int x,int y); public abstractint f(int x){return x*x*x;} { return public int g(int x,int y){return x*y;} } objectRef; }
Ch5用户图形界面设计资料

4.滚动条(Slider)控件
5.按钮(Push Button)控件
6.开关按钮(Toggle Button)控件
7.单选按钮(Radio Button)控件
5
5.2 控件
8.按钮组(Button Group)控件
9.检查框(Check Box)控件
10.列表框(Listbox)控件
11.弹出式菜单(Popup Menu)控件
制界面一样简单。
16
例5-3 建立一个图形界面来显示和处理三维图形
基本功能要求如下。 (1)建立一个坐标系,以备后来绘制三维图形; (2)建立三个按钮,用于启动绘图功能; (3)建立一个组合框(Popup Menu),用于显示不同的 图形。
17
解题步骤:
(1)打开布局编辑器 (2)增加组件 (3)对齐工具 (4)设置每个组件的属性; (5)设置Guide应用程序选项,采用默认属性。 (6)激活图形
11
3.对象属性观察器
三、控件回调函数的执行 (1)BusyAction:处理回调函数的中断。有两种选项: 即Cancel:取消中断事件,queue:排队(默认设置)。 (2)ButtonDownFcn属性:按钮按下时的处理函数。 (3)CallBack属性:是连接程序界面整个程序系统的实 质性功能的纽带。该属性值应该为一个可以直接求值的字 符串,在该对象被选中和改变时,系统将自动地对字符串 进行求值。 (4)CreateFcn:在对象产生过程中执行的回调函数。 (5)DeleteFcn:删除对象过程中执行的回调函数。 (6)Interruptible属性:指定当前的回调函数在执行时是 否允许中断,去执行其他的函数。
12.坐标轴(Axes)控件 13.面板(Panel)控件
生物材料-ch5 生物医用无机非金属材料

生物玻璃——如45S5玻璃 生物玻璃陶瓷——如DICOR玻璃陶瓷 无机骨水泥——如α-TCP骨水泥 生物复合无机材料——羟基磷灰石+ β-TCP复
合材料、碳纤维增强无机骨水泥
第四章 生物医用无机非金属材料
8
三、材料分类
按来源
天然生物矿物——钙化的贝壳和珍珠 合成的无机材料——羟基磷灰石陶瓷、β-TCP
第四章 生物医用无机非金属材料
22
生物陶瓷人工关节
第四章 生物医用无机非金属材料
23
二、碳质材料
碳质材料应用广泛,在外科植入物中主要包括热解 碳、玻璃碳、碳纤维和蒸汽沉积碳。 结构特点:
金刚石结构、石墨结构、无定形层状结构 无定形层状结构点阵无序排列、各向同性,是医 学领域主要应用的碳质材料。
第四章 生物医用无机非金属材料
5
特性
成分特点 与骨结合
毒性
破坏方式
强度
弹性模量 柔软/延展
性 抗腐蚀性
透过性 加工性 生物相容性 溶解性
金属
高分子
无机非金属 生物惰性 生物活性
可降解
与骨不同
与骨相似
不
结合
置换
溶解离子
溶解增 塑剂
一般无
不易断裂(一般)
破断
高
较低
中(需提 高)
低(必须提高)
大
小
大
中
中
St.Jude Medical Inc. 美国最大的人工机械 瓣膜生产商
第四章 生物医用无机非金属材料
34
第四章 生物医用无机非金属材料
35
On-X人工心脏瓣膜的生产制造商是美国MCRI公司。
美国MCRI公司的创始人是Jack C . Bokros,他于1969年 首次将热解碳专利技术应用于人工心脏瓣膜制造,至今已 具有30多年的心脏瓣膜设计及制造经验。已为多家公司设 计制造了10种以上的人工心脏瓣膜,
合材料、碳纤维增强无机骨水泥
第四章 生物医用无机非金属材料
8
三、材料分类
按来源
天然生物矿物——钙化的贝壳和珍珠 合成的无机材料——羟基磷灰石陶瓷、β-TCP
第四章 生物医用无机非金属材料
22
生物陶瓷人工关节
第四章 生物医用无机非金属材料
23
二、碳质材料
碳质材料应用广泛,在外科植入物中主要包括热解 碳、玻璃碳、碳纤维和蒸汽沉积碳。 结构特点:
金刚石结构、石墨结构、无定形层状结构 无定形层状结构点阵无序排列、各向同性,是医 学领域主要应用的碳质材料。
第四章 生物医用无机非金属材料
5
特性
成分特点 与骨结合
毒性
破坏方式
强度
弹性模量 柔软/延展
性 抗腐蚀性
透过性 加工性 生物相容性 溶解性
金属
高分子
无机非金属 生物惰性 生物活性
可降解
与骨不同
与骨相似
不
结合
置换
溶解离子
溶解增 塑剂
一般无
不易断裂(一般)
破断
高
较低
中(需提 高)
低(必须提高)
大
小
大
中
中
St.Jude Medical Inc. 美国最大的人工机械 瓣膜生产商
第四章 生物医用无机非金属材料
34
第四章 生物医用无机非金属材料
35
On-X人工心脏瓣膜的生产制造商是美国MCRI公司。
美国MCRI公司的创始人是Jack C . Bokros,他于1969年 首次将热解碳专利技术应用于人工心脏瓣膜制造,至今已 具有30多年的心脏瓣膜设计及制造经验。已为多家公司设 计制造了10种以上的人工心脏瓣膜,
CH5_结构模式描述法

此語法還有一個特點是只要名稱對應正確即可,而對應之次序並不重 要,例如若欲使用此語法啟動D_FF元件,我們可用下列之敘述句:
D_FF port map ( Qin => a, clk => b, Qout => c) ;
我們也可調換其對應次序為 D_FF port map ( clk => b, Qin => a, Qout => c) ;
第五章 5
則我們在程式中應有兩個元件宣告,其分別為
component D_FF port (Qin, clk : in bit ; Qout : out bit ); end component ; component mux4 port ( X : in bit_vector(3 downto 0) ; S : in bit_vector(1 downto 0) ; Y : out bit ); end component;
QBAR CLOCK CLK DIN
第五章
11
• 表5.1 圖5.1電路之輸出入關係
clk 上緣變化 上緣變化 MR 0 0 A 0 0 DIN 0 1 RDY 1 1 CTRLA 0 1
上緣變化
上緣變化 上緣變化 上緣變化 上緣變化
0
0 1 1 1
1
1 0 0 1
0
1 0 1 0
0
0 0 0 0
因此元件宣告的位置應位於架構中第一個begin的上面。至於在套件 中執行元件宣告之程序我們將在第七章中討論之。 元件宣告的主要目的之一是:將另外一個已經設計完成的VHDL程 式之單體,當作一個元件,並將它宣告且使用在本程式中。因此,若我 們擬使用某單體來作為我們的元件,則在執行元件宣告時之元件名稱必 需要與該單體名稱相同。由於單體名稱與儲存有該單體之檔案名稱也一 致,所以元件名稱也必需要與該檔案名稱相同。 在執行元件宣告時,除了注意元件名稱與單體名稱需要相同外,元 件與單體之輸出入埠之數目,以及每一個埠的信號之資料型態以及模式 也需相同。雖然元件與單體每一個埠的信號名稱可以不同,但我們建議 讓這些名稱也相同以增進程式之可讀性。
ch5仓储系统仿真讲解

物流系统建模与仿真
第五章 仓储系统仿真
5.1 仓库基本知识
1. 货物堆垛方式 ➢ 货物自身堆垛 ➢ 货架堆垛
2
5.1 仓库基本知识
2. 货物作业方式(堆垛环节)
➢ 人工 ➢ 叉车 ➢ (有轨)巷道式
堆垛机
5.1 仓库基本知识
2. 货物作业方式(堆垛环节) ——叉车
➢ 平衡重式叉车 ➢ 插腿式叉车 ➢ VNA(Very Narrow
5.2 仓储系统仿真
5. 合成器与分解器
✓ 合成器有三种操作模式:打包、装箱与批处理。 ✓ 1)打包: 在此模式下,合成器将从输入端口2与更高序号
的输入端口接收到的所有临时实体全部移入到由输入端 口1接收的临时实体中,然后释放。 ✓ 2)装箱: 在此模式下,除了从输入端口1接收到的那个临 时实体外,合成器将破坏掉其余所有的临时实体。 ✓ 3)批处理: 在此模式下,当收集了一批临时实体并执行 了预置和加工操作后就释放所有临模型中行进通过的多个临时实体组合在 一起。它可以将临时实体永久地合成在一起,也可以 将它们打包,在以后某个时间点上还可以再将它们分 离出来。
✓ 分解器用来将一个临时实体分成几个部分。分离可以 通过拆分一个由合成器装盘的临时实体,或者复制原 始实体的多个复本来实现。在处理时间完成后进行分 解/拆盘。
10
5.2 仓储系统仿真
3. 升降机
✓ 一种可上下运输移动临时实体的特殊运输机。它自动移 动到需要捡取或放下临时实体的高度。
✓ 详细说明:该垂直起重设备是任务执行器的一个子类。 它只执行偏移位置的z轴方向的偏移量来实现偏移行进。 在移出或移入升降机时,临时实体沿升降机的x轴向运动。
11
5.2 仓储系统仿真
• 路径1:原料A经过S形输送机到达码盘区,由机器人进行 码盘作业(每8份码一个托盘),并经过后续的输送机运 送到自动库的入库平台,由堆垛机完成入库。
第五章 仓储系统仿真
5.1 仓库基本知识
1. 货物堆垛方式 ➢ 货物自身堆垛 ➢ 货架堆垛
2
5.1 仓库基本知识
2. 货物作业方式(堆垛环节)
➢ 人工 ➢ 叉车 ➢ (有轨)巷道式
堆垛机
5.1 仓库基本知识
2. 货物作业方式(堆垛环节) ——叉车
➢ 平衡重式叉车 ➢ 插腿式叉车 ➢ VNA(Very Narrow
5.2 仓储系统仿真
5. 合成器与分解器
✓ 合成器有三种操作模式:打包、装箱与批处理。 ✓ 1)打包: 在此模式下,合成器将从输入端口2与更高序号
的输入端口接收到的所有临时实体全部移入到由输入端 口1接收的临时实体中,然后释放。 ✓ 2)装箱: 在此模式下,除了从输入端口1接收到的那个临 时实体外,合成器将破坏掉其余所有的临时实体。 ✓ 3)批处理: 在此模式下,当收集了一批临时实体并执行 了预置和加工操作后就释放所有临模型中行进通过的多个临时实体组合在 一起。它可以将临时实体永久地合成在一起,也可以 将它们打包,在以后某个时间点上还可以再将它们分 离出来。
✓ 分解器用来将一个临时实体分成几个部分。分离可以 通过拆分一个由合成器装盘的临时实体,或者复制原 始实体的多个复本来实现。在处理时间完成后进行分 解/拆盘。
10
5.2 仓储系统仿真
3. 升降机
✓ 一种可上下运输移动临时实体的特殊运输机。它自动移 动到需要捡取或放下临时实体的高度。
✓ 详细说明:该垂直起重设备是任务执行器的一个子类。 它只执行偏移位置的z轴方向的偏移量来实现偏移行进。 在移出或移入升降机时,临时实体沿升降机的x轴向运动。
11
5.2 仓储系统仿真
• 路径1:原料A经过S形输送机到达码盘区,由机器人进行 码盘作业(每8份码一个托盘),并经过后续的输送机运 送到自动库的入库平台,由堆垛机完成入库。
ch5

5.4 菜单控件
ToolStripMenuItem类提供用于配置菜单项的外观 和功能属性,常用属性如表所示。
5.4 菜单控件
代码演示:
演示菜单控件的使用。
ContextMenuStrip见项目CH05/TreeViewExam MenuStrip见项目CH05/MDIExam
5.5 通用对话框和MDI应用程序
5.2.2 控件的使用
手工编写代码创建控件需要如下三个步骤:
(1)创建控件的实例。 (2)设置控件对象的属性即调整控件对象的大小、 位置、标题等。 (3)调用窗体的Controls集合的Add方法,将控件 对象添加到窗体中。
5.2.2 控件的使用
代码示例:
演示使用拖拽的方式创建控件 演示项目ch05/CreateButtonExam
第5章 Windows窗体编程
本章主要内容
Windows窗体 控件的属性、方法和事件的设置和程序
5.1 Windows窗体
(1)窗体是Windows应用程序的基本单元,是向用户显示 信息的可视图面。 (2)窗体也是一种类,同样有封装、继承、多态等特征。 (3)Visual Studio 2005中的窗体设计器可以实现从工具箱 中拖拽控件和手工编写代码两种方式快速创建用户界面。 从“工具箱”拖拽控件到窗体,Visual Studio 2005自动生成 代码,保存在*.Designer.vb的文件中,该类文件不需要程序 员改动,在“解决方案资源管理器”中点击“显示所有文件” 按钮可以显示出来。 后台代码保存在*.vb文件中。
5.3 常用控件介绍
代码演示:
演示Button、RadioButton、CheckBox和 GroupBox控件的使用,项目ch05/ButtonExam
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
7
C++语言程序设计
数组类模板的实现://array_template.cpp
//主程序 void main() { Array<int> data(5); cin>>data; cout<<data; } 练习:将Array<int> data(5); 改为Array< float > data(5); 再运行,察看结果,分析类模板的使用过 程
栈顶
a1
栈底
12
C++语言程序设计
栈的应用举例——函数调用 特
殊 的 线 性 群 体 栈
13
入栈 参数 当前现场 返回地址 出栈 ⑦ 当前现场 返回地址 ⑥
出栈 ③
main{} ① 调fun(参数) ⑧ 结束
fun(参数)
⑤
④ 参数 当前现场 返回地址
②
返回
——
C++语言程序设计
栈的基本状态 特
10
C++语言程序设计
5.4类模板的应用 ——群体数据的表示
线性群体
– 线性群体的概念
– 直接访问群体--数组类
– 顺序访问群体--链表类 – 栈类 – 队列类
11
C++语言程序设计
特殊的线性群体——栈
栈是只能从一端访问的线性群体,可 以访问的这一端称栈顶,另一端称栈底。
入栈 出栈
an
┆ a2
22
C++语言程序设计
删除结点之后的结点
… data1 data2 data3 …
tempPtr
假设要删除tempPtr指向的结点,并且p指向它的前项结点,则 (1)//p指向tempPtr结点的后续结点 p->next = tempPtr->next;
(2)释放tempPtr指向的结点 delete tempPtr; }
执行过程:首先用实参类型实例化类模板, 以生成具体的模板类,然后用该类定义对象。
6
C++语言程序设计
类模板应用举例
类模板应用:使用类模板定义模板类的对象的 格式: 类模板名<类型实参表> 对象名表;
例1:定义一个数组类模板,能存放任意类型数 据。数据成员包括数组的首地址(指针)、数 组的长度;成员函数包括输入数组各元素、输 出数组各元素(可用运算符重载,也可以用一 般函数)、访问任一个元素的值。并在主程序 中调用。
19
C++语言程序设计
链表
链表:一种动态数据结构,可以用来表示 顺序访问的线性群体。 结点:链表是由系列结点组成的,结点可 以在运行时动态生成。 结点组成:每一个结点包括数据域和指向 链表中下一个结点的指针(即下一个结点 的地址)。 单链表:如果链表每个结点中只有一个指 向后继结点的指针,则该链表称为单链表。
18
C++语言程序设计
//主函数 void main() { //定义字符堆栈 stack<char> s1; char cc='a'; for(int k=0;k<10;k++) { s1.push(cc); cc++; } cout<<"pop s_char:"; for(k=0;k<10;k++) cout<<s1.pop(); //定义整型堆栈 stack<int> s2; int d; cout<<"\n enter 5 int numbers:"; for(k=0;k<5;k++) { cin>>d; s2.push(d); } for(k=0;k<5;k++) cout<<s2.pop(); //测试栈为空时的情况 cout<<s2.pop()<<endl; } //分析运程过程,理解类模板的实例化过程,入栈、出栈操作
类模板的成员函数:
如果需要在类模板以外定义其成员函数, 则要采用以下的形式: template <class Type> 类型名 类名<Type>::函数名(参数表) { }
其中,类名<Type>表示一个具体的类
5
C++语言程序设计
类模板应用格式:
使用类模板定义模板类的对象的格式:
类模板名<类型实参表> 对象名(初值表);
C++语言程序设计
栈类模板(例9-9) 特
殊 的 线 性 群 体 栈
#include <iostream> using namespace std; const int MaxStackSize=50; //栈的大小 //栈类模板的声明 template <class Type> class stack{ private: Type stacklist[MaxStackSize]; //用于存放栈的元素的数组 int top; //栈顶位置,数组下标 public: stack(); void push(Type item); //将于元素压入栈 Type pop(void); //出栈 };
17
——
C++语言程序设计
//栈类的实现 template <class Type> stack<Type>::stack() { top=-1;}
//构造函数
template <class Type> //压栈 void stack<Type>::push(Type item) { if(top==MaxStackSize-1) { cout<<"\n stack is full"; return;} top++; stacklist[top]=item; } template <class Type> //出栈 Type stack<Type>::pop(void) { Type t; if(top==-1) { cout<<"\n stack is empty."; return 0; } t=stacklist[top]; //弹出数据暂存于t top--; return t; }
殊 的 线 性 群 体 栈
14
栈空
– 栈中没有元素
栈满
– 栈中元素个数达到上限
一般状态
– 栈中有元素,但未达到栈满状态
——
入栈 数组下标 max
出栈
入栈 数组下标 max n 1 0
出栈
n
1 0
初始状态(栈空)
栈顶
┆ an ┆ a1 a0
一般状态
栈顶
入栈
出栈
堆栈相当于一个固 定大小的数组,
数组下标
出队
a0
……aΒιβλιοθήκη -1 an入队数组下标 0
1
n-1 n
(队满状态)
max
28
C++语言程序设计
作业:
定义数组类和栈类模板, 并分别用数 组类模板和栈类实现学生信息(学号、 成绩)的处理; 选作:用链表类模板实现学生信息的 处理。
29
栈底(相当于数组 的第一个元素) 栈顶(相当于数组 的最后一个元素)
数组下标 max n 1 0
amax ┆ an ┆ a1 a0
栈满状态
栈顶
15
C++语言程序设计
栈的基本操作 特
殊 的 线 性 群 体 栈
16
初始化 入栈 出栈 清空栈 访问栈顶元素 检测栈的状态(满、空)
——
队满
– 队列中元素个数达到上限
一般状态
– 队列中有元素,但未达到队满状态
27
队头 出队 a0 数组下标 0 a1 1
元素移动方向 ……
队尾 入队 max
an-1 an n-1 n
(一般状态) 队头 队尾 出队
…… 0 1 n-1 n
(队空状态) 队头 元素移动方向 a1 队尾 amax
入队 max
20
C++语言程序设计
单链表
… data1 data2 data3 datan NULL
head
rear
21
C++语言程序设计
在结点之后插入一个结点
… data1 data2
…
p
data
假设要在q指向的节点后插入p指向的一个新节点,则 (1)//p节点指针域指向当前节点的后继节点 p->next = q-> next; q-> next = p; //当前节点的指针域指向p
25
C++语言程序设计
特殊的线性群体——队列
队列是只能向一端添加元素,从另 一端删除元素的线性群体
出队
a0 a1 队头
a2
……
an-1 an
入队
队尾
队列与栈结构类似,只是访问方法略有不同
26
C++语言程序设计
特 殊 的 线 性 群 体 —— 队 列
队列的基本状态
队空
– 队列中没有元素
8
C++语言程序设计
总结类模板的实例化过程:
根据类名称后的类型参数生成模板类, 然后利用该类生成各个对象。
应用提示:模板类的定义格式、成员 函数的类外定义格式、模板类的调用 格式
C++语言程序设计
数组类模板的实现://array_template.cpp
//主程序 void main() { Array<int> data(5); cin>>data; cout<<data; } 练习:将Array<int> data(5); 改为Array< float > data(5); 再运行,察看结果,分析类模板的使用过 程
栈顶
a1
栈底
12
C++语言程序设计
栈的应用举例——函数调用 特
殊 的 线 性 群 体 栈
13
入栈 参数 当前现场 返回地址 出栈 ⑦ 当前现场 返回地址 ⑥
出栈 ③
main{} ① 调fun(参数) ⑧ 结束
fun(参数)
⑤
④ 参数 当前现场 返回地址
②
返回
——
C++语言程序设计
栈的基本状态 特
10
C++语言程序设计
5.4类模板的应用 ——群体数据的表示
线性群体
– 线性群体的概念
– 直接访问群体--数组类
– 顺序访问群体--链表类 – 栈类 – 队列类
11
C++语言程序设计
特殊的线性群体——栈
栈是只能从一端访问的线性群体,可 以访问的这一端称栈顶,另一端称栈底。
入栈 出栈
an
┆ a2
22
C++语言程序设计
删除结点之后的结点
… data1 data2 data3 …
tempPtr
假设要删除tempPtr指向的结点,并且p指向它的前项结点,则 (1)//p指向tempPtr结点的后续结点 p->next = tempPtr->next;
(2)释放tempPtr指向的结点 delete tempPtr; }
执行过程:首先用实参类型实例化类模板, 以生成具体的模板类,然后用该类定义对象。
6
C++语言程序设计
类模板应用举例
类模板应用:使用类模板定义模板类的对象的 格式: 类模板名<类型实参表> 对象名表;
例1:定义一个数组类模板,能存放任意类型数 据。数据成员包括数组的首地址(指针)、数 组的长度;成员函数包括输入数组各元素、输 出数组各元素(可用运算符重载,也可以用一 般函数)、访问任一个元素的值。并在主程序 中调用。
19
C++语言程序设计
链表
链表:一种动态数据结构,可以用来表示 顺序访问的线性群体。 结点:链表是由系列结点组成的,结点可 以在运行时动态生成。 结点组成:每一个结点包括数据域和指向 链表中下一个结点的指针(即下一个结点 的地址)。 单链表:如果链表每个结点中只有一个指 向后继结点的指针,则该链表称为单链表。
18
C++语言程序设计
//主函数 void main() { //定义字符堆栈 stack<char> s1; char cc='a'; for(int k=0;k<10;k++) { s1.push(cc); cc++; } cout<<"pop s_char:"; for(k=0;k<10;k++) cout<<s1.pop(); //定义整型堆栈 stack<int> s2; int d; cout<<"\n enter 5 int numbers:"; for(k=0;k<5;k++) { cin>>d; s2.push(d); } for(k=0;k<5;k++) cout<<s2.pop(); //测试栈为空时的情况 cout<<s2.pop()<<endl; } //分析运程过程,理解类模板的实例化过程,入栈、出栈操作
类模板的成员函数:
如果需要在类模板以外定义其成员函数, 则要采用以下的形式: template <class Type> 类型名 类名<Type>::函数名(参数表) { }
其中,类名<Type>表示一个具体的类
5
C++语言程序设计
类模板应用格式:
使用类模板定义模板类的对象的格式:
类模板名<类型实参表> 对象名(初值表);
C++语言程序设计
栈类模板(例9-9) 特
殊 的 线 性 群 体 栈
#include <iostream> using namespace std; const int MaxStackSize=50; //栈的大小 //栈类模板的声明 template <class Type> class stack{ private: Type stacklist[MaxStackSize]; //用于存放栈的元素的数组 int top; //栈顶位置,数组下标 public: stack(); void push(Type item); //将于元素压入栈 Type pop(void); //出栈 };
17
——
C++语言程序设计
//栈类的实现 template <class Type> stack<Type>::stack() { top=-1;}
//构造函数
template <class Type> //压栈 void stack<Type>::push(Type item) { if(top==MaxStackSize-1) { cout<<"\n stack is full"; return;} top++; stacklist[top]=item; } template <class Type> //出栈 Type stack<Type>::pop(void) { Type t; if(top==-1) { cout<<"\n stack is empty."; return 0; } t=stacklist[top]; //弹出数据暂存于t top--; return t; }
殊 的 线 性 群 体 栈
14
栈空
– 栈中没有元素
栈满
– 栈中元素个数达到上限
一般状态
– 栈中有元素,但未达到栈满状态
——
入栈 数组下标 max
出栈
入栈 数组下标 max n 1 0
出栈
n
1 0
初始状态(栈空)
栈顶
┆ an ┆ a1 a0
一般状态
栈顶
入栈
出栈
堆栈相当于一个固 定大小的数组,
数组下标
出队
a0
……aΒιβλιοθήκη -1 an入队数组下标 0
1
n-1 n
(队满状态)
max
28
C++语言程序设计
作业:
定义数组类和栈类模板, 并分别用数 组类模板和栈类实现学生信息(学号、 成绩)的处理; 选作:用链表类模板实现学生信息的 处理。
29
栈底(相当于数组 的第一个元素) 栈顶(相当于数组 的最后一个元素)
数组下标 max n 1 0
amax ┆ an ┆ a1 a0
栈满状态
栈顶
15
C++语言程序设计
栈的基本操作 特
殊 的 线 性 群 体 栈
16
初始化 入栈 出栈 清空栈 访问栈顶元素 检测栈的状态(满、空)
——
队满
– 队列中元素个数达到上限
一般状态
– 队列中有元素,但未达到队满状态
27
队头 出队 a0 数组下标 0 a1 1
元素移动方向 ……
队尾 入队 max
an-1 an n-1 n
(一般状态) 队头 队尾 出队
…… 0 1 n-1 n
(队空状态) 队头 元素移动方向 a1 队尾 amax
入队 max
20
C++语言程序设计
单链表
… data1 data2 data3 datan NULL
head
rear
21
C++语言程序设计
在结点之后插入一个结点
… data1 data2
…
p
data
假设要在q指向的节点后插入p指向的一个新节点,则 (1)//p节点指针域指向当前节点的后继节点 p->next = q-> next; q-> next = p; //当前节点的指针域指向p
25
C++语言程序设计
特殊的线性群体——队列
队列是只能向一端添加元素,从另 一端删除元素的线性群体
出队
a0 a1 队头
a2
……
an-1 an
入队
队尾
队列与栈结构类似,只是访问方法略有不同
26
C++语言程序设计
特 殊 的 线 性 群 体 —— 队 列
队列的基本状态
队空
– 队列中没有元素
8
C++语言程序设计
总结类模板的实例化过程:
根据类名称后的类型参数生成模板类, 然后利用该类生成各个对象。
应用提示:模板类的定义格式、成员 函数的类外定义格式、模板类的调用 格式