栈
栈的操作原则是:先进后出,后进先出
二、栈的特点
根据栈的定义可知,最先放入栈中元素在栈底,最后放入的元素在栈顶,而删除元素刚好相反,最后放入的元素最先删除,最先放入的元素最后删除。
也就是说,栈是一种后进先出(Last In First Out)的线性表,简称为LIFO表。
三、栈的运算
1.初始化栈:INISTACK(&S)
将栈S置为一个空栈(不含任何元素)。
2.进栈:PUSH(&S,X)
将元素X插入到栈S中,也称为 “入栈”、 “插入”、 “压入”。
3.出栈: POP(&S)
删除栈S中的栈顶元素,也称为”退栈”、 “删除”、 “弹出”。
4.取栈顶元素: GETTOP(S)
取栈S中栈顶元素。
5.判栈空: EMPTY(S)
判断栈S是否为空,若为空,返回值为1,否则返回值为0。
栈总是处于栈空、栈满或不空不满三种状态之一,它们是通过栈顶指针top的值体现出来的。
规定:top的值为下一个进栈元素在数组中的下标值。
栈空时(初始状态),top=0;
栈满时,top=MAXN.
三、栈的五种运算
(一) 进栈
1) 进栈算法
(1) 检查栈是否已满,若栈满,进行“溢出”处理。
(2) 将新元素赋给栈顶指针所指的单元。
(3) 将栈顶指针上移一个位置(即加1)。
(二) 出栈
1) 出栈算法
(1) 检查栈是否为空,若栈空,进行“下溢”处理。
(2)将栈顶指针下移一个位置(即减1) 。
(3)取栈顶元素的值,以便返回给调用者。
四.栈的共享存储单元
有时,一个程序设计中,需要使用多个同一类型的栈,这时候,可能会产生一个栈空间过小,容量发生溢出,而另一个栈空间过大,造成大量存储单元浪费的现象。 为了充分利用各个栈的存储空间,这时可以采用多个栈共享存储单元,即给多个栈分配一个足够大的存储空间,让多个栈实现存储空间优势互补。
4、两个栈共享同一存储空间
当程序中同时使用两个栈时,可以将两个栈的栈底设在向量空间的两端,让两个栈各自向中间延伸。当一个栈里的元素较多,超过向量空间的一半时,只要另一个栈的元素不多,那么前者就可以占用后者的部分存储空间。
只有当整个向量空间被两个栈占满(即两个栈顶相遇)时,才会发生上溢。因此,两个栈共享一个长度为m的向量空间和两个栈分别占用两个长度为 └ m/2┘和┌m/2┐的向量空间比较,前者发生上溢的概率比后者要小得多。
队列
1、定义
队列(Queue)是只允许在一端进行插入,而在另一端进行删除的运算受限的线性表
(1)允许删除的一端称为队头(Front)。
(2)允许插入的一端称为队尾(Rear)。
(3)当队列中没有元素时称为空队列。
(4)队列亦称作先进先出(First In First Out)的线性表,简称为FIFO表。
队列的修改是依先进先出的原则进行的。新来的成员总是加入队尾(即不允许"加塞"),每次离开的成员总是队列头上的(不允许中途离队),即当前"最老的"成员离队。
队列的存储结构:
顺序队列
队列的顺序存储结构称为顺序队列,顺序队列实际上是运算受限的顺序表,和顺序表一样,顺序队列也是必须用一个数组来存放当前队列中的元素。由于队列的队头和队尾的位置是变化的,因而要设两个指针和分别指示队头和队尾元素在队列中的位置。
1、用例图(use case diagrams)
【概念】描述用户需求,从用户的角度描述系统的功能
【描述方式】椭圆表示某个用例;人形符号表示角色
【目的】帮组开发团队以一种可视化的方式理解系统的功能需求
【用例图】
2、静态图
- 类图(class diagrams)
【概念】显示系统的静态结构,表示不同的实体是如何相关联的
【描述方式】三个矩形
【目的】表示一个逻辑类或实现类,逻辑类通常是用户的业务所涉及的事物;实现类是程序员处理的实体
【类图】
- 对象图(object diagrams)
【概念】类图的一个实例,描述系统在具体时间点上所包含的对象以及各个对象的关系
【对象图】
3、交互图
用来描述对象之间的交互关系
- 序列图(顺序图)
【概念】描述对象之间的交互顺序,着重体现对象间消息传递的时间顺序
【描述方式】横跨图的顶部,每个框表示每个类的实例或对象;类实例名称和类名称使用冒号分开
【目的】显示流程中不同对象之间的调用关系,还可以显示不同对象的不同调用。
【序列图】
- 协作图(Collaboration diagrams)
【概念】描述对象之间的合作关系,侧重对象之间的消息传递
4、行为图:描述系统的动态模型和对象之间的交互关系
1.状态图(Statechart diagrams)
-
【概念】描述对象的所有状态以及事件发生而引起的状态之间的转移
【描述方式】
- 起始点:实心圆
- 状态之间的转换:使用开箭头的线段
- 状态:圆角矩形
- 判断点:空心圆
- 一个或多个终止点:内部包含实心圆的圆
【目的】表示某个类所处的不同状态以及该类在这些状态中的转换过程
2.活动图(Activity diagrams)
【概念】描述满足用例要求所要进行的活动以及活动时间的约束关系
【描述方式】
- 起始点:实心圆
- 活动:圆角矩形
- 终止点:内部包含实心圆的圆
- 泳道:实际执行活动的对象
【目的】表示两个或多个对象之间在处理某个活动时的过程控制流程
【活动图】
活动图和状态图区别:
5、实现图
- 构件图(Component diagrams)
【概念】描述代码构件的物理结构以及各构件之间的依赖关系
【描述方式】构件
【目的】提供系统的物理视图,根据系统的代码构件显示系统代码的整个物理结构
【构架图】
- 部署图(Deployment diagrams)
【概念】系统中硬件的物理体系结构
【描述方式】
- 三维立方体表示部件
- 节点名称位于立方体上部
【目的】显示系统的硬件和软件的物理结构
【部署图】