1、ThanksWangqiongofZhongbeicollegeattachingtoNanjing Normal University第三章栈与队列栈与队列:限定操作的线性表。第一节栈一、逻辑结构1、栈的定义限定只能在表的一端进行插入、删除的线性表。 栈顶top,栈底bottom。 后进先出LIFO表(LastInFirstOut)实例:“进制数转换”、“表达式求值”、“函数调用关系”、“括号匹配问题”、“汉诺塔问题”、“迷宫问题”……2、基本操作进栈Push/出栈Pop取栈顶元素GetTop判别栈空StackEmpty/栈满StackFull3、栈的应用背景许多问题的求解
2、分为若干步骤,而当前步骤的解答,是建立在后继步骤的解答基础上的。=》问题分解的步骤和求解的步骤次序恰好相反。3-9ThanksWangqiongofZhongbeicollegeattachingtoNanjing Normal University二、顺序存储结构动态顺序存储结构:存储空间随栈的大小而变化。#defineSTACK_INIT_SIZE100//初始化时分配的空间typedefstruct//定义栈类型{ElemType*base,*top;//栈底、栈顶指针intstacksize;//栈的存储空间大小}SqStack;SqStackS;//定义一个栈结构1、初
4、W);S.top=e;S.top++;return(OK);}3、出栈算法StatusSqStack_Pop(SqStack&S,ElemType&e){if(S.top==S.base)return(UNDERFLOW);S.top--;e=S.top;3-9ThanksWangqiongofZhongbeicollegeattachingtoNanjing Normal Universityreturn(OK);}缺点:空间浪费思考:二栈合用同一顺序空间?#definemaxsize=100intstack[maxsize],top0=0,top1=maxsize-1;int
6、inknode//栈中结点类型{ElemTypedata;structlinknode*link;}LinkNode;typedefstruct//定义栈类型{LinkNode*top;//栈顶指针intstacksize;//栈的大小(可选)}LinkStack;3-9ThanksWangqiongofZhongbeicollegeattachingtoNanjing Normal UniversityLinkStackS;初始化:S.top==NULL;S.stacksize==0栈空:S.top==NULL栈满:系统内存不够1、进栈StatusLinkStack_Push(