03栈new1.ppt

03栈new1.ppt

ID:48467978

大小:1.29 MB

页数:77页

时间:2020-01-18

03栈new1.ppt_第1页
03栈new1.ppt_第2页
03栈new1.ppt_第3页
03栈new1.ppt_第4页
03栈new1.ppt_第5页
资源描述:

《03栈new1.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、第三章栈和队列7/21/2021通常称,栈和队列是限定插入和删除只能在表的“端点”进行的线性表。线性表栈队列Insert(L,i,x)Insert(S,n+1,x)Insert(Q,n+1,x)1≤i≤n+1Delete(L,i)Delete(S,n)Delete(Q,1)1≤i≤n栈和队列是两种特殊的线性表,是操作受限的线性表,称限定性DS。7/21/20213.3栈的应用举例3.1栈的类型定义3.2栈类型的实现3.4队列的类型定义3.5队列类型的实现7/21/2021栈的定义和特点定义:限定仅在表尾进行插入或删除操作的线性表,表尾—栈顶,表头—

2、栈底,不含元素的空表称空栈。特点:先进后出(FILO)或后进先出(LIFO)ana1a2……...栈底栈顶...出栈进栈栈s=(a1,a2,……,an)3.1栈的类型定义7/21/2021ADTStack{数据对象:D={ai

3、ai∈ElemSet,i=1,2,...,n,n≥0}数据关系:R1={

4、ai-1,ai∈D,i=2,...,n}约定an端为栈顶,a1端为栈底。基本操作:}ADTStack栈的抽象数据类型定义7/21/2021InitStack(&S)DestroyStack(&S)ClearStack(&S)Stack

5、Empty(s)StackLength(S)GetTop(S,&e)Push(&S,e)Pop(&S,&e)StackTravers(S,visit())7/21/20213.2栈类型的实现3.2.1顺序栈3.2.1链栈7/21/2021利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时附设指向表尾的指针top,指示栈顶元素在顺序栈中的位置,称为栈顶指针。连续存储单元的基址用指针base指示,称为栈底指针。3.2.1顺序栈7/21/2021top=0123450栈S空栈顶指针top,指向实际栈顶前的空位置,初值为0top123450进栈

6、Atop出栈栈满BCDEF设数组大小为Mtop=0,栈空,此时出栈,则下溢(underflow)top=M,栈满,此时入栈,则上溢(overflow)toptoptoptoptop123450ABCDEFtoptoptoptoptoptop栈空0M-1栈1底栈1顶栈2底栈2顶为减少溢出的概率,可以在同一段内存中同时使用两个栈.StackLength(S)basebasebase7/21/2021//-----栈的顺序存储表示-----#defineSTACK_INIT_SIZE100;#defineSTACKINCREMENT10;typedefs

7、truct{SElemType*base;SElemType*top;intstacksize;}SqStack;7/21/2021(1)初始化操作Initstack(sqstack&S)基本操作的实现:StatusInitstack(sqstack&S){s.base=(selemtype*)malloc(stack_init_size*sizeof(selemtype));if(!s.base)exit(overflow);s.top=s.base;s.stacksize=stack_init_size;returnok;}7/21/2021(

8、2)判栈空函数stackEmpty(sqstackS)statusstackempty(sqstacks){ifs.top==s.basereturn(true)elsereturn(false);}(3)返回桟的长度Stacklength(sqstacks)IntStacklength(sqstacks){return(s.top-s.base);}s.tops.baseCBAs.bases.top7/21/2021(4)取栈顶元素函数gettop(sqstacks,selemtype&e)Statusgettop(sqstacks,selemt

9、ype&e){if(s.top=s.base)returnerror;e=_____________;returnok;}CBAs.bases.top*(s.top–1)7/21/2021(5)进栈函数push(sqstack&s,selemtypee)Statuspush(sqstack&s,selemtypee){(1)if桟满追加空间;(2)e进桟;(3)top加1;}CBAs.bases.top7/21/2021StatusPush(SqStack*s,SElemTypee){if(s->top–s->base>=s->stacksize)

10、/*栈满,追加存储空间*/{l_temp=(SElemType*)realloc(s->base,(s->stacksiz

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。