第三章栈和队列A(NEW).ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
1. 定义;3.1 栈;例1 一个栈的输入序列为1,2,3,若在入栈的过程中允许出栈,则可能得到的出栈序列是什么?;例2:一个栈的输入序列是12345,若在入栈的过程中允许出栈,则栈的输出序列43512可能实现吗?12345的输出呢?;例3:;Q1:堆栈是什么?它与一般线性表有什么不同?;栈的基本运算 : InitStack(s) 初始化操作,初始化为空栈s 。 IsEmpty(s) 判断栈空函数。如果s是空栈,返回“true”,否则返回“false”。 IsFull(s) 判断栈满函数。主要应用在顺序存储结构中,如果s栈满,返回“true”,否则返回“false”。 Push(s,x) 压栈操作。将元素x插入到栈s中,并使x成为新的栈顶元素。 Pop(s) 出栈函数。如果栈s非空,那么返回栈顶元素,并删除该栈顶元素,否则返回空值NULL。 GetTop(s) 获取栈顶元素。如果栈s非空,那么返回值为栈顶元素,否则返回空值NULL。;栈有两种存储结构:顺序存储结构和链式存储结构。 3.1.2 栈的顺序存储结构 顺序栈:顺序存储结构的栈。 顺序栈:用一组连续的存储单元存放自栈底到栈顶的数据元素,一般用一维数组表示 栈顶指针:指示栈顶位置 ;顺序栈类型: #define StackSize 100 /*顺序栈的初始分配空间*/ typedef struct sqst { DataType data[StackSize]; /*保存栈中元素*/ int top; /*栈指针*/ } SeqStack; 顺序栈被定义为一个结构体类型,有两个域:data和top。 data为一维数组,存储栈中元素,DataType为栈元素的数据类型,可以根据需要而指定为某种具体的类型。 top为int型,它的实际取值范围为0~StackSize-1。 top=-l表示栈空;top=StackSize-1表示栈满。 栈的长度:栈顶指针+1; a1;栈不存在的条件: base=NULL; 栈为空 的条件 : base=top; 栈满的条件 : top-base=stacksize;;若入栈动作使地址向高端增长,称为“向上生成”的栈; 若入栈动作使地址向低端增长,称为“向下生成”的栈; 对于向上生成的堆栈: 入栈口诀:堆栈指针top “先压后加” : S[top++]=an+1 出栈口诀:堆栈指针top “先减后弹” : e=S[--top];Q4:为什么要设计堆栈?它有什么独特用途?;编制递归算法:;顺序栈的入栈操作——例如用堆栈存放(A,B,C,D);顺序栈出栈操作——例如从栈中取出‘B’;3.1.3 栈的链式存储结构;栈的基本运算算法: ;(2) 判断栈空运算 功能:若栈为空则返回值1,否则返 回值0。 int StackEmpty(LinkStack *ls) { if(ls-next==NULL) return 1; else return 0; }; (3) 进栈运算 void Push(LinkStack *ls, DataType x) { LinkStack *p; p=(LinkStack*)malloc(Sizeof(LinkStack)); p-data=x; p-next=ls-next; ls-next=p; };(4)出栈运算 功能: 将栈顶结点的data域值赋给x, 然后删除该栈顶结点。 int Pop(LinkStack *ls,DataType x) { LinkStack *p; if(ls-next==NULL) /*栈空,下溢出*/ return 0; else { p=ls-next; x=p-data; ls-next=p-next; free(p); return 1; } };(5)取栈顶元素运算算法 功能:将栈顶结点的data域值赋给x。 int GetTop(LinkStack *ls, DataType x) { if(ls-next==NULL) /*栈空,下溢出*/ return 0; else { x=ls

文档评论(0)

糖糖 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档