栈及其基本运算
1.栈的基本概念
栈是限定只在一端进行插入与删除的线性表,通常称插入、删除的这一端为栈顶,另一端为栈底。当表 中没有元素时称为空栈。栈顶元素总是后被插入的元素,从而也是最先被删除的元素;栈底元素总是最先被 插入的元素,从而也是最后才能被删除的元素。栈是按照'先进后出'或'后进先出'的原则组织数据的。
2.栈的顺序存储及其运算
用一维数组S(1∶m)作为栈的顺序存储空间,其中m为最大容量。
在栈的顺序存储空间S(1∶m)中,S(bottom)为栈底元素,S(top)为栈顶元素。top=0表示栈空;top=m表示栈满。
栈的基本运算有三种:入栈、退栈与读栈顶元素。
(1)入栈运算:入栈运算是指在栈顶位置插入一个新元素。首先将栈顶指针加一(即top加1),然后将新元素插入到栈顶指针指向的位置。当栈顶指针已经指向存储空间的最后一个位置时,说明栈空间已满,不 可能再进行入栈操作。这种情况称为栈'上溢'错误。
[if !vml][endif](2)退栈运算:退栈是指取出栈顶元素并赋给一个指定的变量。首先将栈顶元素(栈顶指针指向的元素)赋给一个指定的变量,然后将栈顶指针减一(即top减1)。当栈顶指针为0时,说明栈空,不可进行退栈操作。这种情况称为栈的'下溢'错误。
(3)读栈顶元素:读栈顶元素是指将栈顶元素赋给一个指定的变量。这个运算不删除栈顶元素,只是将它赋给一个变量,因此栈顶指针不会改变。当栈顶指针为0时,说明栈空,读不到栈顶元素
数组下面编号最大这个我实在看不懂
这种问题怎么理解呢?
空间下标范围是1-50。但是,初始状态的top范围不能是1-50,是1-50就表示里面有元素了。初始没有元素,top的值要在1-50之外(比如top=0)。
初始状态,一定是没有任何元素的"空栈”状态。
初始状态,top表示"地下”,1-50都是“地上”的空间。
●地下如果是0,则紧贴地面的自然是1 (不
能是50吧)
●地下如果是51,则紧贴地面的自然是
50 (不能是1吧)
两种情况分别表示编号是自上而下的,还是自下而上的。
链表的类型
在定义的链表中,若只含有一个指针域来存放下一个元素地址,称这样的链表为单链表或线性链表。
带链的栈可以用来收集计算机存储空间中所有空闲的存储结点,是线性表。
在单链表中的结点中增加一个指针域指向它的直接前件,这样的链表,就称为双向链表(一个结点中含有两个指针),也是线性链表。
循环链表具有单链表的特征,但又不需要增加额外的存贮空间,仅对表的链接方式稍做改变,使得对表的处理更加方便灵活,属于线性链表。
二叉链表是二叉树的物理实现,是一种存储结构,不属于线性结构。
关系数据库设计
关系数据库设计有需求分析、概念设计、逻辑设计、物理设计、编码、测试、运行、进一步修改等几个阶段。在需求分析阶段形成需求说明书,概念设计阶段形成概念数据模型(E-R模型,作为进一步设计数据库的依据),逻辑设计阶段形成逻辑数据模型(从E- R图向关系模式转换、关系视图设计、模式规范化),物理设计阶段形成数据库内部模型(此时涉及具体软件硬件环境)。
关系数据库-范式
关系数据库中的关系是要满足一定要求的,满足不同程度要求的为不同的范式。
满足最低要求的叫第一范式,简称 1NF。在满足第一范式的基础上 ,进一步满足更多要求规范则是第二范式。然后在满足第二范式的基础上,还可以再满足第三范式,以此类推。
对于关系模式,若其中的每个属性都已不能再分为简单项,则它属于第一范式。
若某个关系R为第一范式,并且R中每-个非主属性完全依赖于R的某个候选键,则称其为第二范式。第二范式消除了非主属性对主键的部分依赖。
如果关系R是第二范式,并且每个非主属性都不传递依赖于R的候选键,则称R为第三范式。(传递依赖:在关系模式中,如果Y→X,X→A,且X不决定Y和A不属于x,那么Y-→A是传递依赖。)
比第三范式更高级的BCF范式,它要求所有属性都不传递依赖于关系的任何候选键。
联系客服