电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

数据结构chapter3aVIP免费

数据结构chapter3a_第1页
1/34
数据结构chapter3a_第2页
2/34
数据结构chapter3a_第3页
3/34
第三章栈和队列3.1栈(stack)3.1.1栈的定义及基本运算栈(Stack):限定仅只能在表尾进行插入和删除的线性表。栈顶(Top):表尾。栈底(Bottom):表头。不含元素的空表称空栈。栈和队列是两种特殊的线性表,是操作受限的线性表。ana1a2……...栈底栈顶...出栈进栈栈s=(a1,a2,……,an)假设栈S=(a1,a2,a3,…an),则a1称为栈底元素,an为栈顶元素。ana1a2……...栈底栈顶...出栈进栈栈s=(a1,a2,……,an)栈中元素按a1,a2,a3,…an的次序进栈,退栈的第一个元素应为栈顶元素。换句话说,栈的修改是按后进先出的原则进行的。因此,栈称为后进先出表(LIFO)。栈顶栈底an…a1a2...an进栈出栈抽象数据类型栈的定义:ADTStack{数据对象:数据关系:约定an端为栈顶,a1端为栈底。基本操作:InitStack(&S)操作结果:构造一个空栈S。DestroyStack(&S)初始条件:栈S已存在。操作结果:栈S被销毁。ClearStack(&S)初始条件:栈S已存在。操作结果:将S清为空栈。0,,,2,1,|nniElemSetaaDiiniDaaaaRiiii,,2,,|,111StackEmpty(S)初始条件:栈S已存在。操作结果:若栈S为空栈,则返回TRUE,否则FALE。StackLength(S)初始条件:栈S已存在。操作结果:返回S的元素个数,即栈的长度。GetTop(S,&e)初始条件:栈S已存在且非空。操作结果:用e返回S的栈顶元素。Push(&S,e)初始条件:栈S已存在。操作结果:插入元素e为新的栈顶元素。Pop(&S,&e)初始条件:栈S已存在且非空。操作结果:删除S的栈顶元素,并用e返回其值。}ADTStack栈的存储方式:1、顺序栈:利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时附设指针top指示栈顶元素在顺序栈中的位置。★栈底元素是最先进入的,实际上是线性表的第一个元素。2、链栈:利用链表实现。3.1.2栈的表示和实现#defineSTACK_INIT_SIZE100;//存储空间初始分配量#defineSTACKINCREMENT10;//存储空间分配增量typedefstruct{SElemType*base;//栈底指针SElemType*top;//栈顶指针intStackSize;//栈的当前已分配的存储空间.}SqStack;顺序栈的定义:空栈base==top是栈空标志stacksize=5topbaseAtopbaseABCDEbaseABtoptopbase31204插入新的栈顶元素时,指针top增1;删除栈顶元素时,指针top减1,因此,非空栈中的栈顶指针始终在栈顶元素的下一个位置上。栈满顺序栈的图示anaiai-1a2a1S.topS.stacksizeS.baseSTACK_INIT_SIZEnn-1i-1i-210nn-1i-1i-210S.topS.stacksizeS.baseSTACK_INIT_SIZE初始化操作图示初始化操作图示StatusInitStack(SqStack&S){//构造一个空栈SreturnOK;}S.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType));if(!S.base)exit(OVERFLOW);//存储分配失败S.top=S.base;S.stacksize=STACK_INI_SIZE;nn-1i-1i-210anaiai-1a2a1S.topS.stacksizeS.baseSTACK_INIT_SIZEnn-1i-1i-210S.topS.stacksizeS.baseSTACK_INIT_SIZEanaiai-1a2a1置空栈操作图示S.base=S.top表明栈为空置空前置空后StatusClearStack(SqStack&S);{//将S清为空栈}If(!S.base)returnERROR;S.top=S.base;StatusStackEmpty(SqStackS);{//若栈S为空栈,则返回TRUE,否则FALE。}If(!S.base)returnERROR;If(S.top==S.base)returnTRUE;elsereturnFALSE;S.top=nullS.stacksizeS.base=null0nn-1i-1i-210anaiai-1a2a1S.topS.stacksizeS.baseSTACK_INIT_SIZE销毁前销毁后销毁栈操作图示StatusDetroyStack_Sq(SqStack&S)//销毁一个已存在的栈;{returnOK;}If(!S.base)returnERROR;free(S.base);//回收栈空间S.base=S.top=NULL;S.stacksize=0;StatusGetTop(SqStackS,SElemType&e);{//若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERRORreturnOK;}if(S.top==S.base)returnERROR;e=*(S.top-1);baseABtopStatusPop(SqStack&S,SElemType&e);{//若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERRORreturnOK;}If(S.top==S.base)returnERROR;e=*--S.top;baseABtopStatusPush(SqStack&S,SElemTypee);{//插入元素e为新的栈顶元素if(S.top-S.base>=S.stacksize){//栈满,追加存储空间S.base=(ElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

数据结构chapter3a

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部