1,1997(c)DaleCarnegieAssociates,Inc.数据结构栈
朱振元
2栈的初步认识栈是限定只能在表的一端进行操作的线性表。特点:’后进先出’,栈又称作后进先出表(LIFO,即LastInFirstOut)。ana2a1入栈出栈栈顶栈底
3一般表示及基本术语栈是限定只能在表的一端进行操作的线性表。S=(a1,a2,……ai-1,ai,ai+1,……an)栈顶(top)在表中允许插入和删除的一端栈底(botton)不允许插入和删除的一端入栈(push)向栈顶插入一个元素的操作出栈(pop)从栈顶取出一个元素的操作栈一经确定,则栈底便固定不变,而栈顶随入栈、出栈操作的执行不断地变化。特点:’后进先出’,栈又称作后进先出表(LIFO,即LastInFirstOut)。
4栈的主要应用实现递归过程。必须设置一个数据栈来存放递归过程中的参数与局部变量等信息回塑法求解问题。为了达到正确的目的地,必须设置一个栈来记录已走过的路径上的每一点的有关信息表达式的翻译。必须设置一个栈来存放暂不能处理的那些符号或被用于检查表达式中的各种括号是否配对。
5栈抽象数据类型描述数据元素:可以是各种类型的数据,但必须同属于一个数据元素类。结构关系:栈中的n个元素呈线性关系。基本操作:对栈可执行以下的基本操作Initiate(S)构造一个空栈S。Clear(S)将栈S清为空栈。Length(S)求长度。Empty(S)判空栈。Full(S)判栈满。Push(S,el)入栈操作。Pop(S)出栈操作。GetTop(S)取栈顶操作。
6栈抽象类templateclassTelemclassStack{public:virtualvoidinit()=0;//初始化virtualintleng()=0;//求长度virtualboolfull()=0;//判栈满virtualboolempt()=0;//判空栈virtualboolpush(Telemel)=0;//将el推入栈中,操作成功返回true否则返回falsevirtualTelempop()=0;//若栈非空返回栈顶元素且删除栈顶元素,否则返回NULLvirtualTelemgettop()=0;//若栈非空返回栈顶元素,否则返回NULL};
7顺序栈类栈在计算机中的存储方式可分为顺序存储方式和链式存储方式二种。采用顺序的存储方式存储的栈称为顺序栈,由此建立一个实现类,实现栈抽象类中定义的各接口函数的功能,该实现类称为顺序栈类。
8顺序栈的结构形式用一组地址连续的存储单元来依次存储栈中的各个元素。Top与栈的状态的关系ana1Elem[0..max-1]Max-1top0Top=2Top=4Top=-1
9顺序栈的类型定义constintmaxlen=栈中允许存放元素个数的最大值;structTsqStack{Telemelem[maxlen];inttop;};TsqStacks;s.top表示栈顶指示器,s.elem[s.top]表示栈顶元素
10顺序栈类的定义templateclassTelemclassSqStack:publicStackTelem{private:Telem*elem;inttop;intmaxlen;public:SqStack(intmaxsz=100);~SqStack(){delete[]elem;};voidinit(){top=-1;};intleng(){returntop+1;};boolpush(Telemel);Telempop();Telemgettop();boolfull(){returntop==maxlen-1;};boolempt(){returntop==-1;};};
11顺序栈类的构造函数与析构函数templateclassTelemSqStackTelem::SqStack(intmaxsz):maxlen(maxsz){top=-1;elem=newTelem[
原创力文档

文档评论(0)