预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10
亲,该文档总共59页,到这已经超出免费预览范围,如果喜欢就直接下载吧~
如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
会计学4.1栈(Stack)4.1.1栈的定义(dìngyì)4.1.2栈的抽象数据类型ADTSTACKISData:一个栈S,假定用标识符StackType表示栈对象类型Operation:voidInitStack(StackType&S);//初始化voidPush(StackType&S,ElemTypeitem);//入栈ElemTypePop(StackType&S);//出栈ElemTypePeek(StackType&S);//返回栈顶元素(yuánsù)boolEmptyStack(StackType&S);//判断是否为空voidClearStack(StackType&S);//清空endSTACKInitStack(a);//初始化aPush(a,18);//18进栈intx=46;Push(a,x);//46进栈Push(a,x/3);//15进栈x=Pop(a);//15出栈,x=15cout<<Peek(a);//读取栈顶元素(yuánsù)46并输出Pop(a);//46出栈EmptyStack(a);//返回false,因为栈非空cout<<Pop(a);<<endl;//屏幕显示18,18出栈x=EmptyStack(a);//返回x=1,因为栈空练习:1.有a,b,c三个元素依次(yīcì)进栈,任何时候都可以出栈,共有多少种出栈次序?a,b,ca,c,bb,a,cb,c,ac,b,a2.P173习题4-14.2栈的顺序存储结构和操作(cāozuò)实现动态分配数组空间(kōngjiān)1.初始化栈S为空voidInitStack(Stack&S){S.MaxSize=10;S.stack=newElemType[s.MaxSize];if(!S.stack){cerr<<“动态存储分配失败(shībài)!”<<endl;exit(1);}S.top=-1;}2.元素(yuánsù)item进栈,即插入到栈顶voidPush(Stack&S,ElemTypeitem){if(S.top==S.MaxSize-1){intk=sizeof(ElemType);S.stack=(ElemType*)realloc(S.stack,2*S.MaxSize*k);S.MaxSize=2*S.MaxSize;}S.top++;S.stack[S.top]=item;}2.元素(yuánsù)item进栈,即插入到栈顶voidPush(Stack&S,ElemTypeitem){if(S.top==S.MaxSize-1){cerr<<“StackisFull!”<<endl;exit(1);}S.top++;S.stack[S.top]=item;}3.删除(shānchú)栈顶元素并返回ElemTypePop(Stack&S){if(S.top==-1){cerr<<“StackisEmpty!”<<endl;exit(1);}S.top--;returnS.stack[S.top+1];}4.读取栈顶元素(yuánsù)的值ElemTypePeek(Stack&S){if(S.top==-1){cerr<<“Stackisempty!”<<endl;exit(1);}returnS.stack[S.top];}5.判断S是否(shìfǒu)为空,若是则返回ture,否则返回falseboolEmptyStack(Stack&S){returnS.top==-1;}6.清除栈S中的所有(suǒyǒu)元素,释放动态存储空间voidClearStack(Stack&S){if(S.stack){delete[]S.stack;S.stack=0;}S.top=-1;S.MaxSize=0;}链栈:是一个单链表,表头(biǎotóu)结点是栈顶,表尾结点是栈尾,只能对表头(biǎotóu)进行操作。栈的运算在链接(liànjiē)存储结构上的实现(1)初始化链栈voidInitStack(SNode*&HS){HS=NULL;}(3)从链栈中删除一个(yīɡè)元素并返回ElemTypePop(SNode*&HS){if(HS==NULL){cerr<<“Linkedstackisempty!”<<endl;exit(1);}Snode*p=HS;HS=HS->next;ElemTypetemp=p->data;deletep;returntemp;}(4)读取栈顶元素(yuánsù)Ele